Autor Beitrag
Jetro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 27



BeitragVerfasst: So 09.03.03 17:16 
Hallo, ich interessiere mich für die Spiele- /Grafikprogrammierung mit DirectX bzw. OpenGL. DelphiX lass ich da jetzt mal raus, da ich schon sehr oft gelesen habe, das es zwar am Anfang Erfolge gibt, man dann aber schnell an Grenzen stößt. Da es aber wie es aussieht im Internet nur grundlegende Tutorials gibt (vor allem zu OGL, zu DirectX direkt habe ich noch nix gefunden), frage ich mal hier.

Was ist besser zum anfangen? OGL oder DX? (Habe gelesen, das OGL am Anfang einfacher zu erlernen ist, DX aber dann im Endeffekt die günstigere Wahl ist)
Wie fange ich an? Gibt es lesenswerte Bücher über diese Themen (auch Englisch)? Oder kennt jemand gute Websites mit Informationen oder guten Tutorials?

[EDIT]
Also hauptsächlich interessieren mich erstmal die Fragen: Wie erstelle ich Objekte mit OGL oder DX, wie kann ich diese (oder die Kamera drumrum) bewegen. Wie binde ich Grafiken/Texturen ein. Wie realisiert man Kollisionsabfragen etc.
Am besten dafür ware natürlich ein Beispielprojekt mit Erklärungen oder kommentierter SourceCode.
[/Edit]

Ja, das wären für's erste meine Fragen :) und ich würde mich über Antworten freuen :)

Ciao :)
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 09.03.03 19:09 
also erst mal stimmt es nicht, dass mit directx mehr möglich ist als mit OGL... siehe dazu Doom 3 ;)

wenn du gute Tuts zu OGL von Anfang an suchst dann geh mal auf

[url]www.delphigl.com[/url](deutsch,sehr gut, mit Forum)
[url]nehe.gamedev.net[/url](englisch, umfangreicher,nicht nur auf Delphi ausgelegt...)

Wenn man sich bei OGL etwas reinhängt, dann gibts da auch schnell Erfolge ;)
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: So 09.03.03 19:45 
Also ich bevorzuge persönlich auch eher OpenGL - da brauch man sich nicht um GUIDs und alles so'n Dreck zu kümmern. DirectX is mir zu schwammig - ich kenne DirectX-Programmierung, da gab's noch Execute-Buffers - man kann zwar froh sein, dass es sie nich mehr gibt, aber D3D kann ich trotzdem (als Programmierer UND Spieler) immer noch nicht leiden...

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: So 09.03.03 22:05 
Zitat:
also erst mal stimmt es nicht, dass mit directx mehr möglich ist als mit OGL...
siehe dazu Doom 3

Mit Standard-OpenGL (ohne Extensions) ist Doom 3 sicherlich nicht lauffähig. Davon abgesehen ist weder die HLSL noch die neuere Shaderversion im Standard enthalten. Und ehrlich gesagt, Unreal II sieht genauso aus wie Doom 3 ist aber Direct3D ;c)
(tut mir leid, musste mich als D3D-Verfechter mal zu Wort melden, jetzt aber etwas sachlicher:)

Der wesentliche Unterschied zwischen OpenGL und Direct3D ist, dass ersteres prozedural, letzteres objektorientiert ist, und dass in Direct3D viele Dinge vereinfacht sind, wenn man eine objektorientierte Programmiersprache verwendet (z.B. Matrizen, Vektoren), aber auch sonst (Texturen, Meshes, Effect Files, Textausgabe (2D & 3D) etc.).
Dass OpenGL einfacher zu erlernen ist ist Quatsch, das war zu Zeiten von Direct3D 7 so. Man muss am Anfang in D3D nur ein klein wenig mehr Code schreiben, dank des Komforts sowie D3DX rentiert sich das aber schon, wenn man etwas machen will, was über das Rendern eines Würfels hinausgeht.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: So 09.03.03 22:09 
OregonGhost hat folgendes geschrieben:
Zitat:
also erst mal stimmt es nicht, dass mit directx mehr möglich ist als mit OGL...
siehe dazu Doom 3

