Konzeptioneller Vergleich von VRML, Java3D und OpenGL hinsichtlich ihrer Eignung zur Erstellung von...

Post on 05-Apr-2015

103 views 0 download

Transcript of Konzeptioneller Vergleich von VRML, Java3D und OpenGL hinsichtlich ihrer Eignung zur Erstellung von...

Konzeptioneller Vergleich von VRML,

Java3D und OpenGL hinsichtlich

ihrer Eignung zur Erstellung von

Animationen

vonChristian Stein

Übersicht

• Motivation / Grundlagen: Was ist OpenGL, Java3D und VRML? (incl. Beispiele)

• Wie sind die Animationsmodelle aufgebaut?• Wo sind Unterschiede zwischen den

Animations-Konzepten• Das Resultat

Motivation• Historische Entwicklung:

– Früher: 3D-Bild (starr/statisch)

– Heute: Virtuelle-Realität (VR):• permanente Abbild-Erstellung, Interaktion und Dynamik der

3D-Objekte Animationen notwendig

• Hoher Aufwand für 3D-Bild-Berechnung Minimierung der Neuberechnungen notwendigGesucht: Ein Modell, daß Animationen effektiv realisiert

• Zwei Arten von Animation:– Navigation / Interaktion

– Dynamik der 3D-Objekte

Was ist OpenGL, Java3D und VRML?

• Alle drei sind plattformübergreifende Schnittstellen

• OpenGL (Graphics Library): – Low-Level-API

– es werden einzelne Abbilder von 3D-Szenen erstellt (CAD-Bereich)

• Java3D: – 'Low-Level'-API, Neu (Final-Release vor 2 Tagen)

– Zur Erstellung von 'Virtueller Realität' (VR) geeignet (es werden mehrere Abbilder hintereinander erstellt)

• VRML (Virtual Reality Modeling Language): – High-Level-'API', WWW-Bereich

– VR möglich

Beispiele für OpenGL,

Java3D und VRML

OpenGL

void CCubeView::DrawScene(void) { glTranslatef(0.0f, 0.0f, -m_fRadius); glRotatef(wAngleZ, 0.0f, 0.0f, 1.0f); wAngleZ += 5.0f; glBegin(GL_QUADS); glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f); glVertex3f(-0.5f, -0.5f, 0.5f); glVertex3f(0.5f, 0.5f, 0.5f); glVertex3f(0.5f, -0.5f, 0.5f); glEnd(); glFinish(); SwapBuffers(wglGetCurrentDC());}

Java3Dpublic BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); TransformGroup objTrans = new TransformGroup(); objRoot.addChild(objTrans); objTrans.addChild(new ColorCube(0.4)); objRoot.compile(); return objRoot;}

L

ZG

TV

Aussehen

SichtSP3D

ZG

T

VirtuellUniversum-Objekt

Lokales-Objekt

ZweigGruppen-Objekt

TransformationsGruppen- Objekt

3D-Objekt

Verhaltens-Objekt

Programmierer Code und Daten

Geometrie Andere Objekte

C

SichtPlattform

VU

VRML#VRML V2.0 utf8 Transform{ children [ Shape { geometry Sphere { } appearance Appearance { material Material { diffuseColor 0.8 0 0 } } } ] }

Das 'Animationsmodell' von

OpenGL

OpenGL

• Alle Zwischendaten werden nach der Rastererung vergessen (Hauptaufwand der Berechnung ist davor )

• Noch Operationen auf Pixelebene möglich, aber unhandlich

Raster-Daten Framepuffer

Pixel Operationen

3D-Scene- Daten

Programmierer

Farbe / Licht und Triangulation

Das Animationsmodell von

VRML

VRML

• Sensoren erzeugen Ereignisse• Alle empfangen und senden, bzw. senden weiter• Interpolatoren und Scripte berechnen neue Werte

Sensoren Script-Knoten Interpolatoren

ROUTE

andere Knoten (i.d.R. geo. Objekte)

Beginnt

Nur 'durchreichen'Normal (alles erlaubt)

Route-Mechanismus (VRML)

ROUTE QuellKnoten.QuellVariable TO ZielKnoten.ZielVariable

• mehrere Verbindungen zu einer Variable• mehrere Verbindungen von einer Variable• Endlosschleifen nicht möglich, da pro Nachrichtenkette

eine Variable nur einmal eine Nachricht senden kann

Sensoren und Interpolatoren (VRML)

• Sensoren ändern ihre Variablen anhand von Benutzereingaben oder Zeit

• Interpolatoren rechnen 'Zeit'-Werte in andere um, z.B. Translationen, Rotationen

