Grundlagen, Möglichkeiten und Grenzen

der

Virtual Reality Modeling Language


Inhaltsverzeichnis

Hinweise
Geometrische Primitive
Komplexe Geometrien
Oberflächen und Material
Texturen
Blickpunkte
Licht
Töne
Nebel
Hintergrund
Avatar
Sensoren
Interpolatoren
Integration von JavaScript
Anker
Detaillierungsgrad
Kollision
Plakattafel
Referenzierung
Prototypen
Einbettung in HTML

Hinweise

Dieses Dokument ist Bestandteil der gleichnamigen Diplomarbeit von Dirk Wunderlich an der Wirtschaftswissenschaftlichen Fakultät der Universität Leipzig (betreuender Hochschullehrer: Prof. Dr. Gerd Goldammer).

Die folgenden Demonstrationsbeispiele sollen nicht erschöpfend alle Fragen beantworten und können schon gar nicht als Programmieranleitung betrachtet werden. Vielmehr sollen die wesentlichen Möglichkeiten und Leistungen von VRML aufgezeigt werden, wobei bewußt nur sehr einfach gehaltene Szenen genutzt werden. Es wird vorausgesetzt, daß gewisse Grundkenntnisse sowohl über VRML als auch über die Handhabung eines VRML-Viewers bekannt sind. Es wird empfohlen, die o.g. Diplomarbeit zum besseren Verständnis zu lesen. Zu weiterführenden Ausführungen, insbesondere zur Syntax, sollte auf die vollständige Spezifikation des VRML97-Standards zurückgegriffen werden. Diese kann als HTML-Dokument eingesehen oder im Zip-Format heruntergeladen werden.

Sämtliche Beispiele wurden in VRML 2.0 erstellt und mit dem Cosmo Player 2.1 von Silicon Graphics unter Netscape Navigator 4.05 getestet. Zum umfassenden Verständnis ist es unbedingt notwendig, die VRML-Szenen anzuklicken und in diesen selbst tätig zu werden. Allein das Betrachten der "Schnappschüsse" kann das Anliegen nicht genügend verdeutlichen. 


 Geometrische Primitive

 
 
Dieses einfache Beispiel zeigt einen simplen Quader, dessen Kantenlängen auf das Verhältnis 3 : 1 : 7 abgeändert wurden. 

Alle charakterisierenden Materialeigenschaften wurden bei den Standardeinstellungen belassen. Das hat zur Folge, daß sich die einzelnen Oberflächen farblich nicht unterscheiden und die dreidimensionale Geometrie optisch nicht zum Tragen kommt.

 
VRML unterstützt nur diese vier geometrischen Primitive: den Quader, den Kegel, den Zylinder und die Kugel. Alle Primitiven mußten hier einer Translation unterzogen werden, um sie nebeneinander zu plazieren. Zusätzlich wurden alle vier um eine jeweils unterschiedliche Achse rotiert. Die standardmäßige Ausdehnung wurde aber beibehalten. 

Die Eigenschaften der diffusen Reflexion wurden abgeändert, wobei dem Würfel, Kegel und Zylinder je eine maximale Komponente des RGB-Tripels zugewiesen wurde. Der Kugel wurde sowohl die Rot- als auch Grün-Komponente zugeteilt, wodurch diese gelbes Licht reflektiert.

 
 
 
In diesem Beispiel wurden vier verschiedenfarbige Kugeln so transformiert, daß sie einen Haufen bilden. Auf der obersten gelben Kugel wurde ein um 180 Grad rotierter Kegel so aufgesteckt, daß dessen Spitze sich im Inneren der Kugel befindet. Sowohl die Kugeln als auch der Kegel wurden transparent gestaltet. 

Zusätzlich wurde ein grauer Zylinder mit großem Radius aber sehr kleiner Höhe vereinbart. Dieser übernimmt gewissermaßen die Funktion einer Grundebene, d.h. über ihr wirkt im Geh-Modus die Gravitation. Beim Eintritt in die Szene ist diese Grundebene nicht zu erkennen, da das Licht der Helmlampe nicht auf diese trifft. Machen Sie die Grundebene sichtbar, indem Sie zum Neig-Modus umschalten und ein wenig nach unten blicken! 

Dieses Kugelhaufen-Beispiel wird zur Demonstration verschiedenartiger Effekte auch von anderen Szenen importiert und verwendet. 

  

Komplexe Geometrien

 
 
Dieses Beispiel zeigt drei in ihrer Ausdehnung identische Pyramiden mit quadratischer Grundfläche. Damit sie sich nicht an einer Stelle überlagern, wurden sie entsprechend verschoben. 

Eine Pyramide wurde nur aus den fünf Koordinaten der Eckpunkte gebildet, die als Polypunkte in Form einer Punktwolke abgebildet wurden (hier im Bild nicht sichtbar). Die mittlere Pyramide besitzt die gleichen Koordinaten, die aber acht Polylinien definieren und als Drahtgitter erscheinen. Die dritte Pyramide nutzt ebenfalls selbige Koordinaten. Hier legen diese fünf Polygone als Seiten- bzw. Bodenflächen fest, was zu einem massiven Körper führt. 

