# 3D-Engine in C++ erstellen?



## Gwenderon (7. Oktober 2004)

Hi

 Ich möchte mir eine 3d-engine in C++ programmieren.
 Ich hab mal irgendwo ein Buch gesehen, wo eine erstellt wurde. Weiß aber nicht mehr wo.

 Wisst ihr was von dem Buch?
 Oder kennt ihr irgendwelche Tutorials in der Richtung (also kein Direktdraw oder so)?
 Wie kann man sowas lernen?


 Bisher habe ich folgende Bücher (zum Nachschlagen): C++ in 21 Tagen, Visual-C++.NET Kompendium und 3D-Spiele-programmierung.


----------



## Kachelator (7. Oktober 2004)

Eine ganze 3D-Engine zu programmieren ist ein ziemlich umfangreiches Vorhaben. Da kannst du gerne mit einigen Jahren Arbeit rechnen. Wenn du nur mit 3D-Grafik experimentieren willst (ohne DirectX, oder verstehe ich dich falsch?), schau doch mal bei http://www.gamedev.net rein. Die 3D-OpenGL-Tutorials (von NeHE, glaube ich) haben mich damals wirklich weitergebracht.


----------



## Tobias K. (8. Oktober 2004)

moin


Ich kann dir die "SdlLib" empfehlen.

Zu den Büchern:
Hast du sie nur zum Nachschlagen?! Du solltest sie komplett durchlesen und erstmal das nötige grundwissen zu bekommen! wenn du immer nachschlägst wenn du ein Problem hast wirst du eh nur am lesen sein.


mfg
umbrasaxum


----------



## Gwenderon (12. Oktober 2004)

Das mit dem Nachschlagen meinte ich anders. Die Bücher hab ich Natürlich gelesen, ich meinte dass ich eben wüsste wo ich etwas Nachschlagen müsste.

 Ich weiß dass das nicht einfach ist. Ein Schweizer hat aber alleine noch nicht mal 1 Jahr gebraucht um die Irrlicht-Engine zu entwickeln. Ich will auch nicht nur herumexperiementieren sondern richtig damit arbeiten. Es soll eine Direktx-engine werden, kein OpenGL (veraltet und zu lahm).

 Also wisst ihr noch was?  
 Die SDLLIB schau ich mir gleich mal an.


----------



## Daniel Toplak (13. Oktober 2004)

> kein OpenGL (veraltet und zu lahm).


Also ich geh mal davon aus, das du solche Gerüchte nicht in den Büchern gelesen hast, denn das stimmt so nicht.

Gruß Homer


----------



## Gwenderon (13. Oktober 2004)

Das Lahm war auch nicht geschwindigkeitsmäßig sondern von der aktualität her gemeint.
 z.B. gibt es kein Bumpmapping.
 OpenGL ist auch nur für Grafik und nicht für Sound, Steuerung und ähnliches zuständig wie DirektX.

 Wisst ihr noch was?
 Wie lernt man eine DirektX-engine mit C++ zu proggrammieren?


----------



## fireflyhope (16. Oktober 2004)

ich habe bei mir in der buchhandlung mal bücher gesehen zum programmieren von 3d engines. was willst du eigentlich damit machen, also ein spiel, oder nur ein fenster in dem eine 3d datei angezeigt wird, oder was?

EDIT: wenn ein spiel, solen lichtquellen und solcheszeug auch rein, am besten du schaust dich mal bei amazone.de um, unter programmier bücher


----------



## wasted time (16. Oktober 2004)

Guck mal da.
Dann mal hier

Bei amazon nach Stefan Zerbst und David Scherfgen suchen.
Ersterer macht bei der ersten Seite mit und der 2. bei der zweiten.


----------



## Gwenderon (20. Oktober 2004)

Bei Amazon hab ich schon oft gesucht und nichts gutes gefunden. Über Engine-erstellung haben die nichts genaues.
Eines meiner Bücher ist von David Scherfgen, aber der erklärt eigentlich nur Theoretisches und erzählt dann nur noch von seiner unnötig kompliezierten Engine.

Meinst du mit 3d-Datei ein Model oder eine Map?
Der einzige wichtige unterschied zwieschen einem Spiel und einem Fensterprogramm ist, das das eine im Vollbildschirm Modus läuft und das andere im Fenster. Also war deine Frage so gut wie  überflüssig, übrigens ein Spiel.

Die Links bringen mich nicht weiter. Der erste geht nur über EINE Engine und nicht über das zusammenbauen irgendeiner Engine. Der zweite Link könnte nur später bei der Kollisionserkennung nützlich sein.

Bei dem DirektX9 SDK sind übrigens Beispiele (unter anderem ein komplettes Spiel) die komplett ohne Engine erstellt wurden, also ist es möglich Spiele komplett ohne Engine zu entwickeln. Oder?
Eine Eninge vereinfacht doch eigentlich nur die DirektX programmierung. Oder?


----------



## wasted time (20. Oktober 2004)

> Die Links bringen mich nicht weiter. Der erste geht nur über EINE Engine und nicht über das zusammenbauen irgendeiner Engine. Der zweite Link könnte nur später bei der Kollisionserkennung nützlich sein.


Hmm der 1. Link führt zu einer 3D-Spieleprogrammiercommunity, und das soll dich nicht weiter bringen?


----------



## C Coder (20. Oktober 2004)

> Eine Eninge vereinfacht doch eigentlich nur die DirektX programmierung. Oder?


Ich bin kein experte, aber ich stell mir unter eine Engine ein Stück software vor, auf der man sein programm aufsetzt, aber der engine nur noch sagen muss lade diese datei oder jene, die ich vorher in einem 3D-Grafikprogramm erstellt hab. Die eigene dazugeschriebene Software ist praktisch nur noch ereignis handler.


----------



## Gwenderon (22. Oktober 2004)

Das würde mir nur weiterhelfen, wenn ich mit dieser _*einen *_Engine arbeiten wollte. Will ich aber nicht. Ich will ja eine eigene machen.



			
				C Coder hat gesagt.:
			
		

> Ich bin kein experte, aber ich stell mir unter eine Engine ein Stück software vor, auf der man sein programm aufsetzt, aber der engine nur noch sagen muss lade diese datei oder jene, die ich vorher in einem 3D-Grafikprogramm erstellt hab. Die eigene dazugeschriebene Software ist praktisch nur noch ereignis handler.


 So ähnlich. Eine Engine kann (meistens) noch mehr. Sie verwalten den Speicher, vereinfachen Berechnungen, können Figuren animieren...
 Meinst du mit ereignis handler sowas wie einen Befehlsgeber?

 Wie kann man eigentlich 2D in DirektX9 verwenden?
 Kennt ihr da irgendwelche Tutorials? DirektDraw gibt es ja seit DirektX8 nicht mehr.


----------



## wasted time (24. Oktober 2004)

> Wie kann man eigentlich 2D in DirektX9 verwenden?  Kennt ihr da irgendwelche Tutorials? DirektDraw gibt es ja seit DirektX8 nicht mehr.	  20.10.04 19:43


Wieso stellst du diese Fragen nicht einfach mal in einem der 2 oben genannten Foren. Schließlich sind das Foren die sich aufs Spieleprogrammieren spezialisiert haben. 
Oder du suchst mit  .


----------



## C Coder (24. Oktober 2004)

Hehe, Danke! Bin ich wieder was klüger geworden! 

Aber zurück zum Thema: Wie stellst du dir denn deine Engine vor?
Also was soll sie alles können?


----------



## Gwenderon (24. Oktober 2004)

Das war nur ne Frage nebenbei. Such ich mir irgendwan mal.

Also sie sollte DirektX9 vereinfachen ;-).
Sie sollte (hintergrund)musik abspielen können, das erstellen von Soundeffekten erleichtern, Eingaben abfragen (also auf sowas wie Joystickbewegungen reagieren), den ganzen Initialisierung-Kram kürzen, 2D Grafiken (Panels, Buttons...) anzeigen, das Speichern und Laden von Spielständen vereinfachen, Model- und Map- Dateien laden können und natürlich erstmal einfaches 3D beherschen.
Klingt ziemlich viel. Soviel ich weiss ist alles ausser das mit den Spielständen, Initialiesierung und Modeldateien schon in kompliezierter Form in DirektX drin.

Die Musiksachen und Eingabesachen sind schon gut mit Beispielen erklärt, die kann ich mir vermutlich selbst beibringen.
Ich brauche eigentlich nur wissen wie ich so ne Engine anfange und wie ich DirektXGraphics da rein kriege.


----------



## .X0R (26. Oktober 2004)

Nunja, also als erstes möchte ich hier einiges richtigstellen. OpenGL beherrscht sehr wohl Bumpmapping und diverse andere Shaderfunktionen. Da gibt es massenhaft Extensions!

