Polytope - Interna
Kira S
Willkommen
Bilder
Modelle
Theorie
Forum
Modellauswahl
Benutzungshinweise
Interna
Wie arbeiten die Dateien und die VRML-PROTOs zusammen? Folgende Dateien
sind (z.Z des Schreibens dieser Seite) beteiligt:
- HTML-Seite Modellauswahl
- VRML-Seite a.wrl (klein)
- VRML-Seite b.wrl (groß)
Die Seite Modellauswahl und Aufruf von a.wrl
Bei Auswahl eines Modells auf der Seite "Modellauswahl" wird eine
dort geladene JavaScript-Funktion "model" aufgerufen. Diese ruft
die Datei a.wrl in dem Fenster "extra" auf und übergibt ihr
die benötigten Informationen zum Modell und der Darstellung. Das
geschieht mit der folgenden JavaScript-Zeile: open(loc,"extra")
Die Variable "loc" enhält die relative Adresse von a.wrl dahinter
ein Fragezeichen und die Parameterliste in der für URLs üblichen Form.
Sie ist bei dem Modell-Fenster zu sehen.
Die Datei a.wrl und Aufruf von b.wrl
Die Datei a.wrl hat folgenden Inhalt:
#VRML V2.0 utf8
Background{skyColor [0.3 0.3 0.5]}
NavigationInfo {avatarSize [0.01 0.01 0.01] type "EXAMINE"}
Viewpoint {position 0 0 5 description "Start"}
Group {children [
DEF O Group {}
Script {
field SFNode O USE O
url "javascript:
function initialize () {
u=Browser.getWorldURL();
vrml='#VRML V2.0 utf8\r\n'+
'EXTERNPROTO P [field SFString u] \"b.wrl#Main\"\r\n'+
'P {u \"'+u+'\"}\r\n';
O.children=Browser.createVrmlFromString(vrml);}"}]}
Die erste Zeile gehört zum Standard von VRML97. Die nächsten drei Zeilen
legen die Hintergrundfarbe grau-blau, Information zur Navigation im
Modell und die Anfangsposition des Betrachters fest. Dann wird eine
Gruppe mit zwei "Kindern" gebildet: eine zunächst kinderlose Gruppe "O"
und ein Script mit der Funktion "initialize", welche die Gruppe O
mit Kindern füllt. Das geschieht mit dem Befehl
O.children=Browser.createVrmlFromString(vrml);
Die Variable "vrml" enthält ein dreizeiliges VRML-Script:
#VRML V2.0 utf8
EXTERNPROTO P [field SFString u] "b.wrl#Main"
P {u "URL"}
Das Wort "URL" steht in der letzten Zeile stellvertretend für die mit
"getWorldURL()" geholte URL einschliesslich des Fragezeichens
und der Parameterliste. Diese wird in "b.wrl" ausgewertet.
Eigentlich könnte man statt a.wrl und b.wrl eine einzige VRML-Datei
verwenden. Die Zweiteilung soll den Ladevorgang verkürzen, da ein Browser
Daten von einer URL mit Fragezeichen jedes mal neu läd.
Die Datei b.wrl
Diese Datei ist oben bei EXTERNPROTO angegeben. Hinter dem Zeichen "#"
steht der Name des benutzten PROTOS, "Main". Die Datei enthält hinter
der notwendigen Anfangszeile die Definition von drei PROTOs:
- Pshape: liefert einen Transform-Node mit einem Shape-Node darin.
Über Parameter werden Transformation, Farbe, Transparenz und Geometrie
festgelegt. Das PROTO wird mehrfach in Pbb1 benutzt.
- Pbb1: liefert die Steuerleiste: ein Billboard mit einem Zylinder
und mehreren mit TouchSensor versehenen Kugeln. Bei Klick wird
die touchTime als eventOut "r1" bis "r8" vom PROTO ausgegeben.
Pbb1 wird im PROTO Main benutzt und benutzt selbst mehrfach das
PORTO Pshape.
- Main: wird in der Date a.wrl benutzt und bekommt dabei im Paramameter
"u" die obige URL. Es benutzt selbst das PROTO Pbb1.
Das PROTO "Main" enthält:
- Eine Gruppe mit drei Kindern:
- DEF Bb Pbb1 (die Steuerleiste)
- DEF TL Transform (das Modell)
- DEF TR Transform (eine Kopie davon für die Pseudostereo-Ansicht)
TL enthält innerhalb einer Hierarchie von Transforms (TX,TY, TZ für
die Drehungen um die drei Achsen) folgendes:
DEF G1 Group {} # model faces, str3
DEF G2 Group {} # model vertices and edges, str4
DEF SW1 Switch {choice # structure graph, str1
DEF TT1 Group {}}
DEF SW2 Switch {choice # flag graph, str2
DEF TT2 Group {}}
- Das JavaScript "ScriptO" u.a. mit folgenden Funktionen:
- initialize: wird anfangs gestartet, bestimmt anhand von "u" die
an Main übergebenen Parameter, berechnet die Eckpunkte und Polygone
des Modells und übergibt sie der Funktion "zeig".
- zeig: bestimmt alle Teilflächen, drückt das Modell in vier VRML-Texte
aus und füllt mit createVrmlFromString die vier obigen Gruppen
G1, G2, TT1 und TT2.
- rotate: wird vom TimeSensor Timer1 (s.u.) regelmäßig aufgerufen und
ändert die Winkel von TX, TY und TZ (s.o.)
- change1 bis change8: reagieren auf die TouchSensoren der Steuerleiste
und ändern Zahlen für "rotate", die Durchsichtigkeit des Modells und
einzelner Flächen, die Sichtbarkeit der Graphen (s.o. SW1 und SW2)
und die Ansicht Mono/Stereo (s.o. TL und TR).
- Den TimeSensor Timer1
- ROUTEs von den Sensoren zu den Funktionen und vom Script zu den
Transforms.
(C) Kira S