# Eigene Java 3D Engine erstellen.



## NZPaul (24. Feb 2012)

Hey,

ich habe nun schon einige 2D Spiele programmiert und würde jetzt gerne mit 3D Spieleprogrammierung anfangen, jedoch möchte ich meine eigene Engine Programmieren. (also nicht Java 3D verwenden, sondern nur mit dem StandardJDK arbeiten)

Ich habe jetzt auch schon länger nach Toturials und Bücher gesucht, jedoch überhaupt nichts finden können.

Hättet Ihr vielleicht irgendeinen Tipp wo ich ein gutes Toturial oder ähnliches finden kann? Kann auch gerne auf Englisch sein.


----------



## Landei (24. Feb 2012)

Ich hoffe dir ist klar, wieviel Arbeit es ist, auch nur einen bunten Würfel auf den Bildschirm zu bekommen. "Nur mit StandardJDK" klingt ziemlich sinnfrei, du solltest schon wenigstens einen OpenGL-Wrapper (lwjgl, JOGL oder so) verwenden.


----------



## Luk10 (24. Feb 2012)

Kanal von TH3CHERNO - YouTube

Ist ganz Interessant, wobei es sicher nicht wirklich hilft die "Insides" des 3D-Programmierens zu verstehen.
Erfüllt auch deine Vorgabe keine libs zu verwenden.

-Luk10-


----------



## NZPaul (24. Feb 2012)

Hey Landei, danke für deine schnelle Antwort.

Doch mir ist bewusst, dass das sehr viel arbeit ist, jedoch möchte ich auch lernen wie 3D funktioniert. Ich habe auch schon ein Toturial auf YouTube gefunden (Episode 1 - Window :: 3D Game Programming in Java - Making a First Person Shooter from Scratch - YouTube) wo nur JDK 6 verwendet wird. Jedoch wollte ich mal fragen, ob es noch welcher solcher Toturials gibt, welche vielleicht auch schon vollendet sind.


----------



## Evil-Devil (24. Feb 2012)

Ich hab dieses feine Buch zu Hause
Computer graphics for Java programmers - Leendert Ammeraal, Kang Zhang - Google Bücher

Das beginnt mit einfachem 2D und endet bei 3D. Alles auf dem 2D Graphics Objekt. Man schreibt also effektiv seinen eigenen Rasterizer und muss sich am Ende des Buches um alles kümmern. Clipping, Depth Testing etc pp.

Ist sehr viel Mathe und ich hab irgendwann kein Bock mehr gehabt, auch wenn ich immer wieder mal rein schaue. Aber so grundlegendes in der heutigen Zeit neu zu schreiben ist meiner Meinung nach außer zu Lernzwecken überflüssig. Auch wenn es sehr interessant ist. Falls du also nicht gerade in der Richtung studierst schnapp dir eine bestehende API und nutze die. Zb. OpenGL. Auch da wirst du noch mehr als genug lernen müssen.


----------



## Noctarius (24. Feb 2012)

Basiswissen gibt's auch hier:
Killer Game Programming in Java


----------



## Empire Phoenix (24. Feb 2012)

Vergiss das ohne librarys,
da ist dann nur software rendering möglich, was ungefähr doppelt soviel aufwand macht und 10 mal so s******e aussieht.
Mit opengl und shadern ect alleine ist man schon gut meherere Jahre mit lernen beschäftigt, (wenn man grafic die halbwegs state of the art is hinbekommen will)

Daher mindestens lwjgl or jogl2


----------



## Noctarius (24. Feb 2012)

Wenn man aber die Hintergründe verstehen will ist ein einfaches Beispiel bzw eine Basisimplementierung eines Softwarerenderers nicht falsch. Man kann hinterher viel besser mit Hardwaresupport wie OpenGL oder DX umgehen,


----------



## Tobse (24. Feb 2012)

Nicht das ich jetzt großartig Ahnung davon hätte, aber ein 3D-Renderer Macht ja das:
3D-Daten, also die Eckpunkte der Objekte, und Kameraposition rein => 2D Pixel raus (von Texturen mal ganz zu schweigen)

