# Suche Vergleich



## Evolver (7. Apr 2009)

Ich habe jetzt schon ein bisschen gegooglt, aber keinen so rechten Vergleich zwischen den einzelnen Möglichkieten gefunden, gescheit Grafik auf den Bildschirm zu bekommen. Also ich wollte mich mal wieder an ein Spielchen ranwagen, musste jetzt aber nach einigen konzepthaften Zeilen Code feststellen, dass normales Java2D (awt) zu lahm ist, wenn man mehrere hundert Tiles (mit Transparanz) auf den Bildschirm bringen muss.

Nach ein bisschen googln bin ich mehrfach auf die Meinung gestoßen, man solle zu JOGL greifen. Könnt ihr das bestätigen, hat schon jemand (gute) Erfahrung damit im 2D-Bereich gemacht? Java3D wäre ja noch eine Alternative. Kann mir jemadn vor und Nachteile der beiden im 2D-Bereich nennen, welche Alternativen bleiben mir sonst noch?


----------



## Spacerat (7. Apr 2009)

Ich sag', eindeutig JOGL! JOGL ist (bis auf ein Paar Kleinigkeiten) eine direkte Umsetzung von OpenGL. Deswegen kann man bei JOGL (was man bei Java3D nicht kann) auch auf Ressourcen (z.B. Tutorials) zurückgreifen, die sich mit OpenGL in anderen Sprachen (z.B. VB oder C++) befassen. Eine Anlaufstelle für GL-Grundlagen sind z.B. die Neon Helium Tutorials


----------



## Evolver (7. Apr 2009)

Naja, das lernen ist nicht so das Problem, ich habe schon früher als ich noch C++ programmiert habe OpenGL eingesetzt, das sollte es ja nicht so schwer sein, wieder rein zu kommen.


----------



## Spacerat (7. Apr 2009)

Was in JOGL allerdings fehlt, sind 3D-Fonts. Zwar gibt es den TextRenderer aber der stellt auch nur Texturfonts zur Verfügung. Ich habe mir für die NeHe-Tuts in Anlehnung an "wgl" 'ne eigene erweiterung geschaffen, die auch 3D-Fonts unterstützt (ZIP-Archiv).
Na denn... wünsche frohes Schaffen.


----------



## Evolver (7. Apr 2009)

Was sind denn die Nachteile von Java3D gegenüber JOGL? Oder die Vorteile?


----------



## Spacerat (7. Apr 2009)

Nachteile von Java3D von rein technischer Natur sind mir nicht bekannt. Ich verwende es halt nicht bzw. nicht mehr. Bis zu der Version (1.5.0 beta von 2005) mit der ich noch etwas gemacht hatte konnte man dort z.B. noch keine Bumpmaps erstellen. Und wenn ich mir gerade den weiteren Verlauf an Versionsnummern (1.5.1) ansehe, scheinen die bei Java3D nicht wirklich voran zu kommen. Ist wohl inzwischen ein totes Gleis.
Der gravierendste Nachteil von Java3D dürfte es sein, das man bei Problemen stets auf Java3D spezifische Communities angewiesen ist, welche weitaus seltener sein dürften als vergleichbare OpenGL Communities. Man muss also nicht strickt nach "JOGL" suchen, sondern kann auch "OpenGL" verwenden. Bei "Java3D" ist man da doch sehr eingeschränkt.


----------



## Marco13 (7. Apr 2009)

Hm. Der Vergleich zwischen JOGL und Java3D ist ungefähr wie der vergleich zwischen einem Traktor und einem Formel-1-Rennwagen (nur sinngemäß, ohne dort irgendwelche Zuordnungen implizieren zu wollen). Man kann nicht sagen, was "besser" ist - es kommt auf das Ziel, und das Anwendungsbebiet an. 

JOGL ist - wie der Name schon sagt - eine Bibliothek für OpenGL unter Java. Java3D ist eine komplette Szenegraph-API. Wenn man eine Anwendung schreiben will, bei der man eine OBJ-Datei laden und anzeigen kann, und bei der bei Mausklicks auf die verschiedenen Teile des Objektes unterschiedliche Sounds abgespielt werden sollen, ist das mit Java3D vermutlich auch ohne detaillierte Kenntnisse in ... vielleicht ... (GANZ grob geraten) in 1-2 Wochen mit 2500 Zeilen Code erledigt. Wenn man das NUR mit JOGL machen wollte, könnte man da jeweils nochmal eine 0 dranhängen, und sich mit VertexBufferObjecst, GL-extensions & Co. rumschlagen...

