#

Kaffee und 3D

Wieder einmal habe ich mich für die Spieleentwicklung unter Java interessiert und daher etwas zu den Möglichkeiten in Java recherchiert. Obwohl ich mich ursprünglich für ein 2D Spiel interessiert habe, dachte ich mir, schaust du dir die 3D Möglichkeiten unter Java mal an. Schließlich sollte es möglich sein ein 2D Spiel auch unter 3D zu entwickeln. Letzten endes nachher eine Frage der Perspektive. Auch schien mir die 2D API unter JDK 1.4 nicht sonderlich viel Nutzen aus Grafikbeschleunigern zu ziehen.

Vor einigen Jahren hatte ich einen Blick auf die Java3D API von Sun geworfen und musste aber feststellen, dass sich seit dem viel geändert hat. Die Java3D API wird nicht mehr supported und ist auf dem Stand von OpenGL 1.4 stehen geblieben. Dafür gibt es jetzt viel mehr Opensource APIs, die ein Binding von Java zu OpenGL anbieten.

Da wäre beispielsweise die von Sun supportete API JOGL (Java OpenGL), von der es sogar heißt, dass sie in zukünftigen Java Versionen fester Bestandteil der J2SE werden könnte. Derzeit unterstützt sie alle Features von OpenGL 2.0. Grundlage dieses Bindings ist eine automatische Auswertung der C-Header Dateien von OpenGL, welche in Java JNI Wrappern umgewandelt werden, um die stetigen Änderungen und dem immensen Funktionsumfang von OpenGL hinterher zu kommen.
Tatsächlich haben sich einige Leute sogar die Mühe gemacht, die Quake2 Engine auf JOGL zu portieren.

Dies zeigt auch den aktuellen Stand: Während seit Quake2 die 3D Welt riesige Revolutionen hinter sich gebracht hat und HalfLife2 nicht mehr mit älteren Spielen zu vergleichen ist, hängt Java noch ein halbes Jahrzehnt hinterher.
Dennoch scheint mehr Bewegung in die Java 3D Welt gekommen zu sein.

Neben JOGL gibt es da noch die API LWJGL (Lightweight Java Game Library), welche ebenfalls ein OpenGL Binding zur Verfügung stellt, zusätzlich aber auch eine Unterstützung für OpenAL (Open Audiolibrary) und damit für 3D Sound besitzt. Ein erstes kommerzielles Spiel wurde bereits damit entwickelt.

Einer der Kandidaten, GL4Java API, ist bereits auf der Strecke geblieben: Ähnlich wie für die Java3D API wurde der Support bereits eingestellt.

Ein weiterer Wrapper, welcher die darunter liegende OpenGL API kapselt ist die MonkeyEngine, welche JOGL, LWJGL und Java2D als darunter liegende Rendering Engine unterstützt.

Alle APIs besitzen eindrucksvolle Demos auf ihren Homepages, jedoch schein ein Teil dieser Demos bei mir nicht zu laufen, obwohl ich eine GForce4 Grafikkarte am Rechner habe. Die Geschwindigkeit der Demos kann sich sehen lassen, aber nicht mit aktuellen Spielen mithalten.

Auch für die Java2D API gibt es Hoffnung, denn unter 1.4 kann schon eine kleine Optimierung auf Basis von OpenGL gemacht werden: Mit der JVM Option „-Dsun.java2d.opengl=true“ kann die OpenGL Pipeline aktiviert werden und ab 1.5 ist sogar eine neuere und noch schnellere OpenGL Pipeline eingebaut.

Tags:,

5 Responses to “Kaffee und 3D” »»

  1. Comment by Secco | 10:08 04.07.06|X

    Monkey Engine unterstützt auch das Einbetten von Swing Komponenten in 3D.

  2. Comment by Toni | 10:22 04.07.06|X

    Cool, danke für die aktuelle Ãœbersicht. Wollte mich demnächste mal in die Materie einarbeiten.b Zur Ehrenrettung von Java lässt sich nur sagen, daß es nicht unbedingt an den Möglichkeiten der Sprache liegt, sondern die Hersteller kein interesse zeigen eine tolle Engine in Java zu entwickeln die sie vermarkten können. Somit bleibt 3D Java kleineren Teams und öffentlichen Konsortien überlassen.

  3. Comment by Secco | 15:40 06.07.06|X

    Als Physik-Engine gibt es unter Java die JODE Library, welche auch von jMonkeyEngine unterstützt wird.

  4. Comment by Secco | 14:57 07.08.06|X

    Leider sind JOGL und LWJGL lediglich OpenGL Wrapper und damit NUR Rendering-Engines. Sie besitzen keinen eingebauten Support für Kollisionserkennung, Partikel-Systeme oder dergleichen. Damit sind sie zwar in Sachen Darstellung sehr stark optimierbar, aber nicht gerade als Startpunkt für ein eigenes Spiel geeignet. Ihre Render-Performanz kann aber mit der C-Version der OpenGL Anbindungen mithalten, wenn man sich mit OpenGL auskennt und keine groben Fehler macht, die Performanz fressen (siehe Forumbeitrag auf lwjgl.org).

    Für direkte Spieleentwicklungen sind daher Wrapper um diese Bindings besser geeignet. Neben der MonkeyEngine gibt es noch diverse andere, wie z.B. Espresso3D, OctLight J(ava) G(ame) E(ngine) oder Xith. Diese setzen üblicherweise auf JOGL oder LWJGL als Rendering-Engine auf und haben verschiedene Stärken, Schwächen und Features. Für 2D Spiele gibt es da noch die G(olden) T G(ame) E(ngine)

    Eine interessante Ãœbersicht vieler Rendering- und Gameengines (auch nicht Java und auch kommerzielle) gibt es auf gpwiki.org sowie auf flipcode.com

  5. Comment by Secco | 10:03 08.08.06|X

    Die Java3D API wird trotz fehlenden Supports von Sun als Community Projekt weiterentwickelt. Unter java3d.dev.java.net ist die aktuelle Release zu finden. Nach einem Thread im Disskusionsforum von Javagaming.org, ist Java3D sogar die derzeit schnellste Rendering-Engine für Java. Der Test wurde mit einem Quake3 Levelviewer durchgeführt und umfaßt die Higher-Level APIs Java3D, Xith und jME.

Leave a Reply »»

Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.