VRML & Java

duke_waving.gif (1305 Byte)

Wenn eine VRML-Welt dynamisch auf Benutzereingaben reagieren soll, dann reichen die bisher vorgestellten Knoten nicht mehr aus. Damit konnten keine Zustände gespeichert werden, es bestand nicht die Möglichkeit komplexe Berechnungen durchzuführen oder auf bedingte Anweisungen zu reagieren. Für solche Probleme steht ein Script-Knoten zur Verfügung, der Ereignisse empfangen, verarbeiten und senden kann.

Der Script-Knoten ist ein Bindeglied zu einer programmierbaren Schnittstelle, wobei diese entweder eine Skriptsprache wie JavaScript / VRMLScript oder eine Programmiersprache wie Java sein kann.

Java bietet im Vergleich zu den Skriptsprachen eine bessere Modularität, gewährleistet eine schnellere Ausführung und hat den Vorteil Netzwerkfunktionen implementieren zu können.

Script {

    exposedField MFString url []
    field MFBool directOutput FALSE
    field MFBool mustEvaluate FALSE
    eventIn eventType eventName  
    field fieldType fieldName Default
    eventOut eventType eventName  

}

Der Script-Knoten fungiert als Gateway zwischen VRML-Welt und dem Skript. Im url-Feld kann entweder eine Adresse zu einer Code-Datei (Java-Bytecode) oder der Programmcode einer Skriptsprache stehen. Ereignisse, die vom Script-Knoten empfangen werden, werden direkt zu der entsprechenden Funktion innerhalb der an das Skript gebundenen Sprache weitergeleitet.

DEF X Script {

url "Y.class"
field SFFloat Wert 2.0
eventIn SFFloat set_fraction
eventOut SFVec3f value_changed

}

Um den Transfer von Daten & Events in die Programmiersprache Java zu gewährleisten benötigt man spezielle Klassen und Methoden.

VRML-Packages für Java

Die VRML-Packages gehören nicht zum Standardsprachumfang, sind aber bei VRML-Browsern, die Java unterstützen enthalten.

Diese VRML-Packages müssen importiert werden und es muß eine öffentliche Methode vorhanden sein, die die Script-Klasse erweitert.

import vrml.*;
import vrml.field.*;
import vrml.node.*;

public class Y extends Script

{
....
}

Alle VRML-Klassen sind aus java.lang abgeleitet ( die Exception-Klassen aus java.lang.Exception und alle anderen Klassen aus java.lang.Object ).

Klassen

Methoden, die den Namen, den Zeitstempel oder den Wert eines Ereignisses liefern
Standardmethoden, um den Status des Browsers zu erhalten / verändern
Methoden zur Konvertierung der Datenformate zwischen VRML und Java (SingleField & MultipleField).
Lesen / Schreiben von Feldinhalten über getValue() / setValue() (bei Const-Feldern nur getValue()) möglich.
direkter Zugriff auf eventIn / eventOut Felder (über die Angabe des Namens)
Basismethoden

 

Basismethoden

Die initialize()-Methode wird einmalig zum Programmstart ausgeführt.

Auf Felder & Events kann über die Methoden getField(...), getEventOut(...) und getEventIn(...) durch Angabe des Namens zugegriffen werden.

Die Ereignisverarbeitung geschieht über die Methoden processEvent(...) und processEvents(...), die immer genau dann aufgerufen werden, wenn an den Script-Knoten ein Ereignis weitergeleitet wird. Nach der Abarbeitung eines processEvents(...) wird die Methode eventsProcessed(...) aufgerufen.

Wird der Script-Knoten gelöscht oder die VRML-Welt durch eine andere ersetzt, ruft das Programm abschließend die shutdown()-Methode auf.

Beispiel

 

 

Index