Entwickler-Ecke

Multimedia / Grafik - DelphiX unterricht


DeltaEx - Mi 05.02.03 19:45
Titel: DelphiX unterricht
Hi Leute, ich will DelphiX erlernen alle Tutorials die ich im Internet gefunden habe sind nicht gut. Und so frage ich euch ob einer mir helfen könnte? z.B. Quellcode zu verfügung stehlen, beispiele usw.
Wenn ich denn erfolg sehe würde ich dafür sogar Bezahlen.

Als erstes will ich in 2D einsteigen, ein 2D Weltraumshooter wäre doch gut für den anfang.

Ok meldet euch bitte


Aya - Mi 05.02.03 20:04
Titel: Re: DelphiX unterricht
Hi,
DeltaEx hat folgendes geschrieben:
Als erstes will ich in 2D einsteigen, ein 2D Weltraumshooter wäre doch gut für den anfang.

das klingt als wolltest du später mal 3D machen.. ja? :)

Ich hab zwar keine ahnung von DelphiX, aber... soweit ich weiß ist das mittlerweile ziemlich veraltet und für 3D Dinge auf heutigem Stand bei weitem nichtmehr geeignet... :roll:

Ich würd dir empfehlen direkt Direct3D oder OpenGL zu programmieren.

Bei Direct3D kann dir nur die feindliche fraktion helfen *g*
Bei OpenGL bin ich immer gern hilfsbereit.. ;)

Ansonsten könnte ich dir für OpenGL noch die 2 Seiten empfehlen:
- http://nehe.gamedev.net (Englisch, viele gute Tutorials!)
- http://www.DelphiGL.com (Deutsch!! Forum + Tutorials)

Au'revoir,
Aya~

PS: Sorry das ich dir bei DelphiX nich weiterhelfen kann ''^^


maximus - Do 06.02.03 11:52

Moin,

ich kann mich nur Aya anschliessen, wenn du directX machen willst, dann empfehle ich [url]http://www.minfos.de[/url] (gute DX referenz + tuts) und [url]http://www.neobrothers.de[/url] (gutes forum +tuts)! Da du aber anscheinend 'n DX anfänger bist kann es nicht schaden erstma ein kleines spiel in delphiX zu machen...musst nur zusehen, dass du davon wieder los kommst :wink: (delphiX macht zum glück NICHT süchtig)

Warum experimentierst du nicht erstmal mit dem sprite shooter example von delphiX und baust deinen shooter darauf auf.

mfg mx

PS: wenn du pixel-kollision einsetzen willst (wie das sample) dann bau den folgenden Bugfix ein: http://www.delphi-forum.de/viewtopic.php?t=6686


mimi - Sa 08.02.03 22:09

also wie ich schon mehrmals gesagt habe:
delphiX ist prima für 2D Spiele für 3D würde ich OpenGl nehmen(habe ein passende VCL komponentne sammlung gefunden mit der das VIEL einfacher geht;)
du brauchst dort keine zeile code schreiben um eine 3D würfel zu erstellen;)


mimi - Sa 08.02.03 22:10

achja nochwas bei DelphiX kann ich dir gerne weiterhelfen;)
z.B. auf meiner hompage(http://www.mimi.gsource.de) sind alle meine Spiele in delphiX und Delphi 5 standrt geschrieben;))


Aya - Sa 08.02.03 22:45

mimi hat folgendes geschrieben:
du brauchst dort keine zeile code schreiben um eine 3D würfel zu erstellen;)


Mag sein, aber lernen tust du dabei nich so wirklich was, oder???
und zusammenklicken kann sich jeder alles :)

Au'revoir,
Aya


mimi - Sa 08.02.03 22:57

hast auch wider recht Aya aber für den anfag damit du dich an 3D gewöhen kannst ist das eine hilfe.

und da wir das Theme 3D nicht in er Schule hatten sind die komponenten wirklich ein glücksfall für mich;)


Aya - Sa 08.02.03 23:05

Du, ich hatte mein ganzes Lebenlang nichmal Informatik unterricht oder irgendwas in der richtung in der schule... (ok, einen 10-Finger-Schreibkurs... *gg*) ;)


mimi - Sa 08.02.03 23:07