So ein Argument wie das mit den BumpMaps ist im Prinzip richtig: Neuerungen (besonders hardwarnahe und sich schnell verändernde) brauchen eine Weile, bis sie über ein JSR ihren Weg in eine neuen Java3D-Release finden - bei JOGL sind die in kürze(st/er)er Zeit verfügbar. Allerdings gehen die Möglichkeiten auch mit Java3D inzwischen schon sehr weit - immerhin werden schon Shader unterstützt, mit denen man im Prinzip ja "alles" machen kann. 

Der Sprung von Java 1.4 auf 1.5 war schon ziemlich dramatisch. Die update-Intervalle ist dort vielleicht etwas länger, aber das hat schon seine Gründe...


----------



## Evolver (7. Apr 2009)

Marco13 hat gesagt.:


> JOGL ist - wie der Name schon sagt - eine Bibliothek für OpenGL unter Java. Java3D ist eine komplette Szenegraph-API. Wenn man eine Anwendung schreiben will, bei der man eine OBJ-Datei laden und anzeigen kann, und bei der bei Mausklicks auf die verschiedenen Teile des Objektes unterschiedliche Sounds abgespielt werden sollen, ist das mit Java3D vermutlich auch ohne detaillierte Kenntnisse in ... vielleicht ... (GANZ grob geraten) in 1-2 Wochen mit 2500 Zeilen Code erledigt. Wenn man das NUR mit JOGL machen wollte, könnte man da jeweils nochmal eine 0 dranhängen, und sich mit VertexBufferObjecst, GL-extensions & Co. rumschlagen...



Also ich schätze mal dieser Vorteil verliert sich, wenn man nur eine 2D-Anwendung als Ziel hat und die 3D-Bibliothek somit nur zur Ausgabe texturierter Quadrate "mißbraucht". (?)


----------



## Marco13 (7. Apr 2009)

Ziemlich sicher, ja. Da kann man mit JOGL sicher einfacher, dedizierter (ggf. effizienter) und kompakter was basteln, weil man ja garkeine Szenegraphen, View-Managemen und komplexen Geometrien braucht....


----------



## Landei (7. Apr 2009)

Eine andere Java-Bindung für OpenGL ist lwjgl. Aber ich habe keine Ahnung, wie die sich von JOGL unterscheidet.


----------



## Spacerat (7. Apr 2009)

LWJGL-Lightweight Java Game Library...
Das ist, wenn man so will, ein Zusammenschluss von JOGL und JOAL. Obgleich JOGL dort ein wenig anders implementiert zu sein scheint.


----------



## EgonOlsen (8. Apr 2009)

Spacerat hat gesagt.:


> LWJGL-Lightweight Java Game Library...
> Das ist, wenn man so will, ein Zusammenschluss von JOGL und JOAL. Obgleich JOGL dort ein wenig anders implementiert zu sein scheint.


JOGL versucht, OpenGL einen objektorientierten Anstrich zu verpassen. LWJGL tut dies nicht, dort ist alles statisch. Das ist noch etwas näher an "normalem" OpenGL dran. Was man lieber mag, muss man selber entscheiden. Ich verwende LWJGL und kann es guten Gewissens empfehlen.

Edit: Vielleicht als Alternative zu reinem LWJGL/JOGL einen Blick wert: Slick - 2D Game Library based on LWJGL


----------



## Evolver (9. Apr 2009)

Nun ich denke meine Entscheidung ist zu gunsten JOGL gefallen. Ich werde mich erstmal da ein bisschen einarbeiten. Danke für die Antworten.


----------



## Quaxli (9. Apr 2009)

EgonOlsen hat gesagt.:


> Edit: Vielleicht als Alternative zu reinem LWJGL/JOGL einen Blick wert: Slick - 2D Game Library based on LWJGL



Danke für den Tipp. Das muß ich mir zuhause mal ansehen (Die Seite ist hier bei mir leider gesperrt) 
Aber diese Seite von Kevin Glass ist sonst immer sehr lesenswert. :toll:


----------



## Evolver (9. Apr 2009)

Ich bin gerade an einem Punkt, der mich verwundert. Laut Website setzt JOGL doch auf OpenGL 2.0 auf!? Nun wollte ich eine Textur laden, deren Seitenlängen nicht 2^n ist und es funktioniert nicht. Aber unterstützt OpenGL nicht seit Version 2.0 Texturen beliebiger Größe?


----------



## Marco13 (9. Apr 2009)

Soweit ich weiß ist das eine der oben schon angesprochenen GL-Extensions, die nicht von allen Grafikkarten unterstützt werden (im Zweifelsfall ist die von der Grafikkarte unterstützte OpenGL-Version der beschränkende Faktor ... wenn die es nicht kann, kann sie es auch nicht, obwohl JOGL es vielleicht könnte....)


----------



## Evolver (9. Apr 2009)

Hm, ok danke. Dann werde ich wohl auf klassische Texturgrößen setzen müssen.


----------