Den Eckpunkten des Körpers wurde jeweils eine Farbe zugeordnet. Die entgültige Farbe eines Polygons ergibt sich durch Mischen der Farben seiner Eckpunkte. Somit kann jedes Polygon eine eigene Farbe erhalten. Den Eckpunkten des Drahtgitters wurden die gleichen Farben zugewiesen. Die Farb-Erscheinung einer Polylinie wurde nicht durch Mischen, sondern durch einen interpolierten Übergang zwischen zwei Eckpunkten erzeugt.

 
Das Höhengitter beschreibt einen Flächenverlauf. 

Die dargestellte Fläche besteht aus einem regelmäßigen, rechteckigen 10 x 8 Raster mit individuellen Höhen. Das Raster wurde in x-Richtung auf das Doppelte gestreckt. 

Sofern der Geh-Modus eingeschaltet ist, läßt sich das Höhengitter betreten. Da die Berge kein Hindernis darstellen bzw. keine Kollision hervorrufen, können diese problemlos bis zur Spitze bestiegen werden. 

Dieses Höhengitter wurde nicht als geschlossener Körper definiert, somit kann es auch von der anderen Seite aus betrachtet werden, wobei es sich dann um die negative Darstellung handelt.

 
 
 
Diese Flasche wurde durch Extrusion modelliert. Dazu wurde eine achteckige Grundfläche in sechs Schritten entlang einer Trajektorie in y-Richtung bewegt. Um einen leicht verdrehten Flaschenbauch zu erzielen, wurde vor der Extrusion dieses Segmentes die Grundfläche entsprechend rotiert. 

Navigieren Sie im Flug-Modus senkrecht über den Flaschenhals und lassen Sie sich durch Zuschalten der Gravitation (Geh-Modus) in die Flüssigkeit der geöffneten Flasche fallen!

 
Daß sich mit Hilfe der Extrusion auch unregelmäßige Körper gestalten lassen, zeigt dieses Beispiel. Die Richtung der Trajektorie wurde dabei nach jedem Schritt neu bestimmt. 

Es handelt sich um einen Hohlkörper, der an einem Ende geöffnet ist. Versuchen Sie, an dieser Stelle in den Körper hineinzugehen!

 
 
Achten Sie bei der Darstellung von Text darauf, daß im US-ASCII-Format kein ß enthalten ist. Das gleiche gilt für die deutschen Umlaute und einige andere Zeichen. 

Paradoxerweise kann mit Text keine Kollision erfolgen. Testen Sie! Gehen Sie durch die Schrift hindurch, drehen Sie sich um und lesen Sie den Text spiegelverkehrt! 

Text kann auch transformiert werden, was das Plakattafel-Beispiel demonstriert. 


Oberflächen und Material

 
 
Die fünf Kugeln sind mit unterschiedlichen Materialeigenschaften versehen, wozu auch die Farbe zählt. Die rote Kugel repräsentiert eine sehr matte Oberfläche. Im Gegensatz dazu wurde der lila (lila = rot + blau) Kugel ein hoher Glanzeffekt zugeordnet, wobei hauptsächlich der Rot-Anteil gespiegelt wird. Die graue und die grüne Kugel wurden transparent gestaltet, durch sie kann also im bestimmten Maße hindurchgeblickt werden. 

Die orange Kugel reflektiert rotes Licht und emittiert zusätzlich eigenes gelbes Licht. Zur Kontrolle schalten Sie die Helmlampe als einzige Lichtquelle aus (beim Cosmo Player <*> auf der Zehnertastatur)! Sie sehen dann nur noch die (jetzt rein gelbe) selbstleuchtende Kugel. Die vier anderen Kugeln sehen Sie nur, wenn diese von einer Lichtquelle beleuchtet werden, was zugleich beweist, daß die gelb leuchtende Kugel keine Lichtquelle ist. 


Texturen

 
 
Texturen können auf jegliche Oberfläche aufgebracht werden. Wahlweise kann eine Textur entweder nur einen Flächenteil oder die ganze Fläche ausfüllen. Im letzteren Fall kann spezifiziert werden, wie oft diese sich neben- bzw. übereinander wiederholen soll. Ebenfalls zu beeinflussen ist die Ausrichtung: die Textur kann in gewünschter Weise verschoben, rotiert und skaliert werden. 

Die mittlere Textur ist ein Video ohne Tonanteil. Natürlich kann dieses nur dargestellt werden, wenn Ihr Rechnersystem das Abspielen unterstützt.

 
Wird eine Textur einem geometrischen Primitiv zugewiesen, so wird diese immer auf allen Teilflächen dargestellt. Das führt zu unterschiedlich Effekten. 

Auf einem Quader wird eine Textur sechsmal, also an jeder Quaderfläche, abgebildet. Eine Kugel wird hingegen von einer einzigen Abbildung der Textur vollständig überzogen, wobei diese aber eine Naht aufweist und zwangsläufig stark verzerrt wird. Dies gilt ebenso für die gerundeten Mantelflächen des Zylinders oder Kegels. Die Grundfläche des Kegels sowie der Boden und der Deckel des Zylinders zeigen einen Kreisausschnitt der Textur. 

 
 