und ich war auf einer Sonderschule(im ernst, kannst mir glauben) ;)
aber egal, darüber sollten wir uns jetzt nicht streiten(macht einen schlechten eindruck :P )


tommie-lie - So 09.02.03 12:55

mimi meint GLScene [http://glscene.org], Aya.
Damit kann man zwar tatsächlich einen Würfel erstellen, ohne eine Zeile Code schreiben zu müssen, was ich auch sehr angenehm finde, aber um irgendwas zu bewegen (drehen, verschieben) muss man schon viel Mathewissen mitbringen. Zwar gibt es für viele Sachen Funktionen, aber die versteht man auch nicht, ohne Mathe. Und so schlimm finde ich das auch nicht, daß man für einfache Objekte keinen Code braucht. Wenn du zum Beispiel über die oGL-API programmierst, hast du doch sicherlich auch Units geschrieben, die dir die meiste Arbeit abnehmen, oder tippst du bei jedem popeligen Programm 100 Zeilen an Objekterstellung neu? Wahrscheinlich doch nicht! Und da man in GLScene auch dynamisch Objekte erstellen kann, ist das auch eigentlich kein Nachteil...

Was DelphiX anbetrifft: Die Entwicklung wurde schon lange eingestellt. Der Stand ist DirectX 7.0, was schon ein klein bisschen verjährt ist. Für 2D-Anwendungen reicht das vollkommen aus und dafür dürfte DelphiX auch ein guter Einstieg in die MAterie sein (solange man nicht da hängen bleibt), aber für anständige 3D-Programme ist DelphiX absolut nicht zu empfehlen. Da sollte man auf jeden Fall eine Komponente nehmen, die noch weiterentwickelt wird, damit auch künftige Effekte genutzt werden können. Irgendwo hier im Forum habe ich mal solche Komponentensammlungen für DirectX gefunden. Ich glaueb die eine war UnDelphiX (aber ich weiß nicht, was genau das ist und ob die weiterentwickelt wird!) und das andere habe ich vergessen.
Falls du planst, die Programme auch mal für Linux zu schreiben (dafür gibt's ja Kylix), musst du auf jeden fall oGL nehmen, weil MS DirectX leider nicht für Linux entwickelt. Inwiefern GLScene auch auf Linux läuft, weiß ich nicht. Angeblich soll es eingeschränkt laufen, aber eine Garantie gibt der Autor nicht. Aber auf jeden Fall ist eine vollständige Linux-Unterstützung für die Zukunft geplant.


mimi - So 09.02.03 15:28

tommie-lie hat recht !
Es gibt zahle reiche DirecX komponenten für Delphi z.B.
DelphiX*
unDelphiX**
Omega
....
*
wie bereit gesagt wird leider nicht mehr weiterentwickelt.

**
ist nur ein udatet von DelphiX soviel wie ich weiß ist das ein updatet auf DX8.0(aber sicher bin ich mir da nicht;)


AndreG - So 09.02.03 21:31
Titel: Frage
Ähm, ich weiß das horts sich blöd an aber ich habe keine Ahnung von OpenGL und wollte nur wissen was man brauch um damit zu arbeiten (Also irgendwelche Compiler oder sowas in der art)


mimi - So 09.02.03 21:43

Um openGl mit delphi zu machen, brauchst du garnichts als Delphi,aber das ist sehr aufwendig, daher solltes eine Komponenten samlung nutzen ich werde die später noch den link geben wenn ich ihn finde;)

aber was willst du machen 2D oder 3D ?
für 2D ist DelphiX sehr praktisch und für 3D openGl;)
und alle werden mir zustimmen;)


AndreG - Mo 10.02.03 12:53
Titel: 3D
Auf jeden fall wollte ich 3D Programmieren


Aya - Mo 10.02.03 13:44

Hi,

um mit OpenGL zu arbeiten brauchste lediglich Delphi. Da bindeste oben bei deinen Uses im Form "OpenGL" ein und fertig :)

Kannst loslegen *g*
Für erste schritt empfehl ich dir die Tutorials von http://www.DelphiGL.com

Au'revoir,
Aya


AndreG - Mo 10.02.03 16:01
Titel: Danke
Hey, danke sehr.


mimi - Di 11.02.03 18:13

Aber ich sag es dir gleich:
Es ist sehr (zeit) aufwendig mit der Rohen OpenGl version zu schreiben für den anfang würde ich komponenten nehmen, aber es ist deine entscheidung was einfacher für dich ist.


Aya - Di 11.02.03 18:44

Wieso ist es denn sehr (Zeit) aufwendig??? :roll:


mimi - Di 11.02.03 19:01


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
program OpenGLTest;

uses
  Windows,
  Messages,
  OpenGL,
  Textures,
  Tools in '..\..\..\..\Units\Tools.pas';

const
  ClassName = 'OpenGL WinClass';
  AppName = 'Koshigaya Studios - OpenGL Test';
  WindowWidth = 640;
  WindowHeight = 480;

var
  h_DC: hDC;
  h_RC: HGLRC;
  Rotate:Single;
  Go: Array[0..255] of Boolean;
  Tex: GLUInt;
  MoveLR: Single;

procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;

procedure DrawScene;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glLoadIdentity;

  // glColor3ub(255,255,0); bei glBegin
  //Code here!

//  glTranslate(0,0,-5);

  glScale(30,30,30);
//  glRotate(Rotate,1,0,0);
  glTranslate(0,0,Rotate/100);
  glTranslate(MoveLR,0,Rotate/100);
  glTranslate(0,Rotate/3,0);

  glBindTexture(GL_TEXTURE_2D,Tex);

  glBegin(GL_QUADS);
    glTexCoord2f(5,5);
    glVertex3f(1,1,1);
    glTexCoord2f(5,0);
    glVertex3f(1,-1,1);
    glTexCoord2f(0,0);
    glVertex3f(-1,-1,1);
    glTexCoord2f(0,5);
    glVertex3f(-1,1,1);
  glEnd;

  glBegin(GL_QUADS);
    glTexCoord2f(5,5);
    glVertex3f(-1,-1,1);
    glTexCoord2f(5,0);
    glVertex3f(-1,1,1);
    glTexCoord2f(0,0);
    glVertex3f(-1,1,-1);
    glTexCoord2f(0,5);
    glVertex3f(-1,-1,-1);
  glEnd;

  glBegin(GL_QUADS);
    glTexCoord2f(5,5);
    glVertex3f(1,1,-1);
    glTexCoord2f(5,0);
    glVertex3f(1,-1,-1);
    glTexCoord2f(0,0);
    glVertex3f(-1,-1,-1);
    glTexCoord2f(0,5);
    glVertex3f(-1,1,-1);
  glEnd;

  glBegin(GL_QUADS);
    glTexCoord2f(5,5);
    glVertex3f(1,-1,1);
    glTexCoord2f(5,0);
    glVertex3f(1,1,1);
    glTexCoord2f(0,0);
    glVertex3f(1,1,-1);
    glTexCoord2f(0,5);
    glVertex3f(1,-1,-1);
  glEnd;

  glBegin(GL_QUADS);
    glTexCoord2f(5,5);
    glVertex3f(1,-1,1);
    glTexCoord2f(5,0);
    glVertex3f(-1,-1,1);
    glTexCoord2f(0,0);
    glVertex3f(-1,-1,-1);
    glTexCoord2f(0,5);
    glVertex3f(1,-1,-1);
  glEnd;

  glBegin(GL_QUADS);
    glTexCoord2f(5,5);
    glVertex3f(1,1,1);
    glTexCoord2f(5,0);
    glVertex3f(-1,1,1);
    glTexCoord2f(0,0);
    glVertex3f(-1,1,-1);
    glTexCoord2f(0,5);
    glVertex3f(1,1,-1);
  glEnd;
    
end;

procedure InitGL;
begin
  // hinter grund farhbe besteimmen
  glClearColor(0.5 , 0 , 0 , 0);
  // Tifenbuffer löschen
  glClearDepth(1.0);
  // Bestimmt die Tife funktione
  glDepthFunc(GL_LESS);
  // Tiefen testen abschalten
  glEnable(GL_DEPTH_TEST);
  // Wie sauber er zeichnen soll
  glShadeModel(GL_SMOOTH);
  // wo soll er zeichnen
  glMatrixMode(GL_PROJECTION);
  // Setzt alles zurück z.B  
  glLoadIdentity;
  // Winkel
  gluPerspective(45.0, WindowWidth/WindowHeight,0.1,100.0);
  glMatrixMode(GL_MODELVIEW);

  // Licht einstellungen
  // glEnable(GL_LIGHT0);
  // glEnable(GL_LIGHTING);
  // glEnable(GL_COLOR_MATERIAL);

  glEnable(GL_TEXTURE_2D);
  LoadTexture(GetExeDir + 'Wall.bmp',Tex)
end;

procedure ResizeGL(Width, Height: Integer);
begin
  glViewport(0,0,Width,Height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0,Width/Height,0.1,100.0);
  glMatrixMode(GL_MODELVIEW);
end;

procedure SetDCPixelFormat(Handle: HDC);
var
  nPixelFormat: GLUint;
const
  pfd: PIXELFORMATDESCRIPTOR = (
      nSize: sizeof( PIXELFORMATDESCRIPTOR );
      nVersion: 1;
      dwFlags: PFD_DRAW_TO_WINDOW
      or PFD_SUPPORT_OPENGL
      or PFD_DOUBLEBUFFER;
      iPixelType: PFD_TYPE_RGBA;
      cColorBits: 16;
      cRedBits: 0;
      cRedShift: 0;
      cGreenBits: 0;
      cBlueBits: 0;
      cBlueShift: 0;
      cAlphaBits: 0;
      cAlphaShift: 0;
      cAccumBits: 0;
      cAccumRedBits: 0;
      cAccumGreenBits: 0;
      cAccumBlueBits: 0;
      cAccumAlphaBits: 0;
      cDepthBits: 16;
      cStencilBits: 0;
      cAuxBuffers: 0;
      iLayerType: PFD_MAIN_PLANE;
      bReserved: 0;
      dwLayerMask: 0;
      dwVisibleMask: 0;
      dwDamageMask: 0
  );
begin
  nPixelFormat:=ChoosePixelFormat(h_DC, @pfd);
  SetPixelFormat(h_DC,nPixelFormat,@pfd);
end;

// fenster erstellen
function WndProc(hWnd: HWND; message: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  MouseX,MouseY:Integer;
begin
  Result:=0;
  Case message of
    WM_CREATE: begin
      h_DC:=GetDC(hWnd);
      SetDCPixelFormat(h_DC);
      h_RC:=wglCreateContext(h_DC);
      wglMakeCurrent(h_DC,h_RC);
      InitGL;
    end;

    WM_MOUSEMOVE: begin
      MouseX:=LoWord(lParam);
      MouseY:=HiWord(lParam);
      Rotate:=MouseY / 100;
      if MouseY < 20 then
        SetCursorPos(WindowWidth div 2,WindowHeight div 2)
    end;

    WM_DESTROY, WM_CLOSE: begin
      ChangeDisplaySettings(DEVMODE(nil^), 0);
      wglMakeCurrent(h_DC,0);
      wglDeleteContext(h_RC);
      ReleaseDC(hWnd,h_DC);
      PostQuitMessage(0);
    end;
    WM_KEYDOWN: begin
      Go[wParam]:=true;
    end;
    WM_KEYUP: begin
      Go[wParam]:=false;
    end;
    WM_SIZE: begin
      ResizeGL(LOWORD(lParam),HIWORD(lParam));
    end;
    else begin
      Result:=DefWindowProc(hWnd,message,wParam,lParam);
      exit;
    end;
  end;
end;

var
  wc: TWndClassEx = (
    cbSize          : SizeOf(TWndClassEx);
    Style           : CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc     : @WndProc;
    cbClsExtra      : 0;
    cbWndExtra      : 0;
    hbrBackground   : COLOR_APPWORKSPACE;
    lpszMenuName    : nil;
    lpszClassName   : ClassName;
    hIconSm         : 0;
  );
  msg: TMSG;
  done: Boolean = false;

begin
  wc.hInstance  := hInstance;
  wc.hIcon      := LoadIcon(0,IDI_APPLICATION);
  wc.hCursor    := LoadCursor(0,IDC_ARROW);
  RegisterClassEx(wc);
  CreateWindowEx(0,ClassName,AppName,WS_CAPTION or WS_VISIBLE or WS_SYSMENU or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SIZEBOX,Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),WindowWidth,WindowHeight,0,0,hInstance,nil);
  while not done do begin
    if (PeekMessage(msg,0,0,0,PM_REMOVE)) then begin
      if msg.message=WM_QUIT then begin
        done:=true;
      end else begin
        TranslateMessage(msg);
        DispatchMessage(msg);
      end;
    end;
    //Keys Here!
    if Go[VK_ESCAPE] then
      done:=true;

    if Go[VK_UP] then
      Rotate:=Rotate+3;

    if Go[VK_DOWN] then
      Rotate:=Rotate-3;
      
    if Go[VK_LEFT] then
      MoveLR:=MoveLR+0.03;

    if Go[VK_RIGHT] then
      MoveLR:=MoveLR-0.03;

    DrawScene;
    SwapBuffers(h_DC);
  end;
