Entwickler-Ecke

Multimedia / Grafik - Was geeignet für was?


Pdd - Mo 19.09.05 20:16
Titel: Was geeignet für was?
Hi @ all

Ich hätte mal ne frage und hab auch schon gesucht aber keine antwort bekommen!
Ich kenne mich nicht aus mit Spiele Programmierung! Daher wollte ich mal langsam anfangen damit. Ich dachte mir zuerst mal mit 2D anfangen! Da 3d sicher um einiges schwierieger ist! Also was ist denn jetzt für 2d geeignet? Delphi X oder OpenGL?

Und kann mir dann noch jemand dazu tutorials geben wo klein angefangen wird? danke!


Pdd


Gothicware - Di 20.09.05 03:32

Im Grunde kannst du beides benutzen. Abwohl ich DelphiX etwas vorziehe. OpenGL ist dafür sehr leistungs fähig, und biete viele Möglichkeiten.

Tutorials:
http://www.delphi-treff.de/content/tutorials/delphixkurs/
http://www.dsdt.info/tutorials/index.php?cat=5

Ansonsten einfach mal im Netz suchen. Bei denn meisten OpenGL Packeten für Delphi sind auch einfache Beispiele dabei. Bei DelphiX mehrere Beipiele, wie AlphaBlend, Wave, und so weiter.


Heiko - Di 20.09.05 06:25

Für OpenGl sind die Tutorials hier [http://www.delphigl.com/] geeignet. Wenn du bisschen weiter bist die hier [http://www.delphigl.de/]. Ich finde aber 3D ist leichtr als 2D, ist aber sicherlich Geschmackssache ;), das einzige ist, das man ein gutes räumliches Vortsellungvermögen braucht.

Moderiert von user profile iconKlabautermann: URL-Tag korrigiert.


Lossy eX - Di 20.09.05 12:54

Also wenn du mit 2D anfangen und später mit 3D weiter machen möchtest, dann rate ich dir dringenst zu OpenGL. Denn dann hast du den Vorteil, dass du deinen geschriebenen Code, deine Bibliotheken und dein Wissen weiter verwenden kannst. Der Unterschied zwischen 2D und 3D bei OpenGL ist lediglich die eine Zeile in der du das festlegst. Alles andere ist gleich.

2D in OpenGL ist so einfach wie unter Windows. Zu mindest wenn man es so eingestellt hat. Es gibt divere Leute die der Meinung sind die Koordinaten müssten alle auf dem Kopf stehen aber ich glaube ich schweife ab.

Ich rate dir im übrigen von Kappselungen von Grafikschnittstellen ab. Also wie glScene oder DelphiX. Da diese lediglich auf auf eine Grafikschnittstelle aufsetzen. Auf den ersten Blick mögen sie deine Arbeit zwar erleichtern, doch wenn es hart auf hart kommt, geraten sie recht schnell an ihre Grenzen, da diese Sammlungen allgemeingültig entwickelt wurden und spezialfälle nicht oder nur kaum optimieren können. Aber das ist wie üblich reine Geschmackssache.


Pdd - Di 20.09.05 14:16

danke ich schaue mir das mal an und ich denke ich fange mit opengl an da ich auch gesehen habe das delphix nicht weitrer entwickelt wurde. (stimmt doch oder?)

Pdd


Pdd - Di 20.09.05 14:45

ok hab mir das erste tut mal angekukt aber da fängt man dann gleich an aber ich brauch doch erst mal den code um das opengl zu nutzen! Unter FILES bekommt man so einiges aber was muss ich denn nehmen und wie es installieren??? http://www.delphigl.com/files.php


GTA-Place - Di 20.09.05 16:48

Benutze anstatt DelphiX -> UnDelphiX.
Das wird IMHO noch weiter entwickelt.


Heiko - Di 20.09.05 17:03

user profile iconPdd hat folgendes geschrieben:
ok hab mir das erste tut mal angekukt aber da fängt man dann gleich an aber ich brauch doch erst mal den code um das opengl zu nutzen! Unter FILES bekommt man so einiges aber was muss ich denn nehmen und wie es installieren??? http://www.delphigl.com/files.php


Installieren musst du es gar nicht. Du musst nur die Unit (z.B. dglOpenGl.pas) bei dir einbinden und dann das programm wie gewohnt schreiben. Den Download findes6t du hier [http://www.delphigl.com/download.php?cat=5]. (von deinem Link nur auf Libary gelickt ;) ).


Pdd - Di 20.09.05 20:01

Hey leute erst mal danke für die hilfe und ich hab auch gleich mal angefangen ;-)

Also:

Delphi-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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dglopengl, StdCtrls, textures;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyTex : glUInt;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
mytex := LoadTexture('C:\explosion.tga');
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, MyTex);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1);
glBegin(GL_QUADS);
 glTexCoord2f(0,0); glVertex3f(-12/2, -12/2, -12);
 glTexCoord2f(1,0); glVertex3f(+12/2, -12/2, -12);
 glTexCoord2f(1,1); glVertex3f(+12/2, +12/2, -12);
 glTexCoord2f(0,1); glVertex3f(-12/2, +12/2, -12);
glEnd;
end;

end.