Blickpunkte

 
 
Für dieses Beispiel wurden die Szenen Höhengitter, Text, Materialeigenschaften, Berührungs-Sensor und JavaScript importiert und zusammengeführt. Es wurden acht ausgewählte Blickpunkte definiert, welche interessante Ausschnitte der virtuellen Landschaft zeigen und die Navigation in dieser erleichtern sollen. Die eigenhändige Navigation wird dadurch nicht eingeschränkt. 

Die Blickpunkte wurden hinsichtlich Position, Orientierung und Kurzbeschreibung variiert. Absichtlich wurde der Blickwinkel bei der Standardeinstellung von 45 Grad belassen. Alle Kurzbeschreibungen finden sich in einem Menü des Viewer-Steuerpultes wieder und dienen zur Auswahl der Blickpunkte. 

Wählen Sie die Blickpunkte zunächst in vorgegebener, anschließend in unterschiedlicher Reihenfolge im Steuermenü aus! Der Blickpunkt über dem offenen Flaschenhals ist nur von kurzer Dauer, die Schwerkraft tut ihre Pflicht.

 
Ähnlich der Brennweite einer Kamera kann für jeden Blickpunkt ein vertikaler Blickwinkel angegeben werden, welcher das Sichtfeld spezifiziert. Der standardmäßig eingestellte Winkel beträgt 45 Grad. Ein kleinerer Winkel entspricht der Betrachtung durch ein Teleobjektiv, wobei ein kleiner, weit entfernter Ausschnitt aus der Szene vergrößert dargestellt wird. Ein größerer Winkel hat hingegen den Effekt eines Weitwinkelobjektivs. 

Zur Demonstration wurde das Plakattafel-Beispiel und das hier stark vergrößerte Höhengitter importiert. Es wurden sieben Blickpunkte definiert, die alle die gleiche Position haben und sich im Blickwinkel (10, 20, 45, 90, 120, 150 und 180 Grad) unterscheiden. Der Blickwinkel des jeweils aktiven Blickpunktes wird als Kurzbeschreibung angezeigt. 

Schalten Sie vorerst zwischen den Blickpunkten um, ohne den Standort zu verändern! Untersuchen Sie daraufhin die Auswirkungen unterschiedlicher Blickwinkel auf das Sichtfeld während der Navigation! 

 
  

Licht

Um folgende drei Lichtarten jeweils anhand eines Beispiels uneingeschränkt zu demonstrieren, wurde die standardmäßig aktivierte Helmlampe des Avatars deaktiviert. Während der Navigation  kann diese aber (beim Cosmo Player mittels der <*> Taste auf der Zehnertastatur) zugeschaltet werden, um den Unterschied zu verdeutlichen. Die Helmlampe strahlt dann unabhängig von anderen Lichtquellen, zusätzlich paralleles weißes Licht mit maximaler Intensität stets in Blickrichtung aus.
 
In diesem Beispiel wurde ein einzelnes Punktlicht vereinbart, das in alle Richtungen gleichmäßig strahlt. Die Position der Lichtquelle befindet sich auf der rechten Seite leicht nach vorn versetzt in Höhe der gelben Kugel. 

Zu erkennen sind nur die vom Licht angestrahlten Flächen. Weil auf die Oberseite der Kreisfläche des Kegels kein Licht auftrifft, ist diese nicht sichtbar. Navigieren Sie über diese Fläche und vergewissern Sie sich, daß diese schwarz ist!

 
 
Das hier verwendete gerichtete Licht besitzt eine starke Rot-Komponente. Das führt dazu, daß alle Objekte hauptsächlich rotes Licht reflektieren. Zu erkennen ist dies an der eigentlich gelben Kugel (Rot- und Grün-Komponenten ergeben gelb), die aus diesem Grund hier orange aussieht. 

Im Unterschied zum vorherigen Beispiel trifft das Licht auf die Kreisfläche des Kegels. Diesmal wird der Kegelmantel nicht beschienen, so daß dieser zwar schwarz, aber dennoch transparent ist.

 
Zur Demonstration des Spotlichtes wurde das Höhengitter-Beispiel importiert, um den Effekt des gerichteten Lichtkegels besser sichtbar zu machen. Die Lichtquelle wurde senkrecht über dem Gitter plaziert, mit Ausbreitungsrichtung nach unten. Sowohl der Winkel des inneren als auch des äußeren Lichtkegels wurden verkleinert, um auf dem Gitter den kompletten Übergang bis zu den unbeleuchteten Flächen abzubilden. 

Schalten Sie kurz die Helmlampe ein, um einen vollständigen Überblick über das Höhengitter zu erhalten. 


Töne

 
Diese Szene enthält drei Tonquellen, welche jeweils unterschiedliche Musik ausstrahlen. Die Musikstücke liegen im Wavefile-Format vor, sind nur einige Sekunden lang, werden aber in einer Endlosschleife laufend wiederholt. 