Um deine Enginevorstellung am besten umzusetzen solltest du erstmal ein gutes Konzept entwerfen. In Ansätzen hast du dies ja hier getan. Aber nimm dir mal ein Blatt Papier und schreibe dir alles auf was deine Engine machn soll. (zB 3D-Objekte laden und darstellen, jene, rotieren, verschieben, scalieren. Lichtquellen setzen. Desweiteren wird ein ordentlicher mathematischer Funktionshaufen nötig. Da brauchste viele kleine Funktionen und Klassen zur Normalenberechnung, Kreuzprodukt etc.) Und glaub mir, das alles sollte gut organisiert sein, sonst siehst da später nicht mehr durch und dann bringt dir deine Engine nichts, weil sie dir keine Arbeit abnimmt, sondern welche auferlegt. Wenn du nun eine Liste deiner ganzen Funktionen hast, kannst du dich daran machen, dass DX-SDK (ich persönlich nutze nur OGL) zu durchsuchen und versuchen deine Funktionen umzusetzen. Da wirst ne Menge lernen müssen. Wenn denn irgendwann mal ein Teil deiner Funktionen fertiggestellt ist, kannst auch schon mal was darstellen. Dieser Moment ist sehr schön und ich hoffe für dich, dass er dir genug Schwung gibt auch noch den Rest zu bewältigen.

so far,... .X0R


----------



## Gwenderon (26. Oktober 2004)

Auf ein Blatt krieg das sowieso nicht.
Ausserdem hab ich nach meinen fast 3 Jahren Programmiererfahrungen eine Papiersparendere Technik gefunden. Sobald ich merke das ich noch berechnungen und Funktionen gebrauchen kann, programmier ich mir das dazu. Ich mach mir übrigens eine statische Engine und keine dynamische.
Den durchblick verlier ich eh nicht, ich kann mir das seltsamerweise alles merken. Ich brauch nur kurz auf den unkomentierten jahrealten Code zu schauen und weiß direkt wofür die einzelnen Variablen und Funktionen da sind.

Das SDK hab ich schon durchsucht und nur gute Beispiele in Fenstern gesucht. So kann ich nochnichtmals lernen wie man eine Vollmodus Anwendung Initialiesiert(ich hasse dieses Wort).
Ich such mir da ein Tutorial. Ausserdem erklären die nur wie man X-Dateien läd und brauch niemand.

Ich weiß das es da erweiterungen gibt, der ganze kram ist mir aber zu komplieziert. Da lern ich lieber das DierktX9 Ding durch.

Ich wolte erstmal mit dem Initialiesierungskram anfangen und dann mit 2D, Eingaben, Sound und 3D  weitemachen. DirektPlay und DirektInstall mach ich wenn überhaupt ganz am Ende.


----------



## wasted time (26. Oktober 2004)

> Ausserdem hab ich nach meinen fast 3 Jahren Programmiererfahrungen eine Papiersparendere Technik gefunden. Sobald ich merke das ich noch berechnungen und Funktionen gebrauchen kann, programmier ich mir das dazu.


Na dann viel Spass bei großen Sachen.
Ich bin mir ziemlich sicher bei MS wird das auch so gehandhabt. Sieht man ja an den vielen Updates!? :suspekt:
Mal im Ernst, das erste was du lernst ist, dass das eigentliche Programmieren nur einen kleinen Teil der Entwicklung von Software ausmacht, der große Teil erstreckt sich auf die Planung und die Wartung.



> Den durchblick verlier ich eh nicht, ich kann mir das seltsamerweise alles merken. Ich brauch nur kurz auf den unkomentierten jahrealten Code zu schauen und weiß direkt wofür die einzelnen Variablen und Funktionen da sind.


Nee ist klar. Anscheinend bist du ein Wunderkind. Nur soll alte Software auch gewartet werden und das nicht unbedingt von dir, dein Nachfolger wird sich bedanken. (Falls du jemals im Software Engineerimg Bereich arbeiten solltest.)


----------



## Gwenderon (26. Oktober 2004)

Damals sah das eben so bei mir aus.
 Das kommt noch aus WDL-Zeiten ausserdem waren das nicht mehr als 200 Zeilen pro Projet.
 In C++ will ich das im Code mit Komentaren versehen (für mich ein grosser schritt).
 Bei Spielen und Programmen schreib und zeichne ich auch einiges vorher auf, nur weiß ich nicht wie das bei direktx gehen soll.

 Ich hab jetzt mal nach Tutorials gesuch und nichts gefunden.
 Dafür hab ich aber ein passendes Buch gefunden (könnte das sein was ich am anfang erwähnte).

 Ihr findet beschreibungen unter:
