Manchmal reichen die in VRML angebotenen Funktionen wie Sensoren und Interpolatoren nicht aus, um ein spezielles situationsbedingtes Interaktionsverhalten zu erzeugen. Abhilfe schafft hier der sogenannte Script-Knoten, welcher Input empfangen, Daten verarbeiten und Output verschicken kann. Z.B. kann eine vom Touch-Sensor geschickte Nachricht eine Berechnung anstoßen, deren Ergebnis in Form einer Translations-Nachricht an ein bestimmtes Objekt geschickt und dort zur Neupositionierung genutzt wird.
Die Formulierung des Berechnungsalgorithmus geschieht entweder durch ein Javascript-Programm, inline gelistet im Script-Knoten, oder durch eine assoziierte Java-Klasse, welche in übersetzter Form mit Dateiendung *.class lokal oder im Netz liegt. Zum Übersetzen der Java-Quelle ist das EAI (External Authoring Interface) erforderlich, welches in Form einiger Packages aus dem Verzeichnis importiert wird, in welches sie das VRML-Plugin bei der Installation deponiert hatte.
Beispiel 7 zeigt die Pyramide zusammen mit einem Java-Script, welches bei jedem Aufruf den Drehwinkel bzgl. der y-Achse um weitere 10 Grad erhöht.
#VRML V2.0 utf8
# javascript.wrl:
# Rotation eines Objekts wird ueber Javascript manipuliert
Group { # gruppiere
children [ # folgende Objekte
DEF Taste TouchSensor{} # Beruehrungssensor Taste
DEF Pyramide Transform { # Objekt Pyramide
children[ # bestehend aus
Inline {url "pyramide.wrl"} # VRML-Welt pyramide.wrl
]
}
]
}
DEF Aktion Script { # Script mit Namen Aktion
eventIn SFBool isActive # Input-Parameter
eventOut SFRotation drehung # Output-Parameter
url [ # gespeist
"javascript: // von inline-Javascript
function isActive(eventValue) { // fuer den Event-In zustaendig
if (eventValue == true) { // falls isActive den Wert wahr hat
drehung[0] += 0.3; // drehe weiter bzgl. x-Achse
drehung[1] += 0.2; // drehe weiter bzgl. y-Achse
drehung[2] += 0.1; // drehe weiter bzgl. z-Achse
drehung[3] += 0.174444; // erhoehe Drehwinkel um 10 Grad
}
} "
]
}
ROUTE Taste.isActive # bei Beruehren der Pyramide
TO Aktion.isActive # sende Nachricht an das Script Aktion
ROUTE Aktion.drehung # vom Script Aktion erzeugter Dreh-Vektor
TO Pyramide.set_rotation # wird an die Pyramide geschickt