Alle drei Tonquellen, symbolisiert durch rote Kugeln,  haben die gleichen Ausbreitungseigenschaften, d.h. Richtung und Ausdehnung. Die Ausbreitung von Ton wird zwar normalerweise durch ein doppeltes Ellipsoid beschrieben, soll hier aber der Einfachheit halber mittels Drahtgitter-Quadern optisch veranschaulicht werden. Die Polylinien geben also nicht genau die Grenzen der Hörbarkeit an, was insbesondere für die seitliche Ausbreitung gilt. Trotzdem können diese als Orientierungshilfe zur Erforschung der Akustik dienen. 

Navigieren Sie derart genau zwischen zwei Tonquellen, daß Sie gleichzeitig beide Musikstücke hören können! Drehen Sie sich an diesem Punkt um die eigene Achse und hören Sie die Unterschiede des linken sowie rechten Tonkanals (sofern Sie eine Stereo-Soundkarte besitzen)! 

Wenn Sie sich außerhalb der Reichweite aller Tonquellen befinden und demzufolge kein Ton hörbar ist, werden trotzdem alle drei Musikstücke weitergespielt, d.h. die Hardware wird dementsprechend ständig belastet!

 
 
 
Die rote Kugel repräsentiert eine Tonquelle, welche die Musik einer MIDI-Datei abspielt. Die Tonquelle befindet sich nicht im Zentrum des akustischen Raumes, deshalb wird die Intensität der Musik entlang der beiden Richtungen der Ausbreitungsachse (weiße Hilfslinie) unterschiedlich stark gedämpft. 

Innerhalb des inneren Quaders, welcher auch hier als starke Vereinfachung eines Ellipsoids gebraucht wird, bleibt die Tonintensität konstant auf dem maximalen Wert. Der äußere Quader gibt die ungefähre Grenze der Hörbarkeit an. Zwischen diesen beiden fällt die Intensität mit dem Quadrat der Entfernung ab. 

Die unterschiedliche Ausbreitung der Musik läßt sich zwischen den Quadern gut wahrnehmen. 


Nebel

 
Grauer Nebel schränkt die Sichverhältnisse dieser Szene stark ein. Über dem Untergrund sind deutlich Nebelschwaden zu erkennen. Je weiter Objekte entfernt sind, desto verschwommener sind diese zu sehen, wobei dieser Effekt exponentiell zunimmt. 

Damit ab einer bestimmten Entfernung die Objekte nicht mehr vom Hintergrund zu unterscheiden sind, wurde dieser mit derselben Farbe wie die des Nebels eingefärbt. 

Bei Verwendung von transparenten Objekten tritt ein gravierender Mangel in Erscheinung (zumindest beim Cosmo Player). Während sich, wie beabsichtigt, die Farben der linken vier Geometrien und der Grundebene mit der des Nebels mit wachsender Distanz vermischen, bis diese schließlich nicht mehr unterschieden werden können, behalten hingegen die transparenten Objekte weiterhin ihre Farbe und sind unbegrenzt sichtbar. Bei opaken Objekten tritt dieser Mangel nicht auf. 

 

Hintergrund

 
 
Der Hintergrund setzt sich aus Boden und Himmel zusammen. Senkrecht am Himmel ist zudem eine Sonne zu erkennen. Wenn Sie diese betrachten wollen, müssen Sie entweder zum Neig- oder Prüf-Modus umschalten. 

Dem Himmel wurden insgesamt nur fünf Farben zugewiesen. Die erste Farbe legt das Zentrum der Sonne und die zweite deren Korona bzw. deren direkte Umgebung fest. Die restlichen drei Farben sind Blautöne für die Atmosphäre. Der interpolierte Farbverlauf von dunkelblau in Sonnennähe bis hellblau am Horizont erforderte noch die Angabe von Winkeln, welche die Übergänge gezielt festgelegen. 

Für die farbliche Abstufung des Bodens wurden nur zwei Farben verwendet.

 
Eine Szene kann durch ein Panorama umrahmt werden, welches sich vor dem eigentlichen Hintergrund befindet. Hier wurde jeweils eine Wolken-Textur auf der vorderen, linken und rechten Seite aufgebracht. Die Rückseite, der Boden und der Deckel wurden freigelassen, wodurch der Hintergrund sichtbar ist. Die Farben wurden ähnlich denen nach einem Sonnenuntergang gewählt. 

Schalten Sie die Helmlampe aus, um zu erkennen, daß Hintergrund und Panorama im Gegensatz zu den Objekten von Lichtquellen nicht beeinflußt werden! 

Versuchen Sie erst gar nicht, den Wolken näher zu kommen, da diese in der Unendlichkeit liegen! 

 
 

Avatar

 
 
In diesem Beispiel wurden die Navigationseinstellungen, d.h. die Eigenschaften des Avatars verändert. Gegenüber den Standardeinstellungen wurden die Augenhöhe und der Körperumfang (Kollisionsabstand) verringert sowie die Navigationsgeschwindigkeit verlangsamt. 

Es werden vier unterschiedlich hohe Plattformen dargestellt, an denen die maximale Steighöhe des Avatars demonstriert werden soll. Die ersten drei Plattformen lassen sich erklimmen, mit der obersten erfolgt jedoch eine Kollision. Testen Sie! Beachten Sie auch, daß der Geh-Modus eingestellt ist und der Flug- sowie Prüf-Modus nicht verfügbar sind! 

Um die drei farbig strahlenden Punktlichter unverfälscht zur Geltung zu bringen, wurde die Helmlampe ausgeschaltet. Zusätzlich wurde eine maximale Sichtweite festgelegt. Entfernen Sie sich von den Plattformen rückwärts solange, bis diese außerhalb der Sichtweite liegen! 


Sensoren

 
Drag-Sensoren haben die Aufgabe, die Ziehbewegungen der Maus auf dreidimensionale Koordinaten abzubilden. Dazu wird ein kontinuierlicher Ereignisstrom dem entsprechenden Transformations-Knoten zugeleitet, welcher den zu beeinflussenden geometrischen Knoten enthält und die Positions- oder Rotationswerte in Bewegung umsetzt. 

Es wurden zwei Ebenen-Sensoren definiert, einer gestattet eine eingeschränkte Bewegung der blauen Kugel auf der xy-Ebene, der andere verwirklicht einen horizontalen grünen Schieberegler. Wird letzterer wiederholt angeklickt, springt er auf seine Standardposition zurück. 

Durch den Kugel-Sensor kann der rote Kegel von allen Seiten aus betrachtet werden, ohne daß dieser an eine andere Position verschoben wird und ohne Veränderung des Avatar-Standortes. 

Der Zylinder-Sensor realisiert das Öffnen und Schließen einer Tür. Damit die Rotationsachse nicht in der Mitte der Tür, sondern in der Türangel liegt, mußte eine zusätzliche, dem Sensor untergeordnete Translation durchgeführt werden.

 
 
 
Ein Berührungs-Sensor kann als Lichtschalter fungieren. Er meldet, wenn der Cursor ein Objekt, welches demselben Gruppenknoten zugeordnet ist, berührt oder darüber hinweggleitet. 

In diesem Fall reagiert der Sensor auf Berührung der Kugel, die unter dem ausschließlichen Licht der Helmlampe neutral grau erscheint. Drei aus verschiedenden Richtungen strahlende gerichtete Lichter werden bei Berührung der Kugel eingeschaltet und beleuchten diese mit ihrer Farbkomponente. Durch die gebogene runde Oberfläche der Kugel vermischen sich die Farben. 

Untersuchen Sie die Farbeffekte von unterschiedlichen Blickrichtungen aus im Prüf-Modus!

Ein Regionüberwachungs-Sensor kann als Bewegungsmelder für eine bestimmte Region eingesetzt werden, die durch einen nicht sichtbaren Quader begrenzt ist. Mit ihm können gezielt Schaltvorgänge realisiert werden. 

In diesem Beispiel wurden drei in der xy-Ebene nebeneinander liegende Polygone definiert. Hinter jedem liegt ein Überwachungsbereich eines Sensors. In Abhängigkeit davon, durch welches Polygon der Benutzer in den hinteren Raum tritt bzw. in welchem der drei Sensor-Bereiche er sich aufhält, wird eines von drei gerichteten Lichtern aktiviert. Diese Lichter beleuchten mit jeweils nur einer Farb-Komponente einen weißen Text. Da die Helmlampe deaktiviert ist, führt das dazu, daß der Text nur diese eine Komponente reflektieren kann und damit rot, grün oder blau erscheint. 

Die Überwachungsbereiche der drei Sensoren überlappen sich geringfügig. Damit können auch zwei Lichter gleichzeitig an sein, wodurch dann zwei Farb-Komponenten des Textes reflektiert werden. 

Gehen Sie durch ein Polygon hindurch! Variieren Sie die farbliche Erscheinung des Textes, indem Sie sich seitwärts in einen anderen Sensor-Bereich begeben!

 
 
 
Der Sichtbarkeits-Sensor überwacht einen quaderförmigen Bereich daraufhin, ob er sich im Blickfeld befindet oder nicht. 

Zur Demonstration wurde das Kollisions-Beispiel importiert und der Überwachungsbereich des Sensors genau auf die Größe des bunten Polygon-Würfels festgelegt. Befindet sich der Würfel oder auch nur ein Teil von ihm im Blickfeld, ist eine Musik zu hören. Verschwindet er vollständig aus dem Blickfeld, verstummt sofort die Musik.


Für den Zeit-Sensor wird keine extra Szene aufgeführt, da er in allen Interpolator-Beispielen Verwendung findet. Dort hat er die Aufgabe, kontinuierlich Ereignisse mit dem Bruchteil eines festgelegten Zeit-Intervalls zu den Interpolatoren zu senden und so den zeitlichen Ablauf zu steuern. 
 

