http://129.69.35.12/vrml/programming/vrml_programming.html

VRML programmieren

Inhalt:

Blick in den Standard

Betrachtet man einen VRML Knoten (hier der häufig benutzte "Transform" Knoten, der z.B. für Verschiebung, Drehung usw. zuständig ist) im offizellen VRML97 Standard ISO/IEC 14772 (in der Liste der VRML Knoten unter http://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html#Transform )


kann man 5 Spalten unterscheiden:
Darunter befindet sich eine genaue Beschreibung der Bedeutung der einzelnen Fieldnamen.

Eventinformation

Vergleicht man die Notation im Standard mit dem Bild, dass sich in Dune



oder dem Szenengraph in Cosmoworlds

bietet, erkennt man die graphische Darstellung dieser Eventinformation.

Die nach links weisenden Kästchen in Dune (wie z.B. ("set_translation") deuten darauf hin, dass an den entsprechenden Fieldname eine Nachricht geschickt werden kann, die nach rechts weisenden Kästchen deuten darauf hin, dass vom entsprechenden Fieldname eine Nachricht abgeschickt werden kann. Dabei dienen die Vor/Nachsilben "set_" bzw. "_changed" nur zur Verdeutlichung, sie können auch weggelassen werden.

Genauso deuten die nach links oder rechts deutenden Pfeilchen im Cosmoworlds-Szenengraph auf eingehende oder ausgehende Nachrichten hin.

Es lassen sich dabei 4 verschiedene Typen unterscheiden:

Datentypen

Datentypen sind ein wichtiges Programmierprinzip. Sie verhindern, dass Daten ausgetauscht werden können, die nicht zueinander passen.

Es macht zum Beispiel in der Regel wenig Sinn, wenn eine Zeitinformation (ein Wert) einer Verschiebung (drei Werte) zugewiesen werden soll. Über dieses einfache Beispiel hinaus gibt es noch feinere Unterscheidungen.
Betrachtet man die Liste aller möglichen Datentypen in VRML, wie in http://www.web3d.org/technicalinfo/specifications/vrml97/part1/fieldsRef.html#Introduction


so kann man zuerst "SF" und "MF" Typen unterscheiden. Dabei bedeutet "MF" ("M" von "multiple") eine Liste ("Array") des entsprechenden "SF" Typs. Diese Liste wird von [ und ] eingeschlossen (ausser der Array enthält nur einen Wert).

Einige wichtige Datentypen sind zum Beispiel:

Modularisierung

Modularisierung ist wahrscheinlich das wichtigste Programmierkonzept überhaupt. Man versteht darunter die Kunst, ein Problem in isolierte Teilprobleme zu unterteilen und dabei Übersichtlichkeit, Wartbarkeit und Wiederverwendbarkeit zu fördern.

Ein einfaches Beispiel:
Einige 3D Modelle von Häusern in VRML sollen daraufhin untersucht werden, ob eine Drehtür, eine Schiebetür oder eine konventionelle Tür geeignet sind.
Statt nun jedem 3D Modell (zum Beispiel mit Dune) verschiedene Türen hinzuzufügen, macht es Sinn, die Türen jeweils einzeln herzustellen und sie dann mit nur einem Befehl in die 3D Modelle einzufügen. Das ist übersichtlicher.
Stellt sich Jahre später das Problem, dass in einem anderen 3D Modell eine solche Tür benötigt wird, ist das sehr einfach möglich. Das ist ein Beispiel für Wiederverwendbarkeit.
Für Modularisierung sind im VRML-Standard zwei verschiedene Methoden vorgesehen:

Fehlersuche in Cosmoplayer

Leider werden sind Fehlermeldungen in Cosmoplayer ausgesprochen unauffällig, im folgenden Programmierteil werden sie aber ausgesprochen wichtig, da Fehler beim Programmieren sehr häufig vorkommen.
Leuchtet im Navigationsbalken von Cosmoplayer eine Reihe roter Lämpchen auf


so bedeutet das, dass Cosmoplayer auf einen Fehler gestossen ist.
Klickt man auf die Lämpchen, öffnet sich die sogenannte VRML Console, die die Fehlermeldung anzeigt.

Die gezeigte Fehlermeldung "# File is empty" ist sehr charakteristisch. Sie zeigt an, dass der vorgeschriebene VRML Header
#VRML V2.0 utf8
nicht am absoluten Anfang des File gefunden wurde.
Leuchtet im Navigationsbalken von Cosmoplayer eine Reihe gelber Lämpchen auf

so bedeutet das, dass Cosmoplayer auf eine Warnung gestossen ist.
Die VRML Console lässt sich auch mit der "\" Taste öffnen. Genauer lässt sich das Verhalten der VRML Console einstellen, indem man im Navigationsbalken auf das Häckchen klickt

und im sich öffnenden Fenster auf den Reiter "Advanced" klickt.

Während Fehler und "print" Ausgaben bei in "javascript" geschriebenen Scriptknoten bei Cosmoplayer in der VRML Console erscheinen, werden Fehler und "println" Ausgaben bei in java geschriebenen Scriptknoten in die java Console geschrieben. Bei netscape 4.7X ist sie über Communicator -> Tools -> Java Console erreichbar.

Ein Einstieg in "javascript"

Das in einen VRML Browser eingebaute "javascript" wird auch als "VRML-Script" bezeichnet, da die HTML spezifischen Befehle von "javascript" im VRML-Browser nicht funktionen (sollten) und gegen VRML spezifischen Befehle ausgetauscht wurden. Offiziell heisst diese Computersprache "ECMA-Script", nach dem gleichnamigen Normierungsgremium der Europäischen Gemeinschaft.

Die wichtigsten Konstruktionen in "javascript" sind: