Date post: | 05-Apr-2015 |
Category: |
Documents |
Upload: | hiltrud-stolzer |
View: | 103 times |
Download: | 0 times |
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