Interpolatoren

 
Der Farb-Interpolator erzeugt eine Folge von RGB-Farbwerten. 

Für dieses Beispiel wurde der unregelmäßige Extrusions-Körper importiert und zusätzlich eine Kugel definiert. An die Position der Kugel wurde ein Punktlicht gesetzt. 

Ein Zeit-Sensor sendet in einer Endlosschleife kontinuierlich Ereignisse mit dem Bruchteil eines 20-Sekunden-Intervalls an den Farb-Interpolator. Der Interpolator generiert fortlaufend interpolierte RGB-Werte, die von grau zu einer vollen Farbe und zurück wechseln. Diese Werte werden sowohl der Farb-Eigenschaft der Kugel als auch des Punktlichtes zugewiesen.

 
 
 
Der Koordinaten-Interpolator interpoliert zwischen Punkten bzw. Vektoren im Raum. Mit ihm läßt sich ein Morphing-Effekt erzielen, indem die Koordinaten (Eckpunkte) einer Geometrie fortlaufend verändert werden. 

In diesem Fall wird die Geometriestruktur eines Polygon-Körpers in einem dreistufigen Morphing-Prozeß verändert. 

Am Beginn liegt ein Quader vor, dessen Form allmählich in die einer Pyramide übergeht. Dazu werden die vier oberen Eckpunkte einander angenähert, bis sie sich in einem Punkt, der Pyramidenspitze, vereinen. In der zweiten Stufe werden die vier unteren Eckpunkte derart weiter nach außen und zusätzlich nach unten verlagert, daß die Pyramidenflächen größer werden und die Grundfläche sich absenkt. Dabei behält die Pyramidenspitze ihre Position bei. Die dritte Stufe, der Übergang zur Form des Ausgangsquaders, läuft wesentlich schneller als beide vorherigen ab. Befinden sich alle Eckpunkte wieder in der ursprünglichen Lage, beginnt der Prozeß nahtlos von vorn.

 
Mit dem Positions-Interpolator lassen sich Objekte animieren, d.h. entlang eines festgelegten Pfades kontinuierlich verschieben. 

In diesem Beispiel realisiert ein Berührungs-Sensor den Schalter zum Beginn der Animation der hellblauen Kugel. Der Sensor überwacht die Kugel daraufhin, ob diese angeklickt wird. Erfolgt dieses (genauer: Zeitpunkt des Loslassens der Maustaste) wird ein Ereignis zu einem Zeit-Sensor gesendet, welcher daraufhin für die Dauer von 10 Sekunden kontinuierlich Ereignisse mit einem Bruchteil des 10-Sekunden-Intervalls (Ereigniswert liegt im Intervall von null bis eins) generiert und an den Positions-Interpolator weiterleitet. 

Im Positions-Interpolator sind im Intervall von null bis eins logarithmisch verlaufende Stützstellen mit ihren zugehörigen Funktionswerten definiert. Dabei entsprechen die Funktionswerte den Koordinaten bzw. Eckpunkten, entlang derer die Bewegung erfolgen soll. 

Durch lineare Interpolation werden aus den empfangenen Werten der Ereignisse unter Zuhilfenahme der Stützstellen sowie der Funktionswerte die aktuellen Kugel-Koordinaten berechnet. Diese müssen nur noch an den Transformations-Knoten für die Kugel übermittelt werden. 

Beachten Sie, daß durch den logarithmischen Verlauf der Stützzellen eine beschleunigte Bewegung der Kugel resultiert!

 
 
 
Mit dem Orientierungs-Interpolator kann die Ausrichtung einer Geometrie verändert werden. Zu diesem Zweck interpoliert er zwischen Rotationswerten, welche durch eine Drehachse in Form eines Vektors sowie einem Drehwinkel um diese Achse beschrieben werden. 

Für dieses Beispiel wurden die Szenen Primitive, Flasche, Text und Avatar importiert und einander angepaßt. 

Zwei Orientierungs-Interpolatoren sorgen für fortdauernde Animation. Der eine Interpolator generiert Werte zur Rotation der gesamten Szene um die y-Achse. Der andere ist für eine zusätzliche, doppelt so schnelle Rotation der vier Primitiven um ihre lokale z-Achse zuständig. Auf diese Primitiven wirken somit zwei Rotationsbewegungen. 

Betreten Sie eine der sich drehenden Plattformen und prüfen Sie, ob Sie sich auf dieser von alleine mitdrehen! Positionieren Sie sich daraufhin so, daß Sie entweder mit der gelben Kugel oder mit dem roten Würfel kollidieren! Werden Sie durch dieses Primitiv von der Plattform geschoben?

 
Ein Skalar-Interpolator dient zur Interpolation von einzelnen Gleitkomma-Parametern. Mit ihm können interpolierte Werte unter anderem für Länge und Radius von Geometrien sowie Intensität und Reichweite von Licht ermittelt werden. 

An dieser Stelle sollen die Eigenschaften von Licht verändert werden. Zur Demonstration wurde das Blickpunkt-Beispiel benutzt und ein Punktlicht über der linken hinteren Ecke des Höhengitters hinzugefügt. Die Helmlampe wurde deaktiviert. 

