3D .... wo fängt man an?

Thomasio

Erfahrenes Mitglied
Nachdem ich mit "normalen" Windows Anwendungen halbwegs klar komme, will ich mich mal gaaaaanz langsam an 3D rantasten.
Google spuckt zig1000 Treffer aus, die alle spätestens auf Seite 2 mit MB-weise Code daher kommen, dass mir schwindelig wird.
Wenn ich dann in irgendwelchen Foren lese, finden sich 1000 Anfänger, die nach dem Einstieg in 3D fragen, wobei zu 99% die Antworten sich in Expertenstreits verlaufen, ob Direct3D, DirectX oder OpenGL besser ist.
Darüber hinaus basieren die allermeisten Tutorials entweder auf VisualC++ oder Borland, und fast immer steht dabei, dass die kostenlose Version von VisualC++ für diese Zwecke nicht reicht, gefolgt von mehr Streitereien darum, ob es sich denn lohnt M$ so viel Geld in den Rachen zu werfen, inkl. dem Rat doch lieber auf Linux zu coden.
Selbst die Programmiersprache ist dabei heftig umstritten, auch wenn der Fragesteller ganz deutlich nach C++ fragt, kommen fast immer Kommentare, dass C# oder .NET besser wäre.
In ein paar Fällen meldet sich dann der Fragesteller nochmal ganz kleinlaut zu Wort und wiederholt total frustriert seine Frage nach "Einstieg in 3D", aber spätestens wenn er dazu sagt, dass er ja eigentlich Windows Anwendungen schreiben will, aber nicht vor hat einen Haufen Geld zu bezahlen bevor er überhaupt weiss worum es geht, findet sich keine Hilfe mehr, höchstens noch mehr Expertenstreit ob nun DirectX9 oder 10.

Für den Anfang brauche ich etwas viel Grundlegenderes, ein Tutorial, was mir erstmal sagt, wie man überhaupt eine 3D Grafik erstellt, welcher Dateityp das sein muss, welches Grafikprogramm dafür geeignet ist, und mir dann erklärt, wie ich meinen "normalen" 2D case WM_PAINT ... LoadBitmap() .... usw. zu einer 3D Grafik machen kann.

Wenn möglich das Ganze für Doofe und ohne dass oben drüber steht, man muss sich eine Vollversion von VisualStudio oder Borland kaufen.
MinGW/GCC++ wäre mir am liebsten.

Kann mir jemand ein paar Adressen geben, wo man den Einstieg findet?
 
Hm.. Also ich würde mir hier mal eine 3D-Engine ansehen, z. B. Irrlicht. Hier ein Tutorial für den absoluten Einstieg: http://irrlicht.sourceforge.net/docu/example001.html
Was wird erwartet? Kenntnisse in der Programmiersprache C++

Das ganze ist wirklich erstmal völlig minimal, man kann mit der Engine aber auch sehr komplexe 3D-Spiele realisieren und das sogar plattformübergreifend ;)

Bei Fragen helfe ich dir gerne weiter. Die Seite bietet zudem einige weitere Tutorials, ein Forum, eine Dokumentation der API etc., also alles in allem imho sehr lohnenswert mal nen genaueren Blick drauf zu werfen.

Es schwieren in dem Bereich eine ganze Reihe von Begriffen (Direct3D, DirectX, OpenGL, HLSL, GLSL, ...) herum. Wichtig am Anfang: Erstmal auf das wesentliche beschränken, sich die Frage stellen: Was will ich machen, was ist mein langfristiges Ziel?

Wenn man sich mal etwas damit beschäftigt hat, tauchen viele Fragen von alleine auf, und man kann dann einzelne Gebiete vertiefen. Man muss nur die Bereitschaft mitbringen, dass dann auch zu machen ;)


Gruß,

badday
 
Was ich brauche ist derartig simpel, das traue ich mich fast nicht zu sagen.
Ich habe ein paar Brettspiele geschrieben, Mühle, Dame, Mensch ärger dich nicht, usw.
Mein Hauptziel war dabei, dass die Dinger netzwerkfähig sind und das habe ich gelöst.
Alles in 2D Ansicht, Brett von oben, mit animierten Spielsteinen, was allerdings nur ein Loop(MoveWindow(...)) ist.
Das funktioniert zwar ganz nett, aber das fängt selbst auf schnellen Rechnern leicht an zu stottern, logisch, weil MoveWindow() nicht wirklich die Lösung zu einer Animation ist.
Darum suche ich ein bessere Lösung zur Animation, und wenn schon, warum nicht gleich in 3D?

