Konzeptioneller Vergleich von VRML, Java3D und OpenGL hinsichtlich ihrer Eignung zur Erstellung von...
-
Upload
hiltrud-stolzer -
Category
Documents
-
view
103 -
download
0
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