http://www.games-net.de/books.php?action=display&id=208
http://www.amazon.de/exec/obidos/AS...8093/sr=2-1/ref=sr_2_27_1/302-2737459-5519211

 Kennt ihr das?
 Was haltet ihr davon?

 Übrigens hab ich über Software-engineering schon einiges in einem Buch gelesen.
 Da steht, dass für die Planung 40%, die Programmierung 20% und fürs Testen auch 40% der Zeit gebraucht werden. Da ich alleine arbeite fällt für die Planung und dokumentierung das meiste weg.


----------



## BigJul (26. Oktober 2004)

http://www.zfx.info/Tutorials.php?ID=1

hier ein sehr gutes tutorial wie man eine
Direct3D Engine aufbaut. (von anfang bis zum ende)


----------



## wasted time (27. Oktober 2004)

> http://www.zfx.info/Tutorials.php?ID=1    hier ein sehr gutes tutorial wie man eine  Direct3D Engine aufbaut. (von anfang bis zum ende)


Auf die Seite hab ich schon 100000 mal hingewiesen, aber aus mir unerfindlichen Gründen hat er sich immer gesträubt da mal vorbei zu gucken, sonst hätte er das Tut schon längst gesehen.


----------



## Gwenderon (27. Oktober 2004)

Das ist zwar über DX8 sieht aber trotzdem gut aus. Danke.

 Da wird ständig so ein Immediate erwähnt, was ist das?

 Dafür braucht man das DX8 SDK ich hab aber nur das DX9 SDK. Geht das denn auch?
 Der Link fürt nur zu DX9 SDK.


----------



## wasted time (27. Oktober 2004)

Das DX9 SDK geht auch, DirectX ist abwärts kompatibel, soll heißen, Spiele die für DX8 geschrieben sind müßen ja auch mit DX9 funktionieren.



> Früher gab es die beiden getrennten Komponenten DirectDraw (Bildschirmeinstellung, 2D Grafik) und Direct3D (Retained Mode, Immediate Mode) doch seit der Version 8 von DirectX wurden diese beiden verschmolzen und es gibt nur noch Direct3D.


Der Immedieate Mode von Direct3D ist einfacher zu benutzen als der Retained Mode, dafür hat, bzw. hatte,  man beim Retained Mode mehr Möglichkeiten.


----------



## Gwenderon (27. Oktober 2004)

Auf deiner Seite hab ich nur andere, für mich unnütze Tutorials gefunden. Oderich es nicht gelesen weil es für DX8 ist

Das SDK hat nichts mit fertigen Spielen zu tun.
Nur die DirektX versionen sind abwärtskompatibel.
Das SDK nicht.
Viele Klassen und Variablen haben andere Namen oder existieren gar nicht mehr.
Ich versuche nun das Tutorial nach DX9 zu konvertieren. Scheint aber lange zu dauern.
Den Theoriekram aus meinem David Scherfgen Buch kann mir dabei vielleicht helfen.


----------



## wasted time (27. Oktober 2004)

Ach glaub doch was du willst. 
Im Übrigen bin ich mir bewußt, dass das SDK nix mit fertigen Spielen zu tun hat.


----------



## Gwenderon (29. Oktober 2004)

Auf jeden fall läuft das Tutorial nur im DX8 Modus und nicht im DX9 Modus.
Das Konvertieren krieg ich nicht hin. Das Scherfgen Buch bringt mich nicht weiter und die SDK Tutorials und Beispiele auch nicht. Gute Tutorials find ich auch nicht.

Könnt ihr mir Bücher über DX9 in C++  empfehlen? Am besten was für Anfänger und/oder vielleicht was zum Nachschlagen.


----------



## Gwenderon (1. November 2004)

Ich hab mir jetzt ein Buch über DirektX9 und C++ bestehlt, für ca. 26€ bei Amazon. Es heißt: "Jetzt lerne ich DirectX 9 und Visual C++ . Das komplette Starterkit fuer den Einstieg in die".
Das hat sehr gut Bewertungen und ist sehr gut für Anfänger geeignet.
Es erklärt zwar nicht die 3D Sachen, dafür aber alle anderen wichtigen Sachen.Wenn ich das Kapiere kann 3D auch kein Problem mehr sein.

Na? Ist das ne gute Idee?


----------



## Gwenderon (9. November 2004)

Das Buch bringt mich um einiges weiter. Alles gut erklärt.


----------