Nachdem ich aber das gesamte Ding selber schreibe, muss ich bei der Grafik anfangen.
Bisher male ich meine Bretter und Spielsteine in 2D mit Paintshop, das kann ich mit Farbverlauf, Textur und Zeug inzwischen recht gut, aber jetzt brauche ich dann wohl ein Grafikprogramm, was 3D Körper kann, schon da stehe ich wie der Ochse vorm Berg, aber wenn ich schon bei Null anfange, dann will ich zumindest von Anfang an mit dem richtigen Grafikprogramm und dem richtigen Dateiformat arbeiten.

Zusätzlich hätte ich gerne noch eine Bedingung, die ich bisher ganz sauber gelöst habe, aber ich fürchte, das ist in Sachen 3D nicht so einfach.
Alle meine Spiele existieren in 32bit und 64bit Version, für MinGW, bzw. MinGW-w64.
Der gesamte Code, bis hin zu libraries und includes, ist so geschrieben, dass ich nur in den Einstellungen meiner IDE (Code::Blocks) den Compiler ändern muss, sprich 100% vom Code passt ohne jede Änderung sowohl zu 32bit als auch zu 64bit.
Dabei laufen die Dinger auf ALLEN Windows Versionen ab Win98 ohne Probleme.

Wenn ich nur ansatzweise irgendwas zu 3D lese, dann finde ich meistens gleich zu Anfang Voraussetzungen, die dies alles zunichte machen, da brauche ich Libraries die es nur in 32bit gibt (ich vermute "irrlicht" ist auch eine davon), Funktionen oder Libraries die noch nicht mal in XP unterstützt werden, wie DirectX10, Shader (heisst das so?) die nur von NVidia Grafikkarten unterstützt werden und wenns dann noch nicht reicht sind das alles Sachen, die schneller veralten als ich (lahme Ente) so ein Spiel entwickeln kann, sprich, bevor ich fertig bin, kann ich nochmal von vorne anfangen, weil das was ich verwende hoffnungslos veraltet ist.

In kurz: Ich hätte gerne eine wirklich simple Lösung, für einfachste Aufgaben, die so weit wie irgend möglich mit 32bit und 64bit und diversen Windows Versionen kompatibel ist.
 
Am unabhängigsten bist du immer noch, wenn du kein Framework verwendest.

Also rohes DirectX bzw. OpenGL.
Wobei ich hier zu OpenGL raten würde, DirectX läuft wieder auf Linux nicht etc...

Zu 32/64: (Pures) OpenGL braucht keine eigenen Libs, die du mitausliefern musst, sondern wird vom jeweiligen Betriebssystem bereitgestellt. Sollte da deswegen keine Probleme machen.

Der Nachteil am "Rohen" ist eben, du musst sonst eventuell schon fertige Dinge selber entwickeln, weil alle anderen Libs ja quasi auf OpenGL/DX aufbauend zusätzliche, komfortablere Funktionen anbieten

Für den Einstieg in OpenGL wären die Nehe-Tutorials super:
http://nehe.gamedev.net/ links die Sparte OpenGL-Tutorials

Zu HLSL/GLSL: Wirst du bei Brettspielen kaum brauchen und sind auch nicht wirklich Anfängergebiet.

Als Programm für 3d-Models wäre Blender zu nennen: http://www.blender.org/

Gruß

PS: Ich finde es irgendwie übertrieben, für Brettspiele gleich 3D zu nehmen.
Wenn die Geschwindigkeit der Onboardfunktionen dein einziges Problem ist, würde es auch 2d-Libs geben.
zB SFML: http://www.sfml-dev.org/
 
Zuletzt bearbeitet:
Ganz vielen Dank für die Hilfe.
Erstmal habe ich Einiges zu lesen, das wird eine Weile dauern.
Zum Thema "übertrieben" kann ich sagen: Ich habe die ganze Sache von Anfang an als Training gesehen, ich hatte zu Beginn gar nicht vor irgendetwas Produktives zu machen, Brettspiele für PC gibt es schon massig, da muss ein Anfänger wie ich nicht auch noch versuchen seinen Senf dazu zu geben.
Mein vorrangiges Ziel war es Programmieren zu lernen, insbesondere Netzwerk.
Die einzige nicht vorhergesehene Randerscheinung war, dass meine Frau die Spiele so gut findet, dass sie jetzt mit mir spielen will und weil Frau nun mal auf gute Grafik steht, während ihr PC nicht schnell genug ist für meine MoveWindow-Animationen, verbinde ich mal wieder das Angenehme mit dem Nützlichen, ich peppe die Spiele auf und lerne (hoffentlich) 3D nebenbei.