doch wen ich es starte dann bleibt es bei dem buttonklick stehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Thread Start: Thread ID: 3240. Process Project1.exe (552)
Process Start: C:\Dokumente und Einstellungen\Pdd_2\Eigene Dateien\OpenGL\1. Projekt\Project1.exe. Base Address: $00400000. Process Project1.exe (552)
Module Load: Project1.exe. Has Debug Info. Base Address: $00400000. Process Project1.exe (552)
Module Load: ntdll.dll. No Debug Info. Base Address: $77F40000. Process Project1.exe (552)
Module Load: KERNEL32.dll. No Debug Info. Base Address: $77E40000. Process Project1.exe (552)
Module Load: USER32.dll. No Debug Info. Base Address: $77D10000. Process Project1.exe (552)
Module Load: GDI32.dll. No Debug Info. Base Address: $77C40000. Process Project1.exe (552)
Module Load: ADVAPI32.dll. No Debug Info. Base Address: $77DA0000. Process Project1.exe (552)
Module Load: RPCRT4.dll. No Debug Info. Base Address: $78000000. Process Project1.exe (552)
Module Load: OLEAUT32.dll. No Debug Info. Base Address: $770F0000. Process Project1.exe (552)
Module Load: msvcrt.dll. No Debug Info. Base Address: $77BE0000. Process Project1.exe (552)
Module Load: ole32.dll. No Debug Info. Base Address: $77180000. Process Project1.exe (552)
Module Load: VERSION.dll. No Debug Info. Base Address: $77BD0000. Process Project1.exe (552)
Module Load: COMCTL32.dll. No Debug Info. Base Address: $77310000. Process Project1.exe (552)
Module Load: UxTheme.dll. No Debug Info. Base Address: $5B0F0000. Process Project1.exe (552)
Module Load: MSCTF.dll. No Debug Info. Base Address: $746A0000. Process Project1.exe (552)
First chance exception at $77E53887. Exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'. Process Project1.exe (552)


hä? ich hab doch alles richtiggemacht?


GTA-Place - Di 20.09.05 20:04

Ich würd mal sagen, du musst mytext erstmal createn.


Pdd - Di 20.09.05 20:12

wie createn? das mach ich doch? oder was meinst du?

ach und was ist das?
 glTexCoord2f(0,0); glVertex3f(-breite/2, -Höhe/2, -Tiefe); as muss ich da als breite höhe und tiefe angeben?


GTA-Place - Di 20.09.05 20:14


Delphi-Quelltext
1:
MyTex := glUInt.Create;                    

Das mein ich.


Pdd - Di 20.09.05 20:19

:cry:
'Integer' does not contain a member named 'create'.


Lossy eX - Di 20.09.05 21:06

Stop! Ganz großer Denkfehler. Ein Integer kannst du nicht createn. Aber um die Methoden. glEnable, glBindTexture etc. überhaupt benutzen zu können musst du als aller erstes OpenGl Initialisieren.

Dazu auf jeden Fall erst einmal das DGL OpenGL Quickstart Tutorial [http://wiki.delphigl.com/index.php/Tutorial_quickstart] durcharbeiten.

Außerdem ist ein ButtonOnClick die schlechteste Möglichkeit etwas zu rendern. Im Tutorial wird das Application.OnIdle verwendet. Man kann aber auch in einem Form.OnPaint rendern. Aber OnIdle ist für einen Großteil der Spiele eigentlich optimal.


GTA-Place - Di 20.09.05 21:08

Mh... Wusste nicht, das das ein Integer ist.
Hätte man draufkommen können, aber egal.


Pdd - Di 20.09.05 21:18

Also Leute erst mal DICKES Dankeschön!

Ich arbeite noch nicht beonders lange mit delphi und ich habe mir jetzt das tutorial durchgelesen und ich muss wirklich sagen: SUPER!!!! Das macht voll spass! Ich danke euch für die tipps!


PS: ICh habe schon mein erstes rotes dreieck erzeugt! *stolz* ;-)


Heiko - Mi 21.09.05 06:44

Du scheinst es ja schon mit Texturen versucht zu haben. Welche Unit nimmst du da? Die glBitmap.pas oder die Texturen.pas?


Pdd - Mi 21.09.05 13:11

ne noch nich mit textueren aber wenn ich das mache nehm ich die textures.pas


Heiko - Mi 21.09.05 13:16

Das hatte ich schon vermutet. Texturen.pas ist ein bisschen bekannter als die BitmapGl.pas. Aber die glBitmap.pas ist der Nachfolger von der Texturen.pas. Wenn du zu der Unit eine Frage hast ist es am besten du wendest dich an Lossy eX, da er einer der Schreiber der Unit ist ;).


Lossy eX - Mi 21.09.05 13:42

Heiko. Ich muss dich mal ein bisschen berichtigen.

Zitat:
die glBitmap.pas ist der Nachfolger von der Texturen.pas

Die Textures.pas und die glBitmap.pas haben nichts, außer Delphi und OpenGL, gemeinsam. Also kein Nachfolger sondern etwas vollkommen Eigenständiges. Und ich habe sie lediglich geschrieben, weil ich gerne objekt orientiert programmiere und die glBMP.pas (auch etwas Eigenständiges benutzt aber viele Codestücke der Textures.pas) nicht mehr weiter entwickelt wird und die Seite nicht mehr existiert. Die Textures wird im übrigen auch nicht mehr weiter entwickelt. Abgesehen davon ist das Klassenkonzept der glBMP, wenn man es überhaupt so nennen darf, so etwas von behämmert ist.

Zitat:
Lossy eX, da er einer der Schreiber der Unit ist

Nicht einer sondern der Schreiber. Alles zu 100% aus meiner Feder. Ich bin einer der Schreiber der dglOpenGL.pas. Also des OpenGL Headers für Delphi. ;-)


Heiko - Mi 21.09.05 16:19

:oops: Uups da hatte ich wohln was verwechselt ;). Aber irgendwo sah es so aus, als ob glBitmap der nachfolger von der texturen.pas ist. ka wo ;)


Lossy eX - Mi 21.09.05 16:23

Vielleicht weil ich zwecks Umstiegshilfe auch eine Methode LoadTexture eingebaut habe. Die hat natürlich auch ziemlich genau die selben Parameter wie die aus der Textures. ;-)