• Interpolator-'Zeit'-Werte sind im [0,1] Intervall

• Interpolatoren können Teilintervalle unterschiedlich linear Interpolieren, z.B.[0,0.5,1] [500, 600, 800]

Script-Knoten - Struktur (VRML)

Script

{

# Interface-Teil = Variablen

# Script-Teil = Funktion die ausgeführt werden

}

VRML-Browser Aufbau

VRML Datei

VRML-Browser

Parser

Welt

Audiovisuelle Darstellung

PROTOs

Integrierte Knoten

Transformationshierachie

ROUTE-Graph

Execution- Engine

Benutzer

Benutzer Eingaben

Das Animationsmodell von Java3D

Java3D

EingabegerätAuswahl

Interpolator*Aktivierungs-

funktion

Verhalten*geo.

Objekt

auslösend direkt verbunden

Scheduler

Klasse

AWT

Zeit

Sicht

Sensor

aufrufend benutzt

* hat Zugriff auf alle Objekte

Der Scheduler (Java3D)

• Bekommt von 'Verhalten'-Objekten (also auch von Interpolatoren) gesagt bei welchen Ereignissen sie aufgerufen werden sollen. Es wird zusätzlich eine Scheduleregion angegeben (Optimierung durch culling).

• Strukturen: – volume/scheduling tree (Scheduleregionen)– and/or tree (Ereigniskombination)

Interpolatoren (Java3D)• Interpolatoren sind Klassen, die anhand von

einer Aktivierungsfunktion Eigenschaften oder die Position von geometrische Objekte verändern.

• Die Aktivierungsfunktion bildet Zeitwerte in 4 Phasen in Werte zwischen 0 und 1 ab:Aufstieg, 1, Abstieg und 0.Die Steigung muß nicht konstant sein.

Konstant in der Mitte eine stärkere Steigung

Verhalten-Klasse (Java3D)public class bspBehavior extends Behavior

{

// Variablendeklaration

public bspBehavior(Parameter p) { // Variablen initialisieren }

public void initialize() { wakeupOn(wakeupKriterium); }

public void processStimulus(Enumeration criteria)

{

// Die Handlung

wakeupOn(wakeupKriterium);

}

}

Unterschiede der

Animations-Konzepte von

Java3D und VRML

Verhaltens-Klasse vs. Script-Knoten

• Java3D: Eingebettet vs. VRML: Schnittstelle (d.h. bei VRML, Kommunikation zwischen zwei Threads)

• VRML-Script-Knoten: nur Werte-Berechnung, kein AWT (oder nur mit Tricks)

Java3D besser, da sie in eine Programmier- sprache eingebettet ist

Ereignisse / Sensoren

• VRML: Sensoren sind fertige Werkzeuge Wenig Programmieraufwand

• Java3D: Nur Benachrichtigung Mehr Möglichkeiten

• Ähnliches Angebot an Interaktionsmöglichkeiten(Es fehlt in Java3D der Sichtbarkeit-Sensor)

Scheduleregionen und Bounding-Boxes

• Java3D: Scheduleregionen sind notwendig Optimierung wird 'aufgezwungen'

• VRML: – Bounding-Boxes können angegeben werden – Sie existieren nicht für alle Knoten

(dezentrale Regelung) Dieses Feature wird häufig übersehen

Scheduler vs. Route

• Kein direkter Vergleich möglich, da die Mechanismen unterschiedliche Aufgaben haben:– Scheduler: 'Nur' Ereignisse werden weitergegeben– Route:

• Variablen werden weitergegeben, es entsteht eine Nachrichtenkette

• Eine Variablen-Weitergabe kann auch Ereignis sein

Interpolatoren

• Ähnliches Angebot bei beiden Schnittstellen

• Java3D: Aktivierungsfunktion

Mehr Möglichkeiten (z.B. Pendelbewegung)

VRML-Browser in Java3D

Es zeigt sich, daß einer Realisierung nichts im Wege steht und daß die Programmier-ung einfacher in Java3D ist als (direkt) in OpenGL.

Resultat des Animationsmodell-Vergleichs• Java3D:

+ Verhaltensklassen:+können vererbt werden (Java ist OO)+Einbettung in Programmiersprache

+ Zentrale Konzepte (Scheduler)± Nicht ganz so einfach zu benutzen, dafür für alles geeignet

• VRML:+ Umfassende Sensoren± Einfach zu benutzen, aber nicht für jeden Gebrauch- Schlechte Anbindung an Programmiersprachen- Nicht alle Konzepte sind zentral

• OpenGL: - keine Animations-Mechanismen