Einführung in Java - 3D

Einführung in Java # 32; 3D

T HE Java # 32; 3D-API ist eine Anwendungs-Programmierschnittstelle für das Schreiben von dreidimensionalen Grafikanwendungen und Applets verwendet. Es gibt Entwickler High-Level-Konstrukte für die Erstellung und 3D-Geometrie zu manipulieren und für die Strukturen zum Rendern dieser geometrischen Objekte verwendet werden. Anwendungsentwickler können sehr große virtuelle Welten beschreiben diese Konstrukte verwenden, die Java bieten # 32; 3D mit genügend Informationen, um diese Welten effizient zu machen.







Java # 32; 3D liefert Java "write once, run anywhere" Nutzen für Entwickler von 3D-Grafikanwendungen. Java # 32; 3D ist Teil der JavaMedia API-Suite, es auf einer breiten Palette von Plattformen zu machen. Es integriert auch gut mit dem Internet, weil Anwendungen und Applets, die Java geschrieben mit # 32; 3D-API-Zugriff auf den gesamten Satz von Java-Klassen haben.

die Java # 32; 3D-API schöpft seine Ideen aus vorhandener Grafik-APIs und von neuen Technologien. Java # 32; 3D-Low-Level-Grafik Konstrukte zu synthetisieren, die besten Ideen in Low-Level-APIs gefunden wie Direct3D, OpenGL, QuickDraw3D und XGL. In ähnlicher Weise synthetisieren seine höhere Ebene Konstrukte, die die besten Ideen in mehrer Szenengraph-basierten Systemen. Java # 32; 3D stellt einige Konzepte nicht allgemein als Teil der Grafikumgebung, wie 3D-Raumklang. Java # 32; 3D-Sound-Funktionen helfen, ein noch intensiveres Erlebnis für den Benutzer bereitzustellen.

Weitere wichtige Java # 32; 3D-Ziele sind

  • Geben Sie eine breite Palette an Funktionen für interessante 3D-Welten zu schaffen, durch das Bedürfnis, nicht-essentielle oder obskure Funktionen zu vermeiden. Funktionen, die auf der Java schichtet werden könnten # 32; 3D wurden nicht berücksichtigt.
  • Geben Sie ein High-Level-objektorientiertes Programmierparadigma, mit dem Entwickler schnell anspruchsvolle Anwendungen und Applets bereitstellen kann.
  • Bereitstellung von Unterstützung für die Laufzeitlader. Dies ermöglicht es Java # 32; 3D eine Vielzahl von Dateiformaten, wie herstellerspezifische CAD Formaten Austauschformate, VRML 1.0 und VRML 2.0 unterzubringen.

    1.2 Programmierparadigma

    Java # 32; 3D ist eine objektorientierte API. Anwendungen konstruieren einzelne Grafikelemente als separate Objekte und verbinden sie zusammen in eine treelike Struktur ein Szenengraph genannt. Die Anwendung manipuliert diese Objekte ihre vordefinierten Accessor Verwendung Mutator und der Knoten-Verknüpfungsverfahren.

    1.2.1 Die Scene Graph Programmiermodell

    Java # 32; 3D-Szene-Graph-basiertes Programmiermodell bietet einen einfachen und flexiblen Mechanismus für die Darstellung und Szenen zu machen. Der Szenengraph enthält eine vollständige Beschreibung der gesamten Szene oder ein virtuelles Universum. Dazu gehört auch die geometrischen Daten, die Attributinformationen und die Anzeige von Informationen erforderlich, um die Szene von einem bestimmten Standpunkt aus zu machen. Kapitel # 32; 2, "Scene Graph Basics" bietet weitere Informationen über die Java # 32; 3D-Szenengraph-Programmiermodell.

    die Java # 32; 3D-API verbessert auf vorherigen Grafik-APIs von vielen der Buchhaltung zu beseitigen und die Programmierung Aufgaben, dass diese APIs verhängen. Java # 32; 3D ermöglicht es der Programmierer über geometrische Objekte zu denken, anstatt über Dreiecken-über die Szene und ihre Zusammensetzung, anstatt darüber, wie der Rendering-Code zu schreiben, für die Szene effizient angezeigt werden.

    1.2.2 Darstellungsmodi

    Java # 32; 3D umfasst drei verschiedene Darstellungsmodi: immediate-Modus beibehalten Modus und einkompilierte beibehalten Modus (siehe Kapitel # 32; 12, "Ausführung und Rendering-Modell"). Jede nachfolgende Rendering-Modus ermöglicht es Java # 32; 3D mehr Freiheit in einer Anwendung Ausführung zu optimieren. Die meisten Java # 32; 3D-Anwendungen werden die Vorteile der Bequemlichkeit und Leistungsvorteile nehmen möchten, dass die zurückgehaltenen und einkompilierte beibehalten Modi bieten.

    1.2.2.1 Immediate Mode

    Immediate-Modus lässt wenig Raum für die globale Optimierung in der Szenengraph-Ebene. Auch so, Java # 32; 3D hat das Niveau der Abstraktion erhöht und beschleunigt unmittelbaren Modus Rendering auf einer pro-Objekt-Basis. Eine Anwendung muss ein Java bieten # 32; 3D-Draw-Verfahren mit einem vollständigen Satz von Punkten, Linien oder Dreiecken, die durch die Hochgeschwindigkeits Java dann gerendert werden # 32; 3D-Renderer. Natürlich kann die Anwendung diese Listen von Punkten, Linien, Dreiecken oder in irgendeiner Art und Weise baut sie wählt.

    1.2.2.2 Retained Mode

    1.2.2.3 Compiled-Retained Mode

    1.2.3 Extensibility

    Java # 32; 3D tut Haken sorgen für Java Misch # 32; 3D-gesteuerte Szenengraph-Rendering und benutzergesteuerte Rendering mit Java # 32; 3D unmittelbare Modus-Konstrukte (siehe Abschnitt # 32; 13.1.2, "Mixed-Mode-Rendering"). Alternativ kann die Anwendung Java stoppen # 32; 3D-Renderer und alles tun, seine Zeichnung in unmittelbarem Modus (siehe Abschnitt # 32; 13.1.1, "reine Immediate-Mode Rendering").

    Behaviors erfordert Anwendungen, die das Verhalten Objekt zu erweitern und ihre Methoden mit Benutzern geschriebenen Java-Code zu überschreiben. Diese erweiterten Objekte sollten Verweise auf diese Szenengraph Objekte enthalten, die sie während der Laufzeit manipulieren. Kapitel # 32; 9, "Behaviors und Interpolatoren", beschreibt Java # 32; 3D-Verhalten Modell.

    1.3 High Performance

    Darüber hinaus lassen sich die Details zu Java von Rendering # 32; 3D erlaubt es die Darstellung der zugrunde liegenden Hardware abzustimmen. Zum Beispiel führte die strenge Renderingordnung entspannt durch andere APIs erlaubt parallel traversal sowie parallel Rendering. Zu wissen, welche Teile der Szene Graph kann zur Laufzeit nicht geändert werden können Java # 32; 3D den Baum, nicht transformiert Geometrie oder stellen die Geometrie in einem nativen Hardware-Format, ohne die Notwendigkeit zu glätten, die ursprünglichen Daten zu halten.







    1.3.1 Layered Umsetzung

    Neben Optimierungen an der Szenengraph-Ebene, einer der wichtigeren Faktoren, die bestimmt, die Leistung von Java # 32; 3D ist die Zeit, die die sichtbare Geometrie zu machen. Java # 32; 3D-Implementierungen sind Schicht Vorteil der nativen, Low-Level-API zu nehmen, die auf einem bestimmten System zur Verfügung steht. Insbesondere erwarten wir, dass Java # 32; 3D-Implementierungen, die Direct3D verwenden, OpenGL und QuickDraw3D werden verfügbar. Dies bedeutet, dass Java # 32; 3D-Rendering wird über die gleiche breite Palette von Systemen beschleunigt werden, die von diesem untergeordneten APIs unterstützt werden.

    1.3.2 Ziel-Hardware-Plattformen

    Java # 32; 3D bei einer breiten Palette von 3D-fähiger Hardware und Software-Plattformen, von Low-Cost-PC-Spiel-Karten und Software-Renderer am unteren Ende, durch Midrange-Workstations, die ganzen Weg bis zu sehr hohen Leistungs spezialisiert 3D-Bild richtet Generatoren.

    Java # 32; 3D-Implementierungen werden voraussichtlich nützlich Rendering Raten auf den meisten modernen PCs zur Verfügung zu stellen, vor allem solche mit 3D-Grafik-Beschleuniger-Karten. Auf Midrange-Workstations, Java # 32; 3D wird erwartet, dass Anwendungen zu schaffen, mit nahezu voller Geschwindigkeit Hardware-Leistung.

    Schließlich Java # 32; 3D ist als die zugrunde liegende Hardware-Plattformen Erhöhung der Geschwindigkeit über die Zeit zu skalieren. 3D-PC-Spiel-Beschleuniger von morgen vor komplexere virtuellen Welten als hochpreisige Arbeitsplätze von einigen Jahren unterstützen. Java # 32; 3D ist bereit, diese Erhöhung der Hardware-Leistung gerecht zu werden.

    1.4 Unterstützung für das Bauwesen und Applets

    Java # 32; 3D rechnet weder noch direkt unterstützt alle möglichen 3D-Bedarf. Stattdessen bietet es Unterstützung für diese Funktionen durch Java-Code hinzufügen.

    In ähnlicher Weise wird VRML Lader analysieren und VRML-Dateien übersetzen und die entsprechende Java generieren # 32; 3D-Objekte und Java-Code erforderlich, der Inhalt der Datei zu unterstützen.

    1.4.1 Browser

    Das heutige Internet-Browser unterstützen 3D-Inhalte durch eine solche Weitergabe von Daten Plug-in 3D-Viewer, die in einem eigenen Fenster zu machen. Es wird erwartet, dass im Laufe der Zeit, die Anzeige von 3D-Inhalten in die Haupt-Browser-Anzeige integriert werden wird. In der Tat zeigen einige der heutigen 3D-Browser 2D-Inhalte als 2D-Objekte in einer 3D-Welt.

    1.4.2 Spiele

    Entwickler von 3D-Spiele-Software haben in der Regel jeden letzte Quäntchen Leistung aus der Hardware zu auswringen versucht. Historisch gesehen möglich, die beste Leistung sie durchaus bereit gewesen hardwarespezifische, nonportable Optimierungen zu verwenden, zu erhalten. Als solche in der Vergangenheit Spiele-Entwickler haben auf Programm unter dem Niveau von leicht zu bedienende Software wie Java neigten # 32; 3D. Allerdings ist der Trend in der 3D-Spielen heute Allzweck- 3D-Hardware-Beschleuniger zu nutzen und in Rendering weniger „Tricks“ zu verwenden.

    1.5 Überblick über Java # 32; 3D-Objekthierarchie

    Java # 32; 3D definiert mehrere Basisklassen, die einen Szenengraph verwendet werden, um zu konstruieren und zu manipulieren und die Anzeige und Rendering zu steuern. Zahl # 32; 1-1 zeigt die Gesamtobjekthierarchie von Java verwendet, # 32; 3D. Die folgenden Kapitel liefern mehr Details für spezifische Teile der Hierarchie.

    1.6 Strukturierung des Java # 32; 3D-Programm

    Dieser Abschnitt zeigt, wie ein Entwickler könnte eine Java-Struktur # 32; 3D-Anwendung. Die einfache Anwendung in diesem Beispiel wird einen Szenengraph, der ein Objekt in der Mitte eines Fensters zieht und dreht das Objekt um seinen Mittelpunkt.

    1.6.1 Java # 32; 3D-Anwendung Scene Graph

    Der Szenengraph für die Beispielanwendung ist in Abbildung # 32; 1-2.

    Der Szenengraph besteht aus Überbau Komponenten-ein Virtual Objekt und eine Locale Objekt-und eine Reihe von Zweig Graphen. Jeder Zweig ist ein Graph Subgraphen, die von einem Knoten Branch verwurzelt ist, die mit dem Überbau angebracht ist. Weitere Informationen finden Sie in Kapitel 32 #, 2, "Scene Graph Basics"

    Ein Virtual-Objekt definiert einen Namen Universum. Java # 32; 3D erlaubt die Schaffung von mehr als einem Universum, obwohl die überwiegende Mehrheit der Anwendungen verwenden nur eine. Das Virtual Objekt stellt eine Erdung für Szenengraphen. alle Java # 32; 3D-Szenengraphen zu einem Virtual Objekt verbinden muss angezeigt werden. Weitere Informationen finden Sie in Kapitel 32 #, 3 "Scene Graph Überbau"

    Der Szenengraph selbst beginnt mit dem Branch Knoten (siehe Abschnitt # 32; 4.2, "Branch Node"). A Branch dient als die Wurzel eines Untergraphen, ein Zweig Graph bezeichnet. der Szenengraph. Es können nur Objekte Branch Locale Objekte anhängen.

    In diesem Beispiel gibt es zwei Zweig Graphen und damit zwei Knoten Branch. An der linken Seite Branch zwei Subgraphen. Ein Teilgraph besteht aus einem vom Benutzer erweitert Behavior Astknoten. Der Knoten enthält Behavior Java-Code zum Manipulieren der Transformationsmatrix mit der Objektgeometrie zugeordnet ist.

    Das anderes in dieser Subgraph Branch besteht aus einer Transform Knoten, der die Position (relativ zur locale), Ausrichtung und Maßstab der geometrischen Objekte in der virtuellen Welt gibt. Ein einziges Kind, ein Shape3D Blattknoten, bezieht sich auf zwei Komponentenobjekte: ein Geometrieobjekt und ein Aussehen Objekt. Das Geometrie-Objekt beschreibt die geometrische Form eines 3D-Objekts (ein Würfel in unserem einfachen Beispiel). Das Aussehen Objekt beschreibt die Darstellung der Geometrie (Farbe, Textur, Material Reflexionseigenschaften und so weiter).

    Die rechte Branch hat eine einzelne Subgraphen, die aus einer Transform Knoten und einem Blattknoten ViewPlatform besteht. Die Transform gibt die Position (relativ zur locale), Ausrichtung und Maßstab der ViewPlatform. Dieser transformierte ViewPlatform Objekt definiert die Sicht des Endbenutzers innerhalb des virtuellen Universums.

    Schließlich wird die ViewPlatform durch ein View-Objekt referenziert, die die Szene aus der Sicht des ViewPlatform zu machen benötigt alle Parameter angibt. Auch durch das View-Objekt verwiesen wird, sind andere Objekte, die Informationen, wie die Zeichenfläche, in welche enthalten Java # 32; 3D macht, den Bildschirm, der die Leinwand, und Informationen über die physikalische Umgebung enthält.

    1.6.2 Rezept für eine Java # 32; 3D-Programm

    Die folgenden Schritte werden durch das Beispiel Programm genommen, um die Szenengraph-Elemente zu erstellen und diese miteinander zu verbinden. Java # 32; 3D wird dann die Szenengraph machen und die Grafiken auf dem Bildschirm in einem Fenster angezeigt werden:

      1. Erstellen Sie ein Canvas3D Objekt und fügen Sie es dem Applet-Panel.

    2. Erstellen Sie eine Branch als die Wurzel der Szene Zweig Graph.

    3. Konstruieren einer Shape3D Knoten mit einem Transform Knoten darüber.

    4. Bringen Sie ein RotationInterpolator Verhalten an den Transform.

    5. Rufen Sie den Universum-Builder Utility-Funktionen wie folgt vorgehen:

      ein. Richten Sie ein virtuelles Universum mit einem einzigen hochauflösenden Locale (siehe Kapitel 32 #, 2, "Scene Graph Basics").

    b. Erstellen Sie die PhysicalBody, PhysicalEnvironment, Ansicht und ViewPlat-Formularobjekte.

    c. Erstellen Sie eine Branch als die Wurzel der Aussichtsplattform Zweig Graph.

    d. Legen Sie die Aussichtsplattform Zweig Graph in das Locale.

6. Legen Sie die Szene Zweig Graphen in den Lokalisierungs-Universum Builder.

die Java # 32; 3D-Renderer dann beginnt in einer Endlosschleife läuft. Der Renderer führt konzeptionell die folgenden Operationen:

1.6.3 HelloUniverse: Ein Beispiel Java # 32; 3D-Programm

Hier sind Code-Fragmente aus einem einfachen Programm, HelloUniverse.java. das schafft einen Würfel und ein RotationInterpolator Verhaltensobjekt, dass der Würfel mit einer konstanten Rate von / 2 Radianten pro Sekunde dreht.

1.6.3.1 HelloUniverse Klasse

Die HelloUniverse Klasse, auf der nächsten Seite, erstellt die Zweig grafische Darstellung, die den Würfel und das RotationInterpolator Verhalten enthält. Es fügt dann diesen Zweig Diagramm, um die Locale Objekt durch das UniverseBuilder Dienstprogramm erzeugt.

1.6.3.2 UniverseBuilder Klasse

Die UniverseBuilder Klasse etabliert und initialisiert Java # 32; 3D virtuelle Universum, Locale und Betrachten von Objekten und baut die Aussichtsplattform Zweig Graph. Der Beispielcode unten ist eine vereinfachte Version des UniverseBuilder, die als Teil des Java geliefert werden # 32; 3D-Utility-Paket.

1.6.3.3 ColorCube Klasse

Die ColorCube Klasse erstellt eine Shape3D Knoten, den die Geometrie für einen unbeleuchteten, farbigen Würfel enthält.

Java 3D-API-Spezifikation







In Verbindung stehende Artikel