Das Animationsmodell von VRML

Download Report

Transcript Das Animationsmodell von VRML

Konzeptioneller Vergleich von VRML,
Java3D und OpenGL hinsichtlich
ihrer Eignung zur Erstellung von
Animationen
von
Christian 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 notwendig
Gesucht: 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());
}
Java3D
public BranchGroup createSceneGraph()
{
BranchGroup objRoot = new BranchGroup();
TransformGroup objTrans = new TransformGroup();
objRoot.addChild(objTrans);
objTrans.addChild(new ColorCube(0.4));
objRoot.compile();
VU
VirtuellUniversum-Objekt
return objRoot;
}
L
Lokales-Objekt
ZG
ZG
Verhaltens-Objekt
V
Programmierer
Code und Daten
C
T
3D
ZweigGruppen-Objekt
TransformationsGruppenObjekt
T
3D-Objekt
SP
Sicht
SichtPlattform
Aussehen
Geometrie
Andere Objekte
VRML
#VRML V2.0 utf8
Transform
{
children
[
Shape
{
geometry Sphere { }
appearance Appearance
{
material Material { diffuseColor 0.8 0 0 }
}
}
]
}
Das 'Animationsmodell' von
OpenGL
OpenGL
3D-SceneDaten
Farbe / Licht und
Triangulation
Raster-Daten
Framepuffer
Programmierer
Pixel
Operationen
• Alle Zwischendaten werden nach der
Rastererung vergessen (Hauptaufwand der
Berechnung ist davor L)
• Noch Operationen auf Pixelebene möglich,
aber unhandlich
Das Animationsmodell von
VRML
VRML
Sensoren
Script-Knoten
Interpolatoren
andere Knoten
(i.d.R. geo. Objekte)
Beginnt
Normal (alles erlaubt)
ROUTE
Nur 'durchreichen'
• Sensoren erzeugen Ereignisse
• Alle empfangen und senden, bzw. senden weiter
• Interpolatoren und Scripte berechnen neue Werte
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] [5 0 0, 6 0 0, 8 0 0]
Script-Knoten - Struktur (VRML)
Script
{
# Interface-Teil = Variablen
# Script-Teil = Funktion die ausgeführt werden
}
VRML-Browser Aufbau
VRML-Browser
Welt
Parser
VRML
Datei
Transformations
hierachie
PROTOs
ExecutionEngine
Integrierte
Knoten
ROUTE-Graph
Benutzer
Eingaben
Audiovisuelle
Darstellung
Benutzer
Das Animationsmodell von
Java3D
Java3D
Eingabegerät
Sensor
Auswahl
AWT
Scheduler
Verhalten*
Zeit
Sicht
Klasse
Aktivierungsfunktion
geo.
Objekt
Interpolator*
auslösend
direkt verbunden
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 Programmiersprache 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 Programmierung 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