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
|