Mit Standard-OpenGL (ohne Extensions) ist Doom 3 sicherlich nicht lauffähig. Davon abgesehen ist weder die HLSL noch die neuere Shaderversion im Standard enthalten. Und ehrlich gesagt, Unreal II sieht genauso aus wie Doom 3 ist aber Direct3D ;c)
(tut mir leid, musste mich als D3D-Verfechter mal zu Wort melden, jetzt aber etwas sachlicher:)

Mit Standard OpenGL, sicherlich... ja... :)
Aber dann nimm bitte als gegensatz dazu auch Standardt DX, und da währen wir bei Version 1.0, welche du wohl nich wirklich verfechten willst, oder? *grinst fies*

Aber ich würde auch OpenGL empfehlen... Ist aber wohl sowieso fast egal, im endeffekt bekommt man denk ich mal mit beidem alles gleich hin.. *g*

Aber der absolute Vorteil von OGL ist einfach, das es System unabhängig ist. Wohingegen was mit DX gemachtest nur unter Windows läuft ;)

Au'revoir,
Aya

_________________
Aya
I aim for my endless dreams and I know they will come true!
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 09.03.03 22:15 
Ich habe auch nicht behauptet, dass OpenGL besser wäre...
Ich meinte lediglich, dass man mit OpenGL auch alles machen kann, was man auch mit DirectX machen kann...
manches sicherlich umständlicher, aber manches auch einfacher...

ich kenne DirectX nicht wirklich (wie man da programmiert), aber bei OpenGL ist das mit den MAtrizen und Vektoren auch nicht sonderlich schwer...

Und wer schon Delphi proggt der sollte dann auch noch bei dieser Wahl OpenGL nehmen, da DirectX doch immer noch von Microsoft forciert wird usw.

OpenGL kann allerdings immer mithalten, obwohl es in Computerzeitalter schon UrAlt ist, während DirectX alle 2 Wochen (;)) eine neue Version braucht, die dem "Uralten" OpenGL aber trotzdem nicht überlegen ist...

Und bald kommt OpenGL 2 und dann ist die Entscheidung ja wohl eh klar *ggg*
Jetro Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 27



BeitragVerfasst: So 09.03.03 22:39 
Na dann, erstmal anke an alle Schreiberlinge :) Ich werde mich mal noch weiter umhören und gucken ob ich vielleicht ein Buch oder so finde :)

Ciao
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: So 09.03.03 23:54 
@Aya: Standard = ohne Extensions, also Direct3D 9.0 (inkl. D3DX) vs. OpenGL 1.4 (inkl. GLU)

Übrigens zweifeln selbst einige ARB-Mitglieder, ob OpenGL 2.0 Direct3D 8 (!) übertreffen kann, von Direct3D 9 zu schweigen, aber das nur nebenbei. Im Allgemeinen kann man natürlich mit beiden APIs fast alles machen, aber den Technologietrend gibt im Moment klar Direct3D an. Den Geschmack der meisten Programmierer auch.

Was ich mit Matrizen meinte, ist, dass man unter OpenGL immer 16 floats bekommt, die die Matrix definieren und man Funktionen zu deren Multiplikation etc. aufrufen muss, während man unter Direct3D eine D3DXMATRIX bekommt, die man zum Beispiel direkt multiplizieren kann, dasselbe gilt für Vektoren. Folgendes Beispiel zeigt das ganz gut, in D3D kann man wie mit floats zum Beispiel rechnen:
ausblenden Quelltext
1:
2:
3:
D3DXMATRIX Translationsmatrix, RotationsmatrixX, RotationsmatrixY, RotationsmatrixZ, Skalierungsmatrix;
D3DXMATRIX Ansichtsmatrix = Translationsmatrix * RotationsmatrixX * RotationsmatrixY * RotationsmatrixZ * Skalierungsmatrix;
pDevice->SetTransform(D3DTS_VIEW, &Ansichtsmatrix);

In OpenGL muss man hingegen eine Funktionskolonne hinschreiben, gerade wegen der man eigentlich auf objektorientierte Programmierung umgestiegen ist:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
float Translationsmatrix[16], RotationsmatrixX[16], RotationsmatrixY[16], RotationsmatrixZ[16], Skalierungsmatrix[16];
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(Translationsmatrix);
glMultMatrixf(RotationsmatrixX);
glMultMatrixf(RotationsmatrixY);
glMultMatrixf(RotationsmatrixZ);
glMultMatrixf(Skalierungsmatrix);