end.

für einen einfachen 3D Würfel.
Sowas währe in der komponenten samlung die ich meine garnicht nögtig;)
naja egal. Wir müssen jetzt nicht darüber Streiten.


Aya - Di 11.02.03 19:04

Nich streiten, will aber noch das gegenargument sagen :)

1.) ist das da WinAPI... = sieht automatisch viel aus *g*

2.) Den ganzen WinAPI kram kann man sich schon sparen wenn man VCL nutzt.

3.) Nen wüfel... den macht man ein einziges mal zum spielen üben, aber dann nie wieder.. und wenn doch macht man sich ne Unit "CreateWürfel" oder so... *g* oder kennst du nen 3D Spiel wo alles Würfel sind? ;)

4.) Das einzige was man bei deinem Code-Beispiel ändert ist das im DrawScene... alles andere wird sich fast nie ändern :)

Au'revoir,
Aya~


mimi - Mi 12.02.03 19:54

das war noch dein Code: Aya den du mit mir als tutor "Gemacht hast" ;)
naja gut du hast recht mit WinApi sieht alles viel aus, aber es ist halt immer noch aufwendiger als mit einer Komponenten wo du zum anzeigen eines 3D würfel kein code schreiben musst ;)
aber egal...


AndreG - Do 13.02.03 16:48
Titel: Hmm
Das mit der Komponentnesammelung ist ja gut und schön, aber wo finde ich die? (Und was nocht gut wäre ein Tut für eien absoluten OpenGL Beginner)

Danke im Vorraus


mimi - Do 13.02.03 17:04

Bitte !
http://glscene.org
es sind demos dabei.
Aber es gibt KEINE DEUTENSCH TUTORS ODER DOKU*

* Gibt es überhaupt nicht.


Aya - Do 13.02.03 17:12

Hi,

na ja... auf [url]http://www.DelphiGL.com[/url] ist nen Tutorial zu GLScene geplant... (und die seite ist ja Deutsch)

Aber dauert nochnen weilchen.

Au'revoir,
Aya

PS: Mit GLScene wirdst du irgendwann an deine grenzen Stoßen, irgendwo geht es damit dann einfach nichtmehr weiter.. und wenn du dann mit richtigem OpenGL anfängst biste wieder fast bei 0... :)
Deswegen würd ich dir nach wie vor empfehlen gleich mit richtigem OpenGL zu beginnen, und auf DelphoGL.com gibt es doch Tutorials für absolute einsteiger


mimi - Do 13.02.03 17:25

ich bin deiner meinung "Aya".

Aber gerade für anfäger ist pur openGl richtig schwer.
Und auch wegen mahte und soweiter.
Hast ja bei mir gesehen was ich für problme habe und ich bin nicht der einzigetes;)oder ?


Aya - Do 13.02.03 17:30

Hi,

Ich hab KA.. :)
Ich hab OpenGL innerhalb in kürzester Zeit gelernt.. (gut, mir sagen viele ich hab Begabung für sowas... weil ich bisher jede Programmiersprache innerhalb kürzester Zeit richtig gut gelernt habe).

und ich finde, probieren kann er's doch... wenn er mit direktem OpenGL nich klarkommt bleibt immernoch der Ausweg zu GLScene... :)

Au'revoir,
Aya


mimi - So 16.02.03 14:15

Stimmmt, hast recht,
ich kommen mit den Puren OpenGl einfach nicht klar ;)