3D-Grafikprogrammierung in Java, Teil 3: OpenGL

Es ist eine Weile her seit unserem letzten Teil dieser Reihe über 3D-Grafikprogrammierung in Java (mehr dazu am Ende dieser Spalte). Hier ist eine kurze Auffrischung darüber, was wir zuletzt besprochen haben und wo wir aufgehört haben.

In den beiden vorherigen Spalten (siehe Ressourcen) haben wir Java 3D untersucht. Wir diskutierten statische Inhalte und kleine Szenen, verwendeten dann größere Szenendiagramme und bauten Interaktivität in einige grundlegende 3D-Welten ein.

Jetzt, da Sie ein wenig über die Verwendung von Java 3D wissen, ist es an der Zeit, den Java 3D-Ansatz für 3D-Grafiken mit dem führenden Grafik-API-Anwärter OpenGL zu vergleichen und gegenüberzustellen.

Bitte beachten Sie, dass dieser Artikel ursprünglich Code-intensiv sein sollte, aber die bahnbrechende Entscheidung von Arcane Technologies bezüglich der Magier-Bindung (siehe unten) die Entfernung der Codebeispiele erforderlich machte. Ich hoffe, dass der Inhalt dieses Artikels für eine zukünftige Java-OpenGL-Bindung angepasst werden kann, die vom OpenGL-Konsortium noch nicht verfügbar ist.

In jedem Fall habe ich mich bemüht, alle relevanten und nützlichen OpenGL-bezogenen Referenzen und URLs in den Ressourcen am Ende dieser Spalte anzugeben. Wenn Sie sich näher mit Java-OpenGL befassen möchten, empfehle ich Ihnen dringend, diese Referenzen zu überprüfen.

Java-OpenGL-Vergleich mit Java 3D

In früheren Abschnitten zu Java 3D habe ich eine Liste der Stärken und Schwächen der Verwendung von Java 3D für Grafikanwendungen bereitgestellt. Lassen Sie uns diese Liste wiederholen, aber schauen wir uns dazu die Stärken und Schwächen von Java-OpenGL-basierten Lösungen anstelle von Java 3D-basierten Lösungen an.

Stärken der Verwendung von OpenGL (und, im weiteren Sinne und wo angegeben, Java-OpenGL-Bindungen):

  • OpenGL bietet ein prozedurales Grafikmodell

    Dies entspricht genau vielen der Algorithmen und Methoden, die Grafikprogrammierer in der Vergangenheit verwendet haben. Das prozedurale Modell ist für viele erfahrene 3D-Grafikliebhaber gleichzeitig intuitiv und unkompliziert.

  • OpenGL bietet direkten Zugriff auf die Rendering-Pipeline

    Dies gilt für alle verschiedenen Sprachbindungen, einschließlich der meisten Java-Bindungen. Mit OpenGL können Programmierer direkt festlegen, wie Grafiken gerendert werden sollen. Man muss nicht nur andeuten und Wunsch als mit Java 3D, einem festschreibt.

  • OpenGL ist auf jede erdenkliche Weise optimiert

    OpenGL ist in Bezug auf Hardware und Software sowie gezielte Plattformen optimiert, die von den billigsten PCs und Spielekonsolen bis zu den hochwertigsten Grafik-Supercomputern reichen.

  • Anbieter aller Arten von 3D-Grafikhardware unterstützen OpenGL

    OpenGL ist

    das

    Standard, an dem Hardwareanbieter ihre Grafiktechnologie messen, aber keine. Als Microsoft sich SGI im Rahmen der Fahrenheit-Initiative angeschlossen hat, wurde vielen zunehmend klar, dass dies tatsächlich die indirekte Anerkennung von Microsoft ist, dass OpenGL die API-Kriege für 2D- und 3D-Grafiken gewonnen hat.

Auf der anderen Seite ist nichts perfekt. OpenGL und sicherlich Java-OpenGL-Bindungen weisen einige erhebliche Mängel auf:

  • Die Stärken des prozeduralen Ansatzes zur Grafikprogrammierung sind für viele Java-Programmierer gleichzeitig eine Schwäche

    Für relativ neue Programmierer, von denen viele möglicherweise ihre erste formale Programmieranweisung in Java mit objektorientierten Methoden erhalten haben, passt die prozedurale Methode von OpenGL nicht gut zu einem objektorientierten Ansatz und einer guten technischen Praxis.

  • Die OpenGL-Optimierungen vieler Anbieter sollen die Auswahl an Hardware verringern

    Es liegt im Interesse jedes Anbieters, proprietäre Erweiterungen zu erstellen und proprietäre Optimierungen vorzunehmen, um mehr von seiner eigenen Hardware zu verkaufen. Wie bei allen Hardwareoptimierungen müssen Sie beschleunigerspezifische OpenGL-Optimierungen verwenden, mit dem Verständnis, dass jede Optimierung für eine Plattform die Portabilität und Leistung für mehrere andere verringert. Die allgemeineren Optimierungen von Java 3D zielen hauptsächlich darauf ab, die Portabilität von Java 3D-Anwendungen zu maximieren.

  • Während C-Schnittstellen zu OpenGL allgegenwärtig sind, sind Java-Schnittstellen noch nicht standardisiert und nicht allgemein verfügbar

    Das Magician-Produkt von Arcane Technologies war bis vor kurzem auf dem Markt, um dieses Portabilitätsproblem zu ändern, aber mit seinem Niedergang geht zumindest derzeit ein Großteil der plattformübergreifenden Geschichte für Java-OpenGL verloren. Mehr dazu weiter unten.

  • Die Darstellung der inneren Details des Renderprozesses durch OpenGL kann ansonsten einfache 3D-Grafikprogramme erheblich erschweren

    Leistung und Flexibilität gehen zu Lasten der Komplexität. In den schnellen Entwicklungszyklen der heutigen Technologiewelt ist Komplexität an und für sich etwas, das nach Möglichkeit vermieden werden sollte. Das alte Sprichwort über Fehler ist wahr: Je mehr Codezeilen, desto mehr Fehler (im Allgemeinen).

Wie Sie an den Vor- und Nachteilen für OpenGL-basierte Ansätze erkennen können, ist Java-OpenGL in vielen Bereichen, in denen Java 3D schwach ist, stark. OpenGL bietet Programmierern den einfachen Zugriff auf den Rendering-Prozess, den Java 3D explizit vermeidet, und OpenGL ist derzeit auf weit mehr Plattformen als Java 3D verfügbar (abgesehen von Magician). Diese Flexibilität ist jedoch mit einem potenziellen Preis verbunden: Programmierer haben viel Raum für Optimierungen, was umgekehrt bedeutet, dass sie viel Raum haben, um Dinge zu vermasseln. Java 3D verfügt über eine integrierte Optimierung und ein einfacheres Programmiermodell, das sich insbesondere für Programmierer als nützlich erweisen kann, die neu in Java, 3D-Grafik oder vernetzte und verteilte Grafikprogrammierung sind.