Macht mehr als doppelt so viele Zeilen für OpenGL.

Selbst das ist natürlich Geschmackssache. Doom 3 wird nur in OpenGL geschrieben, weil John Carmack Direct3D nicht mag. Aber er mag auch objektorientierte Programmierung nicht so gerne. Dafür sind die id-Engines auch so ziemlich die einzigen kommerziell erfolgreichen OpenGL-Produkte (in diesem Punkt bitte ich um Verbesserung, also um weitere kommerziell erfolgreiche OpenGL-Produkte, weil ich kenne keine (c; ).

Was ich mit meinem Posting sagen wollte, ist, dass man sich nicht von vornerein auf eine API festlegen sollte, weil alle sagen, die ist leichter, vor allem solche, die die andere überhaupt nicht ausprobiert haben. Man sollte sich einfach ein paar Quellcodes zu beiden APIs anschauen (gamedev.net) und selbst urteilen, am besten die Grundlagen von beiden erlernen. Umsteigen ist sowieso problemlos möglich (man kann auch prima mit OpenGL anfangen und auf Direct3D umsteigen und umgekehrt), weil die beiden APIs nahezu dieselbe Funktionalität auf ähnliche Weise, nur mit unterschiedlichen Paradigmen zur Verfügung stellen. Zum Beispiel legt man in OpenGL viele Einstellungen mit Extrafunktionen fest (glEnable, glStencilFunc, glAlphaFunc etc.), während man in Direct3D eigentlich immer IDirect3DDevice9::SetRenderState oder ähnliches aufruft, aber mit einem entsprechenden Parameter (D3DRS_STENCILFUNC, D3DRS_ALPHAFUNC etc.), womit der Quellcode sich sogar ähnlich liest.
Viel einfacher ist für Einsteiger sowieso keine der APIs, aber wer zum Beispiel die Routinen zum Texturladen selber schreibt und das einfacher findet als D3DXCreateTextureFromFile aufzurufen, der weiß wohl was er tut ;c)

Ach ja, eins noch zur Systemunabhängigkeit von OpenGL: Hier hat Microsoft ein wenig gepfuscht, denn ohne Extrabibliotheken wie GLUT oder QT ist ein Windows-Open-GL-Programm nicht auf anderen Betriebssystemen lauffähig, da allein schon die Initialisierung einen HDC erfordert. Das ist dasselbe wie mit Standard-Windows-Anwendungen, denn auch diese kann man nicht ohne weiteres unter anderen Betriebssystemen verwenden.



Aber eigentlich ging die Frage ja um Tutoriale etc.
gamedev.net, Gamasutra.com und flipcode.com sind die Standardanlaufstellen für OpenGL, Direct3D und auch alles andere bezüglich Spieleentwicklung (nicht nur -programmierung).

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 10.03.03 00:07 
OregonGhost hat folgendes geschrieben:
In OpenGL muss man hingegen eine Funktionskolonne hinschreiben, gerade wegen der man eigentlich auf objektorientierte Programmierung umgestiegen ist

Na ja, genau für solche sachen schreib ich mir in der Regel einfach eigene Funktionn :)

Aber stimmt schon, jeder wird was anderes sagen, denn die einen sind OGL Fanatiker, die anderen D3D'ler... *g*

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Mo 10.03.03 00:23 
Aya hat folgendes geschrieben:
Aber stimmt schon, jeder wird was anderes sagen, denn die einen sind OGL Fanatiker, die anderen D3D'ler... *g*

Eben, eben. Und eben darum sollte man Neulinge ja auch sich ihre eigene Meinung bilden lassen - übrigens ist mir aufgefallen, dass die meisten Delphianer mit OpenGL programmieren, die meisten C++ler hingegen mit Direct3D - vielleicht dieselbe Glaubensfrage wie Delphi gegen C++, auch wenn dieser Vergleich ebenso hinkt, wie wenn man OpenGL mit DirectX (und nicht mit Direct3D) vergleicht ;c)

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 10.03.03 00:26 
Eine sache is mir noch eingefallen, nämlich ein sehr entscheidender und sehr großer vorteil von D3D.. :)

