Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java3D TM und Direct3D® Florian Heidinger Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel.

Ähnliche Präsentationen


Präsentation zum Thema: "Java3D TM und Direct3D® Florian Heidinger Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel."—  Präsentation transkript:

1 Java3D TM und Direct3D® Florian Heidinger Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel

2 Java3D TM und Direct3D® Florian Heidinger Treffen der Generationen 90er Jahre 3D-API der 4. Generation Direct3D, OpenGL Java3D 1997 Florian Heidinger 3D-APIs der 3. Generation

3 Java3D TM und Direct3D® Florian Heidinger Kein altes Eisen: die 3. Generation Direct3D Entwickelt durch Microsoft als Bestandteil von DirectX Lauffähig nur unter Windows- Betriebssystemen Low-Level-API Hardware- transparenz (aus Sicht des Anwendungs- entwicklers) Programmiersprachen: C/C++, MS Java, VisualBasic COM-Objekte und Schnittstellen Hardwarebe- schleunigung und Emulation Vorwiegend prozeduraler Programmaufbau Laufzeitumgebung ist Bestandteil des Betriebsyst.

4 Java3D TM und Direct3D® Florian Heidinger Ein neuer Stern am Graphik-Himmel Java3D Entwickelt durch Unternehmens- allianz (Sun, Intel, IBM, Apple) Write Once, Run Anywhere- Paradigma High-Level-API Programmier- sprachen: Java Java-Pakete (Packages) und Laufzeitbibliothek Nutzung einer Low- Level-API zur Durchführung der Zeichenaufträge objektorientierter API- und Szenenaufbau Szenengraph

5 Java3D TM und Direct3D® Florian Heidinger Die Architektur verbindet Hardware und Hardware-Treiber Direct3D API Direct3D-Anwendung OpenGL Java Virtual Machine Java3D-Anwendung Java3D API

6 Java3D TM und Direct3D® Florian Heidinger Schritte zum Erfolg in Java3D 1.Fenster und Canvas3D-Objekt erzeugen Darstellungsfläche schaffen und Zeichengerät auswählen bzw. initialisieren 2.Ansichtsgraph erzeugen (SimpleUniverse) Positionierung und Ausrichtung des Betrachters 3.Inhaltsgraph erzeugen Definition des Szeneninhaltes 4.Kompilieren der Teilgraphen Interne optimale Form der Szene bilden 5.Hinzufügen zum Locale-Objekt Die meisten der Schritte besitzen Entsprechungen in einer Direct3D-Anwendung

7 Java3D TM und Direct3D® Florian Heidinger Fenster unter Windows mit Java Nutzung der Klassen des AWT (Abstract Windowing Toolkit), um Fenster zu erzeugen LayoutManager, um die Darstellungsfläche des Frame in verschiedene Bereiche einzuteilen Importieren entsprechender AWT- und Layout-Manager Klassen Erstellen eines Frame-Objekts, dem primäre Fenstereigenschaften wie Breite und Höhe als Konstruktor-Parameter übergeben werden (sekundäre Eigenschaften über SET-Methoden einstellbar) Instanziierung eines LayoutManager-Objekts Zuweisen des Layouts über die setLayout()-Methode

8 Java3D TM und Direct3D® Florian Heidinger Fenster unter Windows in Direct3D Aufrufe gegen die Windows-API (Win32-API), um ein geeignetes Fenster zu erzeugen Inkludieren der windows.h-Headerdatei (Struktur-, Konstanten- und Methodendefinitionen) Drei Schritte: 1. Fensterobjekt (Schablone) für neue Fenster (WNDCLASSEX-Struktur) definieren und mit Werten füllen = sekundäre Fenstereigenschaften festlegen 2. Fensterobjekt bei Windows registrieren 3. Fenster durch Aufruf von CreateWindowEx() erzeugen (Parameter sind primäre Fenstereigenschaften, sowie der Name des Fensterobjekts) Keine LayoutManager unter Windows

9 Java3D TM und Direct3D® Florian Heidinger Canvas3D eine mysteriöse Klasse Erzeugen eines Canvas3D-Objektes mit Hilfe eines der beiden Konstruktoren Hinzufügen zur Darstellungsfläche des Fensters durch add- Methode Java 3D Implementierung initialisiert die Low-Level API, um Canvas3D Darstellungsfläche zu schaffen: –DoubleBuffer und Z-Buffer –16 Bit-Farbtiefe (True-Color) –Viewport entsprechend der Größe des Layoutbereichs in Pixeln Definition einer perspektivische Projektion

10 Java3D TM und Direct3D® Florian Heidinger Initialisieren von Direct3D DIRECT3D8 LPDIRECT3D8 Direct3DCreate8() DIRECT3D8 DIRECT3D- DEVICE8 LPDIRECT3D- DEVICE8 COM-System CreateDevice()

11 Java3D TM und Direct3D® Florian Heidinger Ansichtsgraph in Java3D Benutzerposition und Blickrichtung Verwendung des SimpleUniverse mit Positionierung des Benutzers im Punkt (0.0, 0.0, 2.41) und Blickrichtung in negative Z-Richtung Standard-Ansichtstransformation Animation der Benutzerposition durch eine erweiterte Welttransformation World-View-Matrix (Behaviors werden in der Regel Transformationsgruppen im Inhaltsgraphen zugeordnet) –Rotationen um gleiche Achse und Winkel, jedoch in entgegengesetzter Rotationsrichtung –Translationen mit entgegengesetzt gerichtetem Vektor –Transformation mit allen Weltmatrizen der Szenenobjekte nach dem LIFO-Prinzip multiplizieren

12 Java3D TM und Direct3D® Florian Heidinger Direct3D-Rendering Pipeline VertexBuffer Welttransformation Ansichtstransformation Projektionstransformation Vertex-Shader VertexAssembly-Prozess Farbe, Texturkoor- dinaten,... Pixel-Shader Material, Textur- graphik,... Alpha, Stencil und Tiefentests Frame- Buffer

13 Java3D TM und Direct3D® Florian Heidinger Ansichts- und Projektions- transformation in Direct3D Projektionsmatrix für perspektivische oder orthogonale Projektion mit Hilfe von Bibliotheksfunktionen (D3DXMatrixPerspectiveLH()) Konstante Ansichtsmatrix zum Initialisierungszeitpunkt auch hier Nutzung einer BibliotheksfunktionenD3DXMatrixLookAtLH(), mit Angabe des Kamerastandorts, Zielpunkt und Kameralagevektor DIRECT3DDEVICE8-Objekt ist Bindeglied zwischen Anwendung und Rendering-Pipeline Zentrale Bedeutung in der Direct3D-Programmierung Erzeugte Matrizen über setTransform()-Methode des DIRECT3DDEVICE8-Objektes in die Rendering-Pipeline einstellen

14 Java3D TM und Direct3D® Florian Heidinger Inhaltsgraph in Java3D

15 Java3D TM und Direct3D® Florian Heidinger Inhaltsdefintion einer Szene in Direct3D Ablegen von Daten in Strukturen die Strukturelemente besitzen dabei weitgehende Übereinstimmung mit Klassenvariablen in Java3D, z. B. Material, Lichtquellen, etc. Vertextformat flexibel (FVF) Geometriedaten als Strukturarray in VertexBuffer-Objekte speichern Direct3D verwendet linkshändiges Koordinatensystem Anpassung der Geometriedaten und / oder Ansichtstransformation ist bei der Ausführung einer Java3D-Anwendung erforderlich

16 Java3D TM und Direct3D® Florian Heidinger Links- und rechtshändiges Koordinatensystem Java3D (rechtshändiges Koordinatensystem) V0 V1V2 Direct3D (linkshändiges Koordinatensystem) V0 V1V2 Reihenfolge der Raumpunkte invertieren Zusätzlich Skalierung der Ansichtstransformationsmatrix um den Faktor –1 in Z-Richtung

17 Java3D TM und Direct3D® Florian Heidinger Kompilieren des Szenengraphen 1. Zusammenfassung von Transformationsgruppen ohne gesetztes Capability- Bit 2. Kombination von Shape3D-Objekten, die Nachfolger einer gemeinsamen Transformationsgruppe sind und das gleiche Appearance-Objekt referenzieren optimierte interne Form des Szenengraphen

18 Java3D TM und Direct3D® Florian Heidinger Der Java3D Renderer Nachdem alle im in der internen Form des Szenengraphen definierten Objekte instanziiert und initialisiert wurden, kann der Java3D Renderer gestartet werden StateOrdered-Rendering: Zeichenfolge, bei der zwischen den Zeichenvorgängen zweier Objekte möglichst wenige Statusänderungen in der Rendering-Pipeline der Low-Level API durchgeführt werden müssen. while(true) { Benutzereingaben verarbeiten If (Anwendungsende) break Verhalten bearbeiten (Welttrans.) Szenengraph traversieren und sichtbare Objekte an die Direct3D API übergeben / zeichnen } while(true) { Benutzereingaben verarbeiten If (Anwendungsende) break Verhalten bearbeiten (Welttrans.) Szenengraph traversieren und sichtbare Objekte an die Direct3D API übergeben / zeichnen }

19 Java3D TM und Direct3D® Florian Heidinger Zeichnen der Objekte in Direct3D Das Zeichnen geschieht in der Hauptschleife derWinMain-Methode ähnliche Struktur, wie der Java3D Renderer Zunächst Verarbeitung der an das Fenster der Anwendung gerichteten Nachrichten in einer Callback-Prozedur Falls in einem Durchlauf keine Nachrichten zu verarbeiten sind, kann der eigentliche Zeichenvorgang stattfinden, der dem DIRECT3DDEVICE8-Objekt durch BeginScene() und EndScene() angezeigt wird Zeichenfolge in Direct3D vollständig durch den Benutzer spezifiziert (vor dem Aufruf der DrawPrimitive()-Methode Rendering-Pipeline mit den richtigen Geometriedaten (VertexBuffer), der Welttransformationsmatrix, Textur, Material usw. versorgen)

20 Java3D TM und Direct3D® Florian Heidinger Optimale Zeichenfolge 1. Gruppieren von Objekten mit gleicher Textur Das Nach- bzw. Umladen von Texturen aus dem Hauptspeicher ist aufwendigste Operation 2. Gruppieren von Objekten mit anderen Texturen aber gleicher Geometrie 3. Gruppieren von Objekten mit anderen Texturen und Geometrien aber gleicher Welttransformation oder gleichem Material Auf die Beispielanwendung bezogen sollten also z. B. zunächst die Pyramidenseitenflächen beider Pyramiden und erst anschließend die beiden Bodenflächen gezeichnet werden (oder umgekehrt)

21 Java3D TM und Direct3D® Florian Heidinger Aller Anfang ist schwer ! Komplexe API, die sich dem Einsteiger in die Graphikprogrammierung nur schwer erschließt Erhöhter zeitlicher Aufwand und mehrfaches an benutzerdefiniertem Programmcode im Vergleich zu OpenGL oder Java3D Viel Erfahrung erforderlich, um eine annährend optimale Zeichenfolge von geometrischen Objekten zu implementieren Zahlreiche hilfreiche Funktionen wie Normalen- und Texturkoordinaten-Generatoren fehlen Bietet dem fortgeschrittenen Benutzer jedoch weitere, von Java3D bis jetzt nicht unterstützte Funktionen wie Multitexturing, Partikeleffekte uvm. an

22 Java3D TM und Direct3D® Florian Heidinger Literatur(1) Java3D: Bouvier, DennisThe Java3D Tutorial – Kapitel 1-7 (1999) Subra, Mohan Java Markets Whitepaper (1998) Sun Microsystems, The Java3D API - Technical Whitepaper (1997) Java 3D API Collateral – Performance Guide (2002) Java 3D Programming: A Technical Overview (1998) 3D API

23 Java3D TM und Direct3D® Florian Heidinger Literatur(2) Direct3D: Dunlop, RobertTeach Yourself DirectX 7 in 24 Hours (1998) Microsoft, DirectX 8.0 Documentation (Visual C++) (2000) Zerbst, Stefan3D Graphik- Programmierung und Spiele-Programmierung mit DirectX (2002)


Herunterladen ppt "Java3D TM und Direct3D® Florian Heidinger Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel."

Ähnliche Präsentationen


Google-Anzeigen