VRML ist eine deklarative Sprache. Im Vergleich zu einem traditionellen 3D-Programm in einer prozeduralen Sprache (z.B. ein OpenGL Programm in C) heisst das, dass man sich nicht über Dinge wie »jetzt mache ich ein Fenster auf dem Schirm auf«, »jetzt will ich wissen, ob und wo ein Mausklick passiert ist« oder »jetzt verschiebe ich diesen Körper um 5 Einheiten« kümmern muss.
Stattdessen beschreibt man lediglich die Eigenschaften der gewünschten 3D-Welt (der Ausdruck »Welt« ist das Äquivalent des 2D-Ausdrucks »Bild«), um den Rest kümmert sich dann der VRML-Browser. Solche Eigenschaften sind zum Beispiel: »an dieser Stelle soll ein 3D-Körper mit der Geometrie einer Kugel erscheinen« oder »wenn auf die Kugel geklickt wurde, soll die Kugel langsam um 5 Einheiten verschoben werden«.
Grundlage einer solchen Beschreibung bei der 3D-Programmierung ist der Szenengraph. Er wird auch häufig als Dokumentationsform für traditionelle 3D-Programme in prozeduralen Sprachen benutzt.
Im Szenengraph werden ausgehend vom graphischen Ursprung (»Nullpunkt«) alle graphischen Knoten (z.B. geometrischer Körper, Bewegung usw.) in Baumform angeordnet.
Die Bedeutung des Szenengraphen kann man sich anhand einer Animation
vor Augen führen, bei der ein Satellit um die Erde kreist, die wiederrum
um die Sonne kreist.

white_dune.
Zusätzlich zu den Knoten werden in den Szenengraph auch »Routes« eingetragen. Routes übertragen Nachrichten (»Events«, z.B die Zeit, eine Verschiebung oder Rotation) von Knoten zu Knoten.
Knoten, die Events abhängig von einem äusseren Einfluss (z.B. Mausklick, Ablauf einer Uhr, ein Punkt im Raum wird für die Kamera sichtbar usw.) aussenden, nennt man »Sensoren«.
Eine weitere wichtige Klasse von Knoten sind Interpolator-Knoten. Sie empfangen Events und verarbeiten sie zu neuen Events. Dabei wird ausgehend vom Eingangsevent ein Mittelwert aus dem vorgegebenen Eingangsbereich des Interpolator-Knotens gebildet. Dieser Mittelwert wird auf den vorgegebenen Ausgangsbereich des Interpolator-Knotens übertragen und damit ein Ausgangsevent erzeugt.
Ein einfaches Beispiel eines Szenengraph:






Im Szenengraph steht unterhalb des graphischen Ursprungs ein »Anchor«-Knoten, so dass ein Mausklick auf folgende Körper im Szenengraph das Laden der entsprechenden HTML-Seite (oder auch VRML-Seite) im World Wide Web bewirkt. Danach folgt ein »Transform«-Knoten, der für die Bewegung/Verzerrung der folgenden Knoten im Szenengraph zuständig ist. Der Transform-Knoten wirkt auf zwei weitere Knoten: einen »Shape«-Knoten, der als geometrischen Körper einen Schriftzug enthält und einen »Inline«-Knoten, der ein weiteres VRML-File einhält, das von Steve Baker mit dem 3D-Modeller AC3D erstellt wurde.
Animiert wird diese VRML-Welt über einen »TimeSensor«-Knoten, der dauernd einen Time-Event (ein Wert zwischen 0 und 1) in eine Route leitet, die zu einem »OrientationInterpolator«-Knoten führt. Daraus erzeugt der Orientationinterpolator einen Rotationsevent (eine Drehung, die aus dem Achsenvektor (0 1 0) und einem Winkel zwischen 0 und 2*Pi besteht). Über eine Route wird der Rotationsevent in den Transform-Knoten geleitet, der den Shape-Knoten und den Inline-Knoten enthält.
Insgesamt ergibt sich also eine VRML-Welt mit einem sich drehenden Schriftzug und einem sich drehenden 3D-Modell.



Betrachtet man den Quellcode dieses Programms, so erkennt man, dass der Inhalt eines VRML-Programms nichts anderes ist als eine Abbildung des entsprechenden Szenengraphs.
An Stelle eines eigentlich unnötigen »Nullpunkt«-Knotens tritt ein »Background«-Knoten, der die Hintergrundfarbe dieser VRML-Welt einstellt.
In kompakter graphischer Form lässt sich dieser Szenengraph auch so
darstellen:

Der folgende Bildschirmauszug aus white_dune zeigt die
"DEF" Namen und die "ROUTE"-Informationswege, lässt aber Feldnamen
wie z.B. "children" weg.

VRML unterstützt JavaScript (»JScript«, »VRMLScript«, eigentlich »ECMAScript« ISO/IEC 16262) und Java (im Anhang der VRML Spezifikation ISO/IEC 14772). Sie werden sich fragen, wie diese prozeduralen Sprachen in das Konzept der deklarativen Sprache passen. Programmcode in diesen prozeduralen Sprachen werden in eigene »Script«-Knoten geschrieben, um damit Events gezielt zu verarbeiten. Dabei kann ein solcher Script-Knoten mehrere Events aussenden oder empfangen.
Im einfachen VRML-Programm von oben lässt sich zum Beispiel der Orientationinterpolator
DEF DREHDATEN OrientationInterpolator
{
key [0, 0.5, 1]
keyValue
[
0 1 0 0,
0 1 0 3.14,
0 1 0 6.28
]
}
durch einen gleichwertigen Script-Knoten
DEF DREHDATEN Script
{
eventIn SFFloat set_fraction
eventOut SFRotation value_changed
url "vrmlscript:
function set_fraction(value)
{
value_changed[0]=0;
value_changed[1]=1;
value_changed[2]=0;
value_changed[3]=value*2.0*Math.PI;
}
"
}
austauschen, der JavaScript (ECMA Script, VRMLScript) benutzt.
Mit den JavaScript-Funktionen createVrmlFromString,
createVrmlFromURL
und addRoute lassen sich neue VRML-Knoten in einen bestehenden
Szenengraph einbauen und animieren.
Entsprechend sieht für die Benutzung von Java statt Javascript der Script-Knoten so
DEF DREHDATEN Script
{
eventIn SFFloat set_fraction
eventOut SFRotation value_changed
url "hello_java.class"
}
aus. hello_java.class kann man aus einem entsprechenden
Java-Programm kompilieren.
Veröffentlicht unter der
GNU GENERAL PUBLIC LICENSE Version 2
TUX Daten (abgeleitet) von
"A QUEST FOR HERRING" by Steve Baker (GPL)