Es gibt massenhaft Dokus, Referenzen, Beispiele etc du D3D... bei OGL zwar auch viel, aber beiweitem nicht soviel wie für D3D.. :)

Nen bekannter von mir, der an nem ziemlich bekannten Spiel mitgeprogt hat, meinte als ich fragte warum es in C++/D3D geproggt wurde, das es einfach leichter sei dort infos und referenzen zu finden.. :)

Au'revoir,
Aya

_________________
Aya
I aim for my endless dreams and I know they will come true!
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mo 10.03.03 01:35 
Um den ganzen spass noch zu kompletieren, verweise ich für DX auf...

www.minfos.de -> tuts
www.neobrothers.de -> forum

...viel spass bei der entscheidung.
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Mo 10.03.03 11:50 
Aya hat folgendes geschrieben:

Es gibt massenhaft Dokus, Referenzen, Beispiele etc du D3D... bei OGL zwar auch viel, aber beiweitem nicht soviel wie für D3D..

Tja, und auch wenn Microsoft manchmal Dinge (wie zum Beispiel OS-Interna (c; ) nicht dokumentiert, das ist einer der Gründe, weshalb ich nicht mehr zum Kreis der Microsoft-Hasser gehöre wie früher und Visual Studio verwende ;c)
OpenGL ist wie viele typische Multiplattform-Bibliotheken aus der *nix-Szene wie QT, SDL und Co - an sich leistungsfähig, weil von fähigen Programmierern entwickelt, aber eine umfangreiche Dokumentation wie das DirectX SDK mag keiner von denen schreiben ;c)
Dass es unabhängig davon noch sehr viele Dokumentationen, Tutorials etc. gibt, liegt wahrscheinlich daran, dass es VC++-Benutzern (und das sind nunmal die meisten Programmierer) sehr einfach gemacht wird, DirectX zu verwenden, im Gegensatz zu Delphi (schätzungsweise weil es Borland vor allem um das A in RAD geht).

Ich frage mich, warum fragen eigentlich oftmals Neulinge, ob sie C++ oder Delphi nehmen sollen, ziehen dabei aber Java gar nicht in Betracht, obwohl Java doch von so vielen Leuten als tolle Sprache gelobt wird, die auch für High-Performance-Anwendungen wie Spiele geeignet sei (was meiner Meinung nach übrigens nicht stimmt, weil die wenigen Vorteile von Java in der Spieleprogrammierung kaum greifen und nur Performance kosten)... Auf der anderen Seite haben aber viele Neulinge das Vorurteil, C++ sei schrecklich kompliziert... Naja, wie dem auch sei, bin mal gespannt, wofür Jetro sich entscheidet - übrigens noch ein Buchtipp:

"Computerspiele - Design und Programmierung" von Peter Dobrovka u.a., mitp-Verlag, 38€
Da steht quasi ALLES zur Spieleentwicklung drin, inklusive einem großen Kapitel zur Programmierung, sowie Extrakapitel, in denen OpenGL und Direct3D erklärt werden. Da kann man sie auch sehr gut vergleichen, weil in beiden Fällen nach der Funktionalität und nicht nach den Eigenarten der API sortiert wurde.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Phobeus
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1280

Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
BeitragVerfasst: Di 11.03.03 16:33 
Also... nun muss ich mich als radikaler OpenGLer nochmal einhacken. Was das Beispiel mit dem Code für die Rotation angeht, muss ich sagen, dass es der total falsche Weg ist, daher ist dein OpenGL-Code auch länger. Du brauchst nicht überall irgendwelche Matrizen in OGL erzeugen und Multiplizieren (Du kannst es), aber ein

glLoadIdentity,
# Cam
glTranslatef(0,5,0);
glRotatef(90,0,1,0);

schafft es um ein Objekt zu positionieren und zu rotieren ohne eine einzige Variable oder ewig lange Multiplikationen zu verwenden. Würden wir dann noch den gesamten Code und das Init vergleichen, wäre der DX-Code locker doppelt so lang. Was Hilfsfunktionen angeht, wird jede fähige Programmier sich schnell selbst etwas dafür zu schreiben, anstatt stundenlang in der SDK nach Hilfe zu suchen.