Anfangs wird die Landschaft nicht beleuchtet, d.h. sie ist nicht zu sehen. Innerhalb von 20 Sekunden wird die Reichweite des Punktlichtes auf die ganze Szene ausgedehnt und wird die Licht-Intensität auf das Maximum erhöht. 

Zur Veränderung sowohl der Reichweite als auch der Intensität des Punktlichtes wird jeweils ein Interpolator benötigt. Beide Interpolatoren erhalten von einem Zeit-Sensor kontinuierlich Ereignisse mit dem Bruchteil eines 20-Sekunden-Intervalls. Die Stützstellen und die zugehörigen Funktionswerte sind nicht linear angeordnet, so daß die Reichweite und die Intensität ungleichförmig zunehmen. 

Wählen Sie gleich am Anfang im Steuermenü den Blickpunkt Draufsicht aus, um die gesamte Szene überschauen zu können! 

 

Integration von JavaScript

 
 
Die Integration von JavaScript soll an einem einfachen Beispiel, der Anzeige der aktuellen Weltkoordinaten des Avatars, verdeutlicht werden. 

Das zu untersuchende Objekt (Flaschen-Beispiel) befindet sich innerhalb eines Würfels, welcher die Grenzen eines Regionüberwachungs-Sensors symbolisiert. Die vom Sensor erzeugten Ereignisse werden dem Skript-Knoten zugeleitet, welcher die JavaScript-Anweisungen enthält. Diese Anweisungen erzeugen aus den laufenden Positionsangaben eine Zeichenkette, die letztendlich zum Text-Knoten gesendet und von diesem in einem kurzen Abstand vor dem Avatar dargestellt wird. Dazu bedarf es des Empfangs der aktuellen Koordinaten des Avatars mit nachfolgender Transformation. 

Wird beim Navigieren die Sensor-Grenze überschritten, beginnt bzw. endet die Textdarstellung. Jede Bewegung innerhalb des Sensor-Raumes führt zu laufend aktualisierten Koordinatenwerten. 

Knobelaufgabe: Messen Sie die Füllhöhe der Flüssigkeit in der Flasche! 

  

Anker

 
Ein Anker realisiert über einen URL einen Hyperlink im WWW, der auf eine Datei beliebigen Typs verweist. 

In diesem Beispiel wurden insgesamt acht Anker definiert, welche jeweils einer Geometrie zugeordnet sind. Jede Geometrie wurde aus einer Kugel, drei Quadern und einem erläuternden Text gebildet. Die zuvor rotierten Quader und die Kugel wurden an der gleichen Position dargestellt, wodurch die Spitzen der Quader quasi aus der Kugel herausragen. Der Text wurde als Plakattafel realisiert und darüber angeordnet. 

Weil die meisten Eigenschaften der Geometrien identisch sein sollen, bot sich die Definition eines Prototyps an, der achtfach instanziert wurde. Für jede Instanz wurden URL, zugehörige Beschreibung, Text, Position und falls notwendig, von den Standardeinstellungen abweichende Farben angegeben. 

Die verschiedenen  Farben der Geometrien symbolisieren unterschiedliche verknüpfte Dateitypen (Kugelfarbe: VRML-Welten = rot, HTML-Seiten = blau, Text-Dateien = lila und MIDI-Dateien = gelb). 

Durch simples Anklicken der Geometrien erfolgt entweder ein Sprung zum jeweiligen Dokument oder es wird eine MIDI-Sequenz abgespielt. 

 
  

Detaillierungsgrad

 
 
In diesem Beispiel soll in fünf Stufen ein unterschiedlicher Detaillierungsgrad demonstriert werden. In Abhängigkeit vom Abstand zwischen aktueller Betrachterposition und dem Quader wird die Textur auf seiner Oberfläche mit verschiedener Auflösung dargestellt. Dazu wurde eine aufsteigend sortierte Entfernungsliste angegeben, welche die jeweiligen Grenzen für die Umschaltung bestimmt. Optisch wurden diese Bereiche durch die verschieden Farben der Grundfläche veranschaulicht, welche aus vier extrem flachen Zylindern gebildet wurde. Zur deren besseren Sichtbarkeit wurde ein Punktlicht integriert. 

Bewegen Sie sich langsam auf den Quader zu und entfernen Sie sich wieder! Bei jedem Übertreten einer Grenze ist der Wechsel zwischen feinerer und gröberer Auflösung der Textur deutlich zu erkennen. Außerhalb des äußersten Ringes besitzt der Quader keine Textur mehr, stattdessen nur eine Farbe. 


Kollision

 
Kollisionen werden immer nur zwischen Avatar und Objekten ausgewertet, niemals zwischen mehreren Objekten. 

Der Eintrittspunkt in die Szene befindet sich inmitten eines sehr großen Polygon-Würfels, dessen Wände einen bunt gemischten Farbverlauf besitzen. Innerhalb dieses Würfels befinden sich das importierte Kugelhaufen-Beispiel und eine graue Polygon-Pyramide. Sowohl für die Pyramide als auch für den Würfel wurde die Kollisionserkennung unterdrückt, wodurch beide (genauer deren Wände) ungehindert durchdrungen werden können. Die Wände beider Polygon-Körper sind von außen und von innen definiert, d.h. beidseitig sichtbar. 

Die Plattform samt Kugelhaufen wird auf Kollision geprüft, indem stellvertretend für diese relativ komplizierte Geometrie eine unsichtbare Kugel als vereinfachte Struktur tritt. Diese Kugel hat den gleichen Radius wie die Plattform, so daß diese sich nicht betreten läßt bzw. ein Näherkommen zum Kugelhaufen unmöglich ist. 

Versuchen Sie, zum Kugelhaufen zu gelangen! Betreten Sie anschließend die Pyramide und navigieren Sie um das in deren Bodenmitte liegende weiße Ei! Verlassen Sie daraufhin den großen bunten Polygon-Würfel und betrachten Sie ihn von außen! (Der Flug-Modus ist fest eingestellt.) 

 

Plakattafel

 
Alle einer Plakattafel untergeordneten Geometrien richten sich nach der Betrachterposition aus. In diesem Beispiel wurden zwei Plakattafeln definiert, eine enthält die geometrischen Primitiven, die andere einen Würfel nebst aufgebrachter Textur. Der Text über der Grundebene hat keine bestimmte Bedeutung, er wird nur als optisches Bezugssystem verwendet, um den Effekt der Plakattafeln zu verdeutlichen. Zusätzlich wurde ein Spotlicht integriert. 

Während der Navigation rotieren die Primitiven derart um die y-Achse, daß die blaue Kugel immer von den drei anderen überdeckt wird. Für den Würfel inklusive seiner Textur wurde keine Rotationsachse festgelegt. 

Navigieren Sie im Flug-Modus über die Primitiven bzw. über die Textur! Beachten Sie, daß die Textur sich immer frontal zu Ihnen ausrichtet, die Primitiven hingegen auch von weiter oben betrachtet werden können, obschon die blaue Kugel stets die Entfernteste bleibt! 

Alternativ könnte auch der Text einer Plakattafel zugeordnet werden. Er wäre dann immer von vorn lesbar. 

 

Referenzierung

Zur Demonstration der Referenzierung wird das Töne-Beispiel herangezogen. Dort wurde dem mit Gitter bezeichneten Gruppenknoten unter anderem ein Drahtgitter-Quader und eine Kugel untergeordnet. Anschließend wurde diese Instanz unter Verwendung ihres Namens zweimal referenziert, wodurch insgesamt drei völlig identische Gruppenknoten vorlagen. Die beiden Referenzen mußten natürlich noch an die vorgesehene Stelle verschoben werden. 
 

Prototypen

 
In diesem Beispiel wurde ein neuer Knotentyp Baum als Prototyp definiert und anschließend dreimal instanziert. 

Durch Einsatz dieses Prototypen läßt sich verblüffend einfach ein Wald durch mehrfache Instanzierung darstellen. Es ist z.B. nicht mehr notwendig, einen Baum-Knoten einem Transformations-Knoten unterzuordnen, um ihn zu positionieren oder in der Größe anzupassen. Die Werte für sowohl Translation als auch Skalierung sind direkte Eigenschaften eines Baums. 

Für den Knotentyp Baum wurden sinnvolle Standardeinstellungen, wie die Geometrie und Farbe des Stammes sowie des Laubs, definiert. 

Allen drei Baum-Instanzen wurde eine neue Größe zugewiesen. Zusätzlich erhielt der erste Baum eine Textur für seinen Stamm und der zweite Baum eine neue Farbe für sein Laub. 

Die Definition des Prototyps könnte sich auch in einer separaten Bibliotheks-Datei befinden, um ihn für andere Szenen ebenso zugänglich zu machen. 


Einbettung in HTML

 
Dieses Quellcode-Beispiel stellt ausnahmsweise keine VRML-Szene dar, sondern eine HTML-Seite. Die Besonderheit dieser HTML-Seite liegt darin, daß in ihr ein rechteckiger Bereich definiert wurde, in welchem eine VRML-Szene nebst Bedienfläche des VRML-Viewers eingebettet worden ist. Dies soll demonstrieren, daß eine Szene nicht gezwungenermaßen im Vollbildschirm ablaufen muß, sondern daß sie auch an beliebiger Stelle und in beliebiger Größe in einer HTML-Seite plaziert werden kann. 

Eine andere Variante der parallelen Darstellung von HTML und VRML ist die Vereinbarung von Frames, wobei das HTML-Browser-Fenster in verschiedene Segmente unterteilt wird, in denen unterschiedliche Inhalte geladen weren können. 

Copyright  ©  Dirk Wunderlich  (10. Semester Wirtschaftsinformatik)  am 25. September 1998
08056 Zwickau  /  Humboldtstraße 2a  /  Tel.: +49(0)375-213720