# Frage zur 3D Entwicklung zwecks vorhandener Engines



## Kilinat (15. Mai 2011)

Hi 

Ich will endlich anfangen mich in Java mit 3D zu beschäftigen. Ich habe von vielen Seiten gehört das Java 3D extrem umständlich ist, und es mit einigen Engines leichter ist. ( z.B. Polygone ). 

Könnt ihr mir vielleicht Engines empfehlen für den Anfang der 3D Entwicklung, oder soll ich mir zuerst wirklich Java 3D anschauen? 

Hoffe auf gute Tips von euch  

MfG Kilinat


----------



## Illuvatar (15. Mai 2011)

Kommt darauf an, was du machen willst. Java3D ist einfach zu benutzen, stößt aber mmn schnell an seine Grenzen.
Für Spiele und ähnliches ist momentan die JMonkeyEngine hoch im Kurs, es gibt aber auch noch eine Vielzahl von Alternativen. Ich trau mir nicht zu, die auswendig alle runterzuschreiben  such mal im Forum, die werden hier öfters mal aufgezählt.


----------



## Kilinat (15. Mai 2011)

Okay, danke dir  
Ich hab mal auf der Homepage von jME3 herumgeguckt, finde aber keine Tutorials. 
Kennt ihr vielleicht gute (deutsche) Tutorials für jME3 ? 

MfG


----------



## Fu3L (15. Mai 2011)

Ich habe keine Deutschen Tutoriale gefunden (aber auch nicht wirklich danach gesucht). Das ist die offizielle Tutorialseite:

jMonkeyEngine.org | Documentation and Tutorials

Damit kommt man wohl schnell rein. Die Dokumentation ist hin und wieder etwas mau, aber ne Google Suche mit einem Schlagwort und JMonkeyEngine findet oft was im Forum, wenns etwas ist, was mehrere schon nicht verstanden haben.

Edit: Und die Engine befindet sich wirklich in fleißiger Entwicklung. Wenn etwas im Forum angesprochen wird, das fehlt oder verbuggt ist, antwortet fast sofort ein Entwickler.


----------



## Spacerat (18. Mai 2011)

Mal kurz aus einem anderen Thread kopiert...

1. LWJGL: für OpenAL, OpenGL und OpenCL. Kommt allem am nächsten unterstützt aber meines Wissens keine Lightweight-Components wie z.B. Swing ist dafür aber für 32-Bit und 64-Bit verfügbar. LWJGL wird auch von besagter JMonkeyEngine verwendet.

2. JOAL: für OpenAL. Ist ein wenig mehr objektorientierter, ist aber für Windows z.B. nur in 32-Bit verfügbar.

3. JOGL: für OpenGL. Ist ebenso wie JOAL auch ein wenig mehr objektorientierter und unterstützt auch Lightweight-Components. Seit Version 2.0 wurde es aber gravierend verändert. 2.0 ist afaik noch im Beta-Stadium und das schon recht lange.

4. JOCL: für OpenCL. Damit habe ich noch keine Erfahrungen gemacht.

Ich selbst verwende inzwischen LWJGL und verzichte dabei auf Lightweights. Der Vorteil hier: Man kann auch Tutorials durcharbeiten, welche für andere Sprachen, z.B. "C" oder "C#" konzipiert wurden, ohne gross den Code ändern zu müssen. Für die grafischen APIs stehen hier auch Tutorials in deutsch zur Verfügung. Die Quellen dazu findet man in vielen Programmiersprachen unter anderem auch Java hier.


----------



## Marco13 (18. Mai 2011)

Spacerat hat gesagt.:


> 4. JOCL: für OpenCL. Damit habe ich noch keine Erfahrungen gemacht.



"Keine" heißt in diesem Fall: So wenig, dass nichtmal der Punkt deutlich wurde, dass OpenCL nichts mit Spielen (Grafik oder Audio) zu tun hat


----------



## Spacerat (18. Mai 2011)

Marco13 hat gesagt.:


> "Keine" heißt in diesem Fall: So wenig, dass nichtmal der Punkt deutlich wurde, dass OpenCL nichts mit Spielen (Grafik oder Audio) zu tun hat


Absolut korrekt. Danke für die Info.


----------



## schalentier (18. Mai 2011)

Marco13 hat gesagt.:


> "Keine" heißt in diesem Fall: So wenig, dass nichtmal der Punkt deutlich wurde, dass OpenCL nichts mit Spielen (Grafik oder Audio) zu tun hat