Ich selbst habe über drei Jahre DirectX und davon ca. 1 Jahr Direct3D eingesetzt und weiß, wovon ich rede. Das Wirrwarr ist so groß, dass man nur erahnen kann, wofür was ist und ohne SDK aufgeschmissen ist. Mal eben schnell etwas aus dem Hemd schüttel ist nicht leicht in Direct3D, auch wenn es sicherlich mehr Funktionen gibt und für Objektorientierte Programmierer einleuchtender ist (was ca. 1 % der Progger ausmachen würde... ist hart, aber die Wahrheit).

Das es keine SDK gäbe für OpenGL ist ne böses Gerücht... sowohl Blue- als auch Redbook sollten einen mehr als soldiden Start bieten. Ja, es handelt sich dabei um Texte und keine kurzen Beschreibungen (dafür gibt es z.b. die PSDK-Doku Abschnitt OpenGL). Mehr ist OpenGL nicht und damit bereits genauso Leistungsfähig wie Direct3D ... und wer wert auf Shader legt, der sollte erstmal die Grund-API lernen und da ist OpenGL IMAO leichter, weil ein dynamisches Array und der VertexBuffer so manchen Progger bereits das Genick gebrochen hat, dann lieber ne Array nehmen und einfach an eine Funktion übergeben.

Auch das es mehr Src für Direct3D geht kann ich nicht bestätigen. Gerade im Delphi-Bereich leider Mangelware, während OpenGL von vielen Seiten unterstützt wird.

Letztendlich ist es eine Geschmacksfrage, die jeder für sich selbst treffen sollte. Wie immer gilt, nicht die CPU, nicht der RAM, nicht die Grafikkarte, nicht der Compiler, sondern die Leistung des Proggers ist entscheiden.

Just my six cents
Jetro Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 27



BeitragVerfasst: Di 11.03.03 16:58 
Heho, bloss nochmal zur Info an alle Schreiberlinge [DANKE!]. Ich werde mir jetzt zu BEIDEN Sachen mal ein paar Tuts ausprobieren etc. und DANACH entscheiden was ich dann erstmal vertiefen will :)

Mal gucken :)

Ciao :)

Achja: Weitere URLs wären sehr schön :)
TheBlackRave
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Di 11.03.03 16:59 
Also ich sag jetzt nichts genau zu den Fragen usw.!
Aber ich selber kann nur empfehlen C++/DirectX zu benutzen.
Delphi ist für DirectX/OpenGl noch nicht reif genug.
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Di 11.03.03 21:39 
TheBlackRave hat folgendes geschrieben:
Delphi ist für DirectX/OpenGl noch nicht reif genug.

WO hast du denn das schon wieder her??? :evil:
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Di 11.03.03 23:26 
@TheBlackRave
wüsste ich auch gerne mal.
also mit delph kannst du sowol prima mit DX als auch mit OpenGl arbeiten, ich weiß nicht womit besser(warscheinlich gleichgut....)

_________________
MFG
Michael Springwald, "kann kein englisch...."
Phobeus
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1280

Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
BeitragVerfasst: Mi 12.03.03 10:18 
@TheBlackRave: Der einzige der nicht reif ist, bist Du... :lol: ansonsten würdest Du solche Statements einfach lassen. Nutze Delphi seit Jahren und habe keinerlei Probleme damit... könntest Du deinen Standpunkte bitte ein wenig detaillierter Erötern, bin sehr gespannt auf eine gute Argumentation, vielleicht überzeugst mich ja von deiner Meinung :twisted:

@Jetro: Für OpenGL gehe mal auf unsere Seite druff und dann unter Links, dass sollte genug Stoff bieten für die nächsten Jahre :wink:
Blasterboy
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 12.03.03 10:27 
Es sind zwar die meisten Spiele in C mit Direct X und/oder OpenGl geschrieben JEDOCH heißt das nicht das Delphi das nicht kann! Das komm meist davon, dass die Spieleentwickler meist C und Direct X gelernt haben, und noch nichts (bzw. kaum) von Delphi und OpenGL programmierung wussten, da (glaube ich) die Direct X und OpenGL portirung nach Delphi erst vor einiger Zeit geschehen ist. OpenGL und Direct X sind beides gut programmierbare Grafikschnittstellen welche für Delphi UND C gleichgut zurecht gefertigt wurden. (Aber ich persönlich neig doch n bissl mehr zu OpenGL :roll: )

Cu
Blaster