Wer weiss, vielleicht kommt am Ende doch noch etwas Produktives heraus?
 
Jetzt mache ich das Thema doch nochmal auf, weil ich noch ein kleineres Problemchen habe:

Meiner Installation von MinGW bzw. MinGW-w64 fehlen nämlich jeweils ein header bzw. eine library, aber wenn ich dem Tutorial auf gamedev folgen will, brauche ich die, also, woher nehmen?

MinGW32 hat gl\gl.h und gl\glu.h, aber gl\glaux.h fehlt.
MinGW-w64 hat libopengl32.a und libglu32.a aber libglaux.a fehlt.

Zusammen genommen habe ich sie alle, aber zwischen 32bit und 64bit ist schlecht mischen.
Ich habe ein paar Seiten gefunden, wo riesige Pakete mit Libraries angeboten werden, aber wie das so ist mit GNU, da bin ich mir nie sicher, ob das Gesuchte drin ist, und wenn ja, ob es die richtige Version ist.

Im Tutorial steht bereits drin, glaux ist veraltet, aber wenn ich blutiger Anfänger schon beim header vom Tutorial abweiche, dann kommt garantiert nur Murks raus, lieber erstmal wort für Wort lernen, ändern kann ich es später immer noch. (Oder gibt es eine Lösung ohne glaux, die sogar ich verstehe?)

In kurz: Gibt es irgendwo einzeln eine
glaux.h für MinGW32
und eine
libglaux.a für MinGW64
oder wie sonst kann ich das lösen?
 
Glaux ist eine uralte, windowsspezifische, heute ziemlich tote Bibliothek...
Ist leider ein Minuspunkt für NeHe, die herzuzeigen.
(Immerhin steht sogar dort, dass es veraltert ist)

Wo genau bist du denn jetzt darübergestolpert?
Dann könnten wir wahrscheinlich eine Alternative zeigen.
 
Gleich zu Anfang, logisch, das Tutorial beginnt damit, was man an headern includen soll.
Lasse ich da eine weg, bzw. nehme eine Andere, weiss ich natürlich nicht, welche Funktionsaufrufe später nicht mehr gehn, bzw. anders heissen müssen.
 
Hm was das Thema 3D Modelle angeht, kan ich dir nur raten, dich ertsmal auf eins zu konzentrieren. Will man 2 neue Dinge gleichzeitig lernen, gehts meistens schnell schief. Ich will auch immer alles gleichzeitig, aber das geht leider net ;)
 
Alle meine Spiele existieren in 32bit und 64bit Version, für MinGW, bzw. MinGW-w64.
Der gesamte Code, bis hin zu libraries und includes, ist so geschrieben, dass ich nur in den Einstellungen meiner IDE (Code::Blocks) den Compiler ändern muss, sprich 100% vom Code passt ohne jede Änderung sowohl zu 32bit als auch zu 64bit.
Dabei laufen die Dinger auf ALLEN Windows Versionen ab Win98 ohne Probleme.
Irrlicht ist plattformunabhängig, ich entwickle z. B. sowohl für/unter Windows (versch. Versionen), als auch Linux. Siehe http://irrlicht.sourceforge.net/features.html#platforms

Wenn ich nur ansatzweise irgendwas zu 3D lese, dann finde ich meistens gleich zu Anfang Voraussetzungen, die dies alles zunichte machen, da brauche ich Libraries die es nur in 32bit gibt (ich vermute "irrlicht" ist auch eine davon), Funktionen oder Libraries die noch nicht mal in XP unterstützt werden, wie DirectX10, Shader (heisst das so?) die nur von NVidia Grafikkarten unterstützt werden und wenns dann noch nicht reicht sind das alles Sachen, die schneller veralten als ich (lahme Ente) so ein Spiel entwickeln kann, sprich, bevor ich fertig bin, kann ich nochmal von vorne anfangen, weil das was ich verwende hoffnungslos veraltet ist.
Auch das ist kein Problem. Irrlicht unterschützt sogar 6 Rendering-APIs. Siehe: http://irrlicht.sourceforge.net/features.html#drivers
In kurz: Ich hätte gerne eine wirklich simple Lösung, für einfachste Aufgaben, die so weit wie irgend möglich mit 32bit und 64bit und diversen Windows Versionen kompatibel ist.
Imho hast du das damit.

Ich würde die Verwendung von Irrlicht im Zusammenspiel mit C++ OpenGL vorziehen, das ist imho bequemer und schneller zu lernen (Irrlicht-API <-> OpenGL). Aber mit beiden bist du gut bedient ;)


Gruß,

badday
 
Zurück