Naja, OpenCL hat in etwa soviel mit Spielen zu tun, wie OpenGL oder OpenAL. Mit OpenGL kannste auch nen drehenden Wuerfel programmieren, was ja offensichtlich genauso wenig ein Spiel ist, wie eine sich dynamisch durch ein OpenCL Programm aendernde Texture auf diesem Wuerfel. Aber Wurst, das is Klugscheisserei ;-)

Soweit ich weiss gibts mit Java nicht viele Alternativen zum OpenXL. Aber das sind weniger "Engines", sondern einfach platformunabhaengige Libraries, um mit der Grafikkarte zu reden. 

Wenn du dich also erstmal grundlegend mit OpenGL beschaeftigen willst, empfehle ich LWJGL und google mal nach den NeHe Tutorials (die sind urspruenglich in C/C++ geschrieben, aber es gibt bestimmt auch Java Beispiele). 

Wenn du gleich ein Spiel programmieren willst, kannste neben der JMonkey Engine auch Ogre3D anschauen (bzw. die Java API dazu). Damit wurden auch schon einige kommerzielle Spiele entwickelt, des kann also nicht wirklich schlecht sein... ;-) Beide Engines bieten dir noch viel mehr als OpenGL & Co, was aber zum Grundverstaendnis evtl. nicht besonders hilfreich ist. Ein Mittelding ist evtl. Xith, damit hab ich mal ganz positive Erfahrungen gemacht. 

Java3D mag ich persoenlich ueberhaupt nicht. Zu kompliziert und am Ende viel zu langsam. Ist aber meine sehr subjektive Meinung...


----------



## Marco13 (18. Mai 2011)

Natürlich kann man auch in Spielen OpenCL verwenden, und das wird teilweise auch schon gemacht (Bullet Physics, Stoffsimulation oder so). Aber es wäre sicher nicht der klassische Einstiegspunkt in die Spieleprogrammierung


----------



## Fu3L (19. Mai 2011)

schalentier hat gesagt.:


> Wenn du gleich ein Spiel programmieren willst, kannste neben der JMonkey Engine auch Ogre3D anschauen (bzw. die Java API dazu). Damit wurden auch schon einige kommerzielle Spiele entwickelt, des kann also nicht wirklich schlecht sein... ;-) Beide Engines bieten dir noch viel mehr als OpenGL & Co, was aber zum Grundverstaendnis evtl. nicht besonders hilfreich ist. Ein Mittelding ist evtl. Xith, damit hab ich mal ganz positive Erfahrungen gemacht.



Ich habe mich gegen Ogre3D bzw Ogre4j entschieden, weil es hauptsächlich nicht zur Spieleprogrammierung entwickelt wird und man daher zB eine Bibliothek für Physikberechnungen noch einbinden muss. Außerdem könnte ich mir aus meinem Blickwinkel (also ohne Ahnung von beiden Engines zu haben) vorstellen, dass die JME wegen dieses Schwerpunktes auch etwas mehr auf Spiele optimiert sein könnte^^ Seis in Performance-Bereichen oder darin, was einem schon alles abgenommen wird an Arbeit.


----------



## Spacerat (19. Mai 2011)

schalentier hat gesagt.:


> Wenn du dich also erstmal grundlegend mit OpenGL beschaeftigen willst, empfehle ich LWJGL und google mal nach den NeHe Tutorials (die sind urspruenglich in C/C++ geschrieben, aber es gibt bestimmt auch Java Beispiele).


Nach den Nehe-Tuts brauchst nicht mal mehr googlen, die sind bereits in meinem vorletzten Beitrag hier verlinkt und zwar in deutsch und englisch  Ich habe die bereits bis Lesson 28 durch und bis auf Lesson 14 und 15 (3D Font Geschichten aus WGL) war bisher auch alles für LWJGL zumindest verfügbar. Hab' mich mit den 3D-Fonts dann ein wenig befasst, die beiden WGL-Funktionen nachgebildet und eine "printf()"-Methode hinzugefügt. Ferner lässt sich damit scheinbar alles, was man in ein "java.awt.Image" bekommt, relativ einfach in eine JGLTextur wandeln. Ich mach' mir mal die Mühe und lade das Ergebnis hier mal hoch. Vllt. hat der ein oder andere ja Vorschläge, wie es besser geht - das was man im Netz bezüglich "3D-Fonts in Java" findet, stellt für mich keine Alternativen dar. Bei Fragen, einfach fragen


----------



## Kr0e (22. Mai 2011)

Was hier immer viel zu selten genannt wird, ist Ardor3D... Praktischer Nachfolger der jME2...


----------



## Fu3L (22. Mai 2011)

Ich habe die Seite nur mal überflogen. Was mir gefallen würde, wäre das Terrain System mit Streaming, was allerdings auch für die JME in Planung ist.

Aber es scheint mir nicht so, als wenn die die gleichen Entwicklungskapazitäten wie die JME hätten bzw. momentan große Fortschritte machen würden oder bekomme ich nur einen falschen ersten Eindruck durch die Seite und das Forum?


----------



## Hachmed (22. Mai 2011)

Ich habe auch schon versucht, mich in die jmonkeyengine einzuarbeiten, aber dazu bräuchte ich ein Buch, nicht ein englisches Internet-Tutorial


----------



## Kr0e (22. Mai 2011)

Nein, die gleichen Kapazitäten wie jME sind nicht vorhanden. Aber jME hat auch ein paar unnötige Sachen. IMHO ist z.B. die Netzwerkimplementierung "SpiderMonkey" eher ein weiteres NIO Framework (Und da gibt es bessere Ansätze Netty3, MINA etc...), was ich nicht für ein Spiel verwenden würde aber dennoch fester Bestandteil von jME3 ist. Die jME3-Netbeansumgebung ist auch sehr buggy, oder vlt liegts auch an mir, dass ich nach 5-10 min iwie das Ding immer neustarten muss weil iwo was hägnt... Ich würde noch warten, denn die jME3 ist aus meiner Sicht zwar sehr umfangreich aber auch etwas unübersichtlich und fehleranfällig. Ardor3d ist quasi eine bessere jME2 mit einem saubererem API und ein paar neuen Features. Auch ein GUI ist direct Bestandteil von Ardor3D. jME3 setzt auf Nifty, was zwar nett aussieht, aber für Anfänger ein Horror ist. Ich finde es ehrlich gesagt Stuss, die Erstellung des GUI von Java zu trennen und in XML zu implementieren...

Lange Rede kurzer Sinn:

Ardor3D ist ein blick wert...

@Hachmed:

Ein Buch wirst du höchstens für Java3D finden  Du musst scon etwas Eigeninitiative mitbringen und vorallem die Fähigkeiten, APIs aufgrund von Demos und ein paar kommentaren zu verstehen... Das sind alles Open Source Projekte, die nur von wenigen Menschen geleitet werden und keine fertigen kommerziellen Produkte...


----------



## Fu3L (22. Mai 2011)

Oh ja, Nifty Gui war eine Freude mich reinzuarbeiten :autsch:

Mein größtes Problem liegt gerade in Terrainplatten, die ich einzeln lade und damit den Boden kachel^^ Eigentlich passen die gut zusammen, aber da wo die einige Einheiten höher sind, passen die aufmal nicht mehr aneinander,  da ist dann eine Lücke von rund 2 Einheiten^^ (und zwar nicht in der Höhe, sondern in den "Bodendimensionen".. die Platten sind eigentlich ganz passgenau)

Mit Netzwerken habe ich noch keine Bekanntschaft gemacht^^

Das Problem für mich wäre dabei jetzt: Würde ich jetzt Ardor3D verwenden und es würde aufgegeben oder JME 3 stellts irgendwann einfach in den Schatten, wäre ich dran gebunden, aber ich werde trotzdem nochmal einen längeren Blick drauf werfen.


----------



## Kr0e (22. Mai 2011)

Da hast du natürlcih Recht, die Wahl einer engine ist shcon etwas "entgültiges" und man will natürlich das best-mögliche haben. Ich denke, wenn du dich bereits in Nifty und jme3 eingearbeitet hast und damit gut klar kommst, ist ein Umstieg vermutlcih nicht empfehlenswert...


----------



## Empire Phoenix (22. Mai 2011)

Der farinsess sollte man sagen das in jme3 weder der netzwerkode benutzt werden muss noch die physicengine oder andere sachen, da das ganze sauber getrennt ist und man icht gezwungen wird es auch zu benutzen. (Für mein eigenes project benutze ich beispielsweise weder nifty noch die standart jbullet implementierung noch den netzcode).

Von den derzeitig existierenden mir bekannten java engine ist JME3 aber durch sein Shaderbasiertes materialsystem im bereich von aktuellen Technologien deutlich gegenüber anderen überlegen.


----------