Hört sich für mich nach zig' berechnungen an, die in Java vor allem, warscheinlich lange brauchen werden. Mir är das zu heftig.


----------



## Marco13 (24. Feb 2012)

Das geht schon... jPCT - a free java 3d engine featuring software rendering and OpenGL support with texture mapping, shaders and skeletal animation. An Android version is also available.

Ob man so ein Buch wie http://www.amazon.de/Computer-Graphics-Principles-Addison-Wesley-Programming/dp/0201848406 in so einem Fall empfehlen sollte? Wohl eher nicht ... :bahnhof:


----------



## Kr0e (6. Mrz 2012)

Hm. Wenn du bereits Vorwissen über die alten Versionen von GL hast, dann kannst du die schonmal zu 50% übern Haufen werfen. Hat sich viel geändert mit OpenGL 3.x.


Ansonsten würde ich sagen: Vergiss das Vorhabe!

Das ist jetzt keine Geringschätzung deiner Fähigkeiten sondern schlicht und einfahc Erfahrung. Mit viel Aufwand und Motivation schaffst du es vlt. einen simplen, diffusen Shader hinzukriegen und dann alles so weit aufzubereiten, dass am Ende nach stundenlanger/tagelanger Arbeit ein drehender Würfel mit simpler Textur erscheint.


Ich persönlich finde auch, dass man Wissen darüber haben sollte, wie 3D PRogrammierung funktioniert, aber es selbst "from scratch" zu machen, halte ich für falsch. Du verlierst schneller die Lust, als dir Lieb ist und am Ende hast du dann quasi null gelernt.


Mein persönlicher Tipp: Lerne 3D/Spiele Programmierung nicht mit Java. Unity3D bietet (C# als Sprache, ähnlich wie Java + einigen nützlichen Spracherweiterungen) eine komplette Umgebung zum Entwickeln und Testen.

Wenn du dann die ganzen Tuts und Doks liest, wird einem sehr gut erklärt, was im Hintergrund der Engine vorgeht. Z.b. was ein Drawcall ist udn warum man davon nicht 1kk haben sollte und wie man diese minimieren kann. Dazu gibt es fertige Shader + deren Code. Du könntest dich dann direkt an eigenen Shadern probieren.


Fazit:

Das was du dir stellen musst, ist die Frage: "Was will ich eigentlich machen ?". Halbziellos, ohne klares Konzept und nur "3D Technik" lernen ist vermutlich ein schnell vergangenes Ziel.

2ter Tipp: Fang bei 3D Programmierung ANDERS herum an. Lerne erst die Highlevelkonzepte und arbeite mit Unity oder sonst was (UDK, CryEngine, etc...). Wenn die Highlevelkonzepte gut beherrscht und so ziemlich alles weißt, was es auf dem Highlevel Niveau zu wissen gibt... DANN, erst DANN, solltest du dich darüber informieren, wie die nächste Ebene funktioniert.

Das ist natürlich absolut nur meine eigene Meinung und das sehen vermutlich viele anders. Insofern... Gib nich zu viel auf die Meinung eines einzelnen 


Gruß,
Chris


[EDIT:]


Wenn dich das alles noch nicht entmutigt hat, da gibt es sowieso nur EINE Wahl als Buch:

OpenGL Super Bible V5. Ich hab mir die vor einiger Zeit mal besorgt, um besser mit den neuen GL Versionen zu arbeiten und die Änderung zu verstehen, die mit GL3.3 gekommen sind. Das ist wirklicH DAS Buch!


----------



## Marco13 (6. Mrz 2012)

Dem kann ich weitestgehend zustimmen. Aber wenn hier gelegentlich solche Fragen kommen wie "Wie kann ich in Java3D ein Objekt an eine bestimmte Stelle setzen / irgendwie ausrichten?" usw. überlege ich manchmal ob derjenige nicht vielleicht auf dem falschen Level angefangen hat. (Die Gefahr besteht aber wohl nicht, wenn man sich zwar mit dem High-Level beschäftigt, aber sich trotzdem auch für das Low-Level interessiert - dann beschäftigt man sich damit nämlich automatisch mit)


----------

