Die benutzergesteuerte oder automatische Bewegung von Objekten und Szenenteilen wird wiederum mit Hilfe der Ereignisbehandlung organisiert. Im Beispiel 6 wird die Ziehbewegung des gedrückten Mauszeigers zur Manipulation der lokalen Translation eines Objekts verwendet und das regelmäßige Verstreichen eines Zeitintervalls löst eine Nachricht an denselben geometrischen Knoten aus, der hierdurch seinen aktuellen Rotationsvektor erhält. Eine solche Konstruktion verlangt einen Orientation-Interpolator, welcher beliebige Bruchzahlen zwischen 0 und 1 auf die zugeordneten Werte seines Schlüsselintervalls abbildet, hier bestehend aus allen Drehwinkeln zwischen 0 und 3.14 (=180 Grad beschrieben in Bogenmaß), bezogen auf die y-Achse.
#VRML V2.0 utf8 # animation.wrl: # selbstaendig sich drehende und interaktiv verschiebbare Pyramide DEF Schieber PlaneSensor {} # Sensor zum Melden einer Mausbewegung DEF Timer TimeSensor { # Sensor zum Melden eines Zeitintervalls cycleInterval 5 # Dauer 5 Sekunden loop TRUE # Endlosschleife } DEF Rotierer OrientationInterpolator{ # Interpolator fuer Rotation key [0 , 1] # bilde Schluessel 0 und 1 ab auf keyValue [ 0 1 0 0 # 0 Grad Drehung bzgl. y 0 1 0 3.14] # 180 Grad Drehung bzgl. y } DEF Pyramide Transform { # plaziere Objekt mit Namen Pyramide children [ # bestehend aus Inline {url "pyramide.wrl"} # VRML-Datei pyramide.wrl ] } ROUTE Timer.fraction_changed # falls Zeitintervall sich aendert TO Rotierer.set_fraction # schicke Bruchteil an Rotierer ROUTE Rotierer.value_changed # falls Drehung sich aendert TO Pyramide.set_rotation # schicke Drehwert an Pyramide ROUTE Schieber.translation_changed # falls gedrueckter Mauszeiger bewegt wird TO Pyramide.set_translation # schicke Translationswert an Pyramide |