290 likes | 429 Vues
Konzeptioneller Vergleich von VRML , Java3D und OpenGL hinsichtlich ihrer Eignung zur Erstellung von Animationen. von Christian Stein. Motivation / Grundlagen: Was ist OpenGL, Java3D und VRML? (incl. Beispiele) Wie sind die Animationsmodelle aufgebaut?
E N D
Konzeptioneller Vergleich von VRML, Java3D und OpenGLhinsichtlich ihrer Eignung zur Erstellung vonAnimationen vonChristian Stein
Motivation / Grundlagen: Was ist OpenGL, Java3D und VRML? (incl. Beispiele) Wie sind die Animationsmodelle aufgebaut? Wo sind Unterschiede zwischen den Animations-Konzepten Das Resultat Übersicht
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 effektivrealisiert Zwei Arten von Animation: Navigation / Interaktion Dynamik der 3D-Objekte Motivation
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 Was ist OpenGL, Java3D und VRML?
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()); } OpenGL
public BranchGroup createSceneGraph() { BranchGroup objRoot =newBranchGroup(); TransformGroup objTrans =newTransformGroup(); objRoot.addChild(objTrans); objTrans.addChild(newColorCube(0.4)); objRoot.compile(); return objRoot; } Java3D
#VRML V2.0 utf8 Transform { children [ Shape { geometry Sphere { } appearance Appearance { material Material { diffuseColor 0.8 0 0 } } } ] } VRML
OpenGL • Alle Zwischendaten werden nach der Rastererung vergessen (Hauptaufwand der Berechnung ist davor L) • Noch Operationen auf Pixelebene möglich, aber unhandlich
Sensoren erzeugen Ereignisse Alle empfangen und senden, bzw. senden weiter Interpolatoren und Scripte berechnen neue Werte VRML
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 }
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.
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); } }
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.
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 Resultatdes Animationsmodell-Vergleichs