Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel

Slides:



Advertisements
Ähnliche Präsentationen
Computer Graphics Shader
Advertisements

Konzeptioneller Vergleich von VRML, Java3D und OpenGL hinsichtlich ihrer Eignung zur Erstellung von Animationen von Christian Stein.
der Universität Oldenburg
Animation in Java 3D Ausarbeitung im Seminar Java 3D
Willkommen zu Vorlesung+Praktikum Graphische Datenverarbeitung
Application Programming Interface Graphische Datenverarbeitung
Linien, Flächen & geometrische Figuren von Mario Linge
Kapitel 4 Datenstrukturen
Grundlagen der Geometrie
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Sequenzdiagramm.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Java: Objektorientierte Programmierung
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
Java: Dynamische Datentypen
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Ein Beispiel in Java.
OGRE Object-Oriented Graphics Rendering Engine Szenen-orientierte, flexible 3D Engine in C++ Hardware-beschleunigte 3D Grafiken Unterstützt Direct3D und.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Java3d „Licht und Material“
Programmieren mit JAVA
OpenGL mit Delphi Allgemeines OpenGL-Funktionsbezeichnungen
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
Special Effects Realistischeres Rendern einer Scene.
1 Teil 4 Übung: Uhr. 2 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem eine einfache Uhr simuliert.
1 Dienstbeschreibung mit DAML Ein graphischer Editor für DAML - Ting Zheng Betreuer: Michael Klein, Philipp Obreiter.
FH-Hof Konfiguration eines Universums Richard Göbel.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Java programmieren mit JavaKara
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
Übersicht Motivation Konzeption Umsetzung/ Implementierung
AWT und JFC Abstract Windowing Toolkit
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
XNA 3D Tutorial Anzeigen eines Objektes. Inhalt Lernen Sie, wie Sie Modelle implementieren. Initializing Lernen Sie, wie Sie Modelle aus der Content Directory.
Einführung in die Programmiersprache Java
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Computergraphische Visualisierungs- verfahren für 3D-Stadtmodelle
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
Java für Fortgeschrittene
Verhalten von Objekten in der Szene
Ganzheitliches Projekt-, Ressourcen- und Qualitätsmanagement 1 Reports und AddOns Auf den folgenden Seiten wird Ihnen die Funktionsweise der Reports und.
Camera, Lights, Action… Dirk Primbs Developer Evangelist
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Präsentation der Diplomarbeit:
Vortrag: Frames & Javascript.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Erfahrungen mit Microsoft DirectX 8 W. Krug, April 2002.
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Die Welt der Shader Universität zu Köln WS 14/15 Softwaretechnologie II (Teil 1) Prof. Dr. Manfred Thaller Referent: Lukas Kley Fortgeschrittene Techniken.
Möglichkeiten der Visualisierung
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Stefan Röttger Universität Stuttgart (VIS). Überblick 1. Motivation 2. Shadow Volumes [Crow77] 3. Verfahren ohne Stencil Buffer 4. Demonstrationsfilm.
Multimedia und Virtual Reality Vorlesung am Martin Kurze Multimedia in 3D.
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
JAVA 3D 1 Einführung in die Java3D API JAVA 3D2 Was ist Java3D? Standard-Extension-Klassenbibliothek für Java X (X >= 1.2) Ermöglicht.
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Einführung in die OOP in Java
 Einführung  Szenengraphen  Bestandteile  Eingabe  JOGL  LWJGL  Beispiele  ARDOR3D Games 04/23/12Ardor 3D – Holzwarth/Kau 2.
Objektorientierte Programmierung §Klassen §Objekte §Attribute §Eigenschaften §Methoden §Datenkapselung §Ereignisse §Vererbung §Entwicklungszeit §Laufzeit.
 Präsentation transkript:

Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel

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

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

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

Die Architektur verbindet Java3D-Anwendung Java3D API Direct3D-Anwendung Java Virtual Machine Direct3D API OpenGL Hardware und Hardware-Treiber

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

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

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

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

Initialisieren von Direct3D COM-System Direct3DCreate8() DIRECT3D8 LPDIRECT3D8 CreateDevice() DIRECT3D-DEVICE8 LPDIRECT3D-DEVICE8

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

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

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 Bibliotheksfunktionen „D3DXMatrixLookAtLH()“, 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

Inhaltsgraph in Java3D

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

Links- und rechtshändiges Koordinatensystem Java3D (rechtshändiges Koordinatensystem) Direct3D (linkshändiges Koordinatensystem) V0 Reihenfolge der Raumpunkte invertieren V0 V1 V2 V2 V1  Zusätzlich Skalierung der Ansichtstransformationsmatrix um den Faktor –1 in Z-Richtung

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

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 }

Zeichnen der Objekte in Direct3D Das Zeichnen geschieht in der Hauptschleife der „WinMain“-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)

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)

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

Literatur(1) Java3D: Bouvier, Dennis “The Java3D Tutorial” – Kapitel 1-7 (1999) Subra, Mohan “Java Markets Whitepaper” (1998) Sun Microsystems, “The Java3D API - Technical Whitepaper” (1997) “Java 3D API Collateral – 1.2.1 Performance Guide” (2002) “Java 3D Programming: A Technical Overview” (1998) www.j3d.org “Java 3D API”

Literatur(2) Direct3D: Dunlop, Robert “Teach Yourself DirectX 7 in 24 Hours” (1998) Microsoft,  “DirectX 8.0 Documentation (Visual C++)“ (2000) Zerbst, Stefan “3D Graphik- Programmierung und Spiele-Programmierung mit DirectX“ (2002)