Index

file:///D|/vrmltoword/index.html

Seminar Webpublishing WS'98/'99

VRML / Virtual Reality Modelling Language Referent: Carsten J. A. Heuermann Dozent: Prof. O. Vornberger

1 of 1

11.04.98 13:52

Inhalt

file:///D|/vrmltoword/vrmlinhalt.html

Einführung in VRML Was ist VRML Erstellen von VRML-Dateien Ansehen von VRML - Dateien Beispiele VRML / Virtual Reality / Java / HTML Einsatzgebiete Geschichte VRML 1.0 / VRML 2.0 Der VRML-File Wieviele VRML-Knoten gibt es?

Objekte und Attribute Der Transform-Knoten Der Group-Knoten Der Collision-Knoten Die DEF und USE Statements Der Proto- und EXTERNPROTO-Knoten Der Definition des Knotens a. b. c. d.

field eventIn eventOut exposedField

Die Datentypen

Syntax und Struktur Die Knoten WorldInfo und NavigationInfo Die Mapping-Knoten in VRML a. b. c. d.

ImageTexture MovieTexuture PixelTexture TextureTransform

Die beiden Knoten Text und FontStyle Der ElevationGrid-Knoten Der Extrusion-Knoten Die IndexedSet-Knoten a. IndexedFaceSet b. IndexedLineSet c. PointSet Alle Knotenspezifikationen

1 of 2

11.04.98 13:53

Inhalt

file:///D|/vrmltoword/vrmlinhalt.html

Sound und Sensoren Der Sound- und AudioClip-Knoten Das ROUTE Statement Der TouchSensor Der ProximitySensor Der VisibilitySensor Der TimeSensor Der PlaneSensor Der CylinderSensor Der SphereSensor

Licht Der Fog-Knoten Der Background-Knoten Lichtarten in VRML Das PointLight Das DirectionalLight Der SpotLight

Kamera Der Viewpoint-Knoten Der Anchor-Knoten Der Billboard-Knoten Der LOD-Knoten

Aktionen Der Switch-Knoten Der Script-Knoten

2 of 2

11.04.98 13:53

Begriff

file:///D|/vrmltoword/begriff.html

Einfürung in VRML Was ist VRML? Virtual Reality Modelling Language (ausgesprochen "Wörml") File Format in Text Form (UTF8) 3D Beschreibungssprache für das Internet

1 of 1

11.04.98 13:54

Titel

file:///D|/vrmltoword/erstellen.html

Einfürung in VRML Erstellen von VRML-Dateien mit einem beliebigen Texteditor viele 3D Modeller (z.B. 3D Studio MAX, AC3D) Authoring Tools (V-Builder, Cosmo Create, 3DSony Community Place Conductor)

1 of 1

11.04.98 13:54

Plugin's

file:///D|/vrmltoword/plugins.html

Einfürung in VRML Ansehen von VRML-Dateien Browser und Plugins CosmoPlayer Live3D Blaxxun CCPro Sony's Community Place Liquid Reality VRwave

1 of 1

11.04.98 13:55

Beispiele

file:///D|/vrmltoword/beispiele.html

Einfürung in VRML Beispiele Drache Schach

1 of 1

11.04.98 13:56

VRML / VR

file:///D|/vrmltoword/vrmlvr.html

Einfürung in VRML VRML / Virtual Reality / Java / HTML

VRML HTML Beschreibungssprache 2D vor allen Text leicht per Hand zu erstellen

VR nicht auf jeder Plattform hoher Geräteaufwand hohe Rechnerleistung

Quicktime VR statisches File keine Animationen nur Anschauen möglich

1 of 1

Beschreibungssprache 3D grafische Objekte, Beleuchtung etc. sehr komplex ohne Authoring Tool aufwendig

VRML Plattform unabhängig geringer Geräteaufwand auch mit mässiger Rechnerleistung

VRML veränderbar Interaktion Animation

11.04.98 13:56

Einstazgebiete

file:///D|/vrmltoword/wofuer.html

Einfürung in VRML Einsatzgebiete Virtual Shopping Virtual Communities Online Conferencing Architektur Stadtplanung Unterhaltung Kunst u.v.a.

1 of 1

11.04.98 13:57

Geschichte

file:///D|/vrmltoword/geschichte.html

Einfürung in VRML Geschichte Entstehungsjahr 1994 1. WWW Conference in Genf Mark Pesce, Tony Parisi Prototyp eines ersten VRML-Browsers namens Labyrinth Erstes Interface zur Darstellung von 3D im Web Einrichtung einer www-vrml Mailing List OpenInventor als File Format

1 of 1

11.04.98 13:57

VRML 1.0 / VRML 2.0

file:///D|/vrmltoword/vrml12.html

Einfürung in VRML VRML 1.0 statische Welten keine Interaktion Hyperlinks Level of Detail File Format beschränkt auf Ascii Zeichensatz

VRML 1.0 Von sechs Firmen Vorschläge zu VRML 2.0 (IBM Japan, Apple, GMD, SGI, SUN und Microsoft) Moving Worlds von SGI neuer Standard Erweiterte statische Welten (Movie Texture, Sound, Interpolation, Effekte) Erweiterter Zeichensatz UTF-8 Prototyping Interaktionen Animationen und Behavior Scripting Einsatzmöglichkeiten für Avatare

1 of 1

11.04.98 13:57

Strucktur

file:///D|/vrmltoword/struct.html

Einfürung in VRML VRML File 1. Header Eine VRML 2.0-Datei muß immer mit der folgenden Zeile beginnen: #VRML V2.0 utf8

Die Versionsnummer ist wichtig, da die Version 2.0 nicht kompatibel ist zu 1.0. UFT8 ist eine spezielle Codierung von UNICODE mit der Besonderheit, daß es im wesentlichen kompatibel zu US-ASCII (7-Bit) ist, so daß VRML-Dateien mit normalen Texteditoren bearbeitet werden können.

2. Kommentare Kommentare werden in eine VRML-Datei durch daß Zeichen "# " gekennzeichnet. Alle Zeichen in dieser Zeile werden ignoriert.

3. Szenengraph Die 3-dimensionale Welt einer VRML-Datei kann mittels eines Szenengraphen beschrieben werden. Dieser gerichtete, acyclische Graph (man könnte auch Baum sagen) enthält die Informationen, die zum Darstellen der Welt nötig sind.

In VRML unterscheidet man grundsätzlich 2 Arten von Knoten. Zum einen die Gruppenknoten wie "Welt" und "Haus", die selbst beliebig viele andere Knoten enthalten dürfen. Zum anderen sind da die Blattknoten, die ein konkretes Objekt der Welt darstellen, wie z.B. "Kopf" oder "Dach". Bei der Darstellung wird der Graph von oben nach unten traversiert, d.h. Rotations- und Translationsinformationen werden von oben nach unten "weitergereicht".

1 of 2

11.04.98 13:58

Strucktur

file:///D|/vrmltoword/struct.html

4. Aufbau der Knoten Knoten bestimmen Aussehen (Blattknoten) und Stuktur (Gruppenknoten) der Szene. Einzelne Knoten können ein oder mehrere Felder enthalten, die den Knoten näher bestimmen. Die Felder bestehen aus einem Feldnamen und einem Wert. Der Wert hat einen bestimmten Typ (z.B. Vektor, Farbe oder ein bestimmter Knotentyp). sphere { radius 5 }

Der "sphere"-Knoten enthält ein "radius"-Feld, das den Integerwert 5 hat. Die Werte bei Längenangaben sind immer "virtuelle" Meter.

5. Knotennamen Zur leichteren Handhabung können Knoten auch benannt werden. Dies geschieht mit der DEF-Anweisung: DEF

Name Knoten {...}

Knoten, die einen Namen haben können mit der USE-Anweisung wiederverwendet werden.

2 of 2

11.04.98 13:58

Anzahl der VRML-Knoten

file:///D|/vrmltoword/nrnodes.html

Einfürung in VRML Wieviele VRML-Knoten gibt es? Die Knoten sind die Grundlegenden Einheiten der 3D Welten. In VRML gibt es neben den 'Basic-Nodes' (50), spezielle Knoten wie z.B.: PROTO, EXTERNPROTO das Statement IS die Schlüsselwörter DEF USE und ROUTE Zusammen gibt es also 56 VRML-Knoten.

1 of 1

11.04.98 13:58

Transform

file:///D|/vrmltoword/transform.html

Objekte und Attribute Der Transform Knoten Der Transform Knoten faßt seine children Knoten aus dem children Feld zu einer Gruppe zusammen. Er ist somit ein parent Knoten für seine Unterknoten und alle Transformationen wirken sich auf diese aus. Der Transform Knoten beinhaltet zudem noch die Felder bboxCenterund bboxSize. Diese Felder signalisiren dem Browser ob die children Knoten gerendert werden müssen. Die Werte im translation Knoten verschieben die XYZ-Koordinaten. Wenn ein Transform Knoten als children Knoten eines anderen eingetragen ist, bezieht sich die Translation relativ zum darüberliegenden. Der Transform-Knoten

1 of 1

11.04.98 13:58

Grouping in VRML

file:///D|/vrmltoword/group.html

Objekte und Attribute Der Group Knoten In VRML wird wie schon gesagt alles in einem Szenengraphen dargestellt. Der Group-Knoten ist dem Tranformatinsknoten ähnlich, er enthält ebenso die Felder "bboxCenter" und "bboxSize" wie auch das children-Feld für die untergebenden Knoten. Allerdings enthält er nicht die Transformeigenschaften wie Repositionierung, Rotation etc. Der Group-Knoten

1 of 1

11.04.98 13:59

Kollision

file:///D|/vrmltoword/collide.html

Objekte und Attribute Der Collision Knoten Der Kollisionsknoten hat zwei Felder mehr als der Group-Knoten. Mit dem Kollisionsknoten kann man die Knoten Definition, auf die die eingeschaltete Kollisionsabfrage eine Effekt haben soll. Das "proxy"-Feld gibt die Größe der unsichtbaren Barriere um ein Objekt an. Dies kann man dazu nutzen eine "einfache" Barriere um ein komplexes Objekt zu bauen. Das zweite zusätzliche Feld ist dazu da die Kollision ein und aus zuschalten. Der Collision-Knoten

1 of 1

11.04.98 13:59

DEF / USE

file:///D|/vrmltoword/defuse.html

Objekte und Attribute DEF / USE Der schon erwähnte DEF-USE-Mechanismus ist auch den Gruppenknoten zuzuordnen. Die Knotengruppe welche über DEF bezeichnet wird, kann über USE wieder in den Scenengraph eingefühgt werden. Der Vorteil ist das für identische Objekte keine Codeverdoppelung statt findet.

1 of 1

11.04.98 14:00

Proto

file:///D|/vrmltoword/proto.html

Objekt und Attribute Proto / Externproto Manchmal ist es gut wenn man in VRML micht nur ein Objekt wiederverwenden kann, sondern dabei auch die Felder modifizieren kann. Hierfür wird der spezielle PROTO-Knoten in VRML verwendet. Der Prototype ist erstmal in der Scene nicht zu sehen, und seine Felder sind Variabel. So ein PROTO kann ein einfacher Knoten sein, aber auch ein komplexes Gebilde mit Sound etc. Neben dem PROTO-Knoten der in den VRML-File steht, wo eine oder mehrere Instanzen verwendet werden, gibt es auch noch den EXTERNPROTO. Dieser unterscheidet sich eigendlich nur dadurch das er in einer externen Datei gespeichert ist.

1 of 1

11.04.98 14:00

file:///D|/vrmltoword/knotendefs.html

Objekte und Attribute Definition des Knoten Public Interface

Über die fields werden die Knoten gediniert. Ein Feld hat vier Komponenten: Field Type, Data Type, Field Name, Default Value. Die Vier Field Typen

Diese sind: field, eventIn, eventOut, exposedField. Die beiden Field Typen eventIn, eventOut haben keine Default Wert. Die neun Grundtypen in die die VRML-Knoten eingeteilt werden kann man bei der Knoten-Format-Spezifikation nachlesen. field

Ein field definiert die Grundattribute eine Knotens. Seit VRML 2.0 können die Werte dieses Feldes zu Zeit des Browsens geändert werden. eventIn

Das eventIn Feld ist eine Inputmöglichkeit zu den Knotenfeldern. Daten können während des Browsens über dieses Feld in den Knoten gelangen. Wenn der Knoten kein eventIn-Feld eines Types hat, ist dieses Feld nicht änderbar. Das ElevationGrid zum Beispiel, hat ein eventIn-Feld mit dem Namen set_height

Damit kann man den Wert vom Feld height

während des Browsens ändern. Als Beispiel die VRML-Datei Wavygrid.wrl Hier wird über ein VRML-Skript nach einem Touch-event übr set_height die Wellen erzeugt. eventOut

Das eventOut Feld ist der Output eines Knotens. Die ausgehenden Daten aus eventOut-Feldes können zu einem eventIn-Feld eines beliebigen Knotens gerouted werden, solange die Typen von eventIn und eventOut gleich sind. Ein collide-Knoten gibt über das collideTime eventOut die genaue Zeit einer Kollision mit einem seiner children-Knoten an. Dieses kann dann z.B. dazu genutzt werden über den startTime eventIn des AudioClip-Knotens einen Audiofile wieder zu geben (z.B. ein crash). Als Beispiel die VRML-Datei eventOutexample.wrl exposedField

1 of 2

11.04.98 14:01

file:///D|/vrmltoword/knotendefs.html

Das exposedField Feld ist eine Vereinigung der Felder eventIn und eventOut. Über dieses Feld können Daten in den Knoten gelangen und auch wieder verlassen ohne entsprechende eventIn und eventOut Fleder zu besitzen.

2 of 2

11.04.98 14:01

Datentypen

file:///D|/vrmltoword/datentypen.html

Objekte und Attribute Datentypen Das Feld Datentypen kann man grob in zwei Hauptgruppen unterteilen. Zum einen die "SF" (singel-valued field) Einzelwertfelder, und die "MF" (multiple-valued field) Mehrwertfelder. SFBool SFFloat SFInt32 SFTime SFVec2f SFVec3f SFColor SFRotation

1 of 1

SFImage SFString SFNode

Booleanwert TRUE oder FALSE 32-bit floating point Wert (geschrieben als "mixed decimal numb 32-bit signed integer (decimal oder hexadecimal (0x an Anfang)) Absoluter oder Revativer Zeitwert Zwei floating point Werte (in der Datei werden sie durch ein "w Drei floating point Werte (in der Datei werden sie jeweils durc Drei floating point Werte, jeder zwischen 0 und 1 für die RGB-F Vier floating point Werte (die Drei ersten Werte repräsentieren die Achsen X,Y,Z der vier Ein zwei dimensionales Bild mit ein bis vier Farbkomponenten. Ein UTF8 String. Ein Container für VRML-Knoten (im allgemeinen children-Knoten)

MFFloat MFVec3f MFColor MFRotation MFString MFNode MFTime

Ein Ein Ein Ein Ein Ein Ein

Array Array Array Array Array Array Array

von von von von von von von

SFFloat Werten SFVec3f Werten SFColor Werten SFRotation Werten SFString Werten VRML-Knoten SFTime Werten

11.04.98 14:01

WorldInfo / NavigationInfo

file:///D|/vrmltoword/worldNavaInfo.html

Syntax und Struktur WorldInfo Über die beiden Felder info und title des WorldInfo-Knoten kann man Titel und Copyright Informationen in den VRML-File schreiben. Die Felder können jede beliebige länge habe. Der WorldInfo-Knoten besitzt keine event Felder.

NavigationInfo Über den NavigationInfo-Knoten kann man einige initiale Werte für die VRML-Welt setzen. Der NavigationInfo-Knoten enthält fünf exposedField und je ein eventIn und ein eventOut Feld. Über das exposedField avatarSize können die drei Werte für 1. Radius des Avatar´s (für Collisionen DEFAULT-Wert = 0.25 Meter) 2. Höhe des Avatar´s (DEFAULT-Wert = 1.6 Meter) 3. Schritthöhe des Avatar´s (Dieser Wert gibt die Höhe an die der Avatar seinen Fuß heben kann DEFAULT-Wert = 0.75) Über das expiosedField headlight kann man die "Bergmannslampe" des Besuchers ein (TRUE) und ausschalten (FALSE) Über das Feld type kann die Art der Bewegung in der Welt eingestellt werden. Mit ANY läßt man alle Fortbewegungsarten zu. Ein sehr wichtiges Feld ist das visibilityLimit Feld, über das man die Distanz einstellen kann ab dem ein Objekt nicht mehr gerendert wird. Die Distanz wird in Metern zwischen dem Objekt und dem Besucher der Welt gemessen. Hiermit kann man eine Geschwindigkeitsverbesserung von komplexen Welten erreichen. Mam kann soviele NavigationInfo Knoten wie man will in eine VRML-Datei schreiben, allerdings kann immer nur einer in der 3D Welt aktiv sein. Dies wird über das eventIn set_bind gemacht.

1 of 1

11.04.98 14:01

Texturknoten

file:///D|/vrmltoword/TextureNodes.html

Syntax und Struktur Der ImageTexture-Knoten Der ImageTexture-Knoten ist die meist genutzte Möglichkeit um Texturen auf ein Objekt zu bekommen. Über das exposedField url kann man die relative oder absolute Adresse des 2D Bild für das Objekt angeben. In VRML 2.0 werden nur die Bildformate GIF und JPEG unterstützt. Ein Beispiel Imagetex.wrl Der ImageTexture-Knoten

Der MovieTexture-Knoten Der MovieTexture-Knoten ermöglicht es einen Film auf einem Objekt abzuspielen. Wie bei der ImageTexture kann die Adresse relativ oder absolut angegeben werden. Interessant ist auch die Möglichkeit den Film einmal oder im Loop abzuspielen. Über speed kann man den Film wie im Zeitraffer schneller abspielen (Hierfür wir der Wert von speed größer 1 gesetzt.) Ebenso kann der Film in Zeitlupe mit einem Wert kleiner 1 für speed abgespielt werden. Über die Felder startTime und stopTime kann der Film beliebig über ROUTE gestartet und gestopt werden. In VRML 2.0 werden nur die Formate AVI und MPEG unterstützt. Wenn die Startzeit in der Vergangenheit liegt und der Wert von loop TRUE ist, wird der Film ohne Sensor durchgehend abgespielt. Da in so einem Moviefile auch Sound mitgespeichert sein kann, kann man die MovieTexture auch als Soundquelle mißbrauchen, indem man die MovieTextur mit Sound einem in der Szene unsichtbarem Objekt zuweißt. Ein Beispiel MovieTex.wrl

Der MovieTexture-Knoten

Der PixelTexture-Knoten Der PixelTexture-Knoten ermöglicht es die Textur eines Objektes Pixelweise anzugeben. Somit kann man auch während des Browsens die Textur verändern. Ein Beispiel Pixeltex.wrl Der PixelTexture-Knoten

Der TextureTransform-Knoten Über den TextureTransform-Knoten kann man die das mapping geeinflußen. Normalerweise wir eine Textur links oben an Objekt angelegt. Über diesen Knoten kann man angeben wo entlang der X - und Y - Achse das Bild anfangen soll, zudem kann man auch über scale das Bild in X und Y Richtung scalen. Über die Felder rotation und center kann man die Rotation des Bildes auf dem Objekt und das Zentrum um das die Rotation passieren soll angeben. Ein Beispiel texTrans.wrl

1 of 2

11.04.98 14:02

Texturknoten

file:///D|/vrmltoword/TextureNodes.html

Der TextureTransform-Knoten

2 of 2

11.04.98 14:02

Text und FontStyle

file:///D|/vrmltoword/textfont.html

Syntax und Struktur Text und FontStyle Knoten ext kann man über zwei Möglichkeiten in ein VRML-File bekommen, zum einen über das schon beschriebene Texturemapping oder direkt über den Text-Knoten. Der Textknoten hat vier Felder, über string wir der zu setzende Text angegeben. Über maxExtent kann die maximale Länge des Textes festgelegt werden. (Der DEFAULT-Wert von 0 bedeutet keine Beschränkung) Das length Feld enthält die Werte für die Zeilenlänge. Ein Beispiel HelloWorld.wrl Der Text-Knoten Das fontStyle Feld kann nur einen FontStyle-Knoten enthalten. Hierüber kann man die family mit SANS oder TYPEWRITER angeben. Über style kann man den Style der Schrift mit PLAIN, BOLD, BOLD-ITALIC oder ITALIC angeben. Über die anderen Felder werden Größe, Ausrichtung Sprache etc. beeschrieben. Ein Beispiel HelloWorldMF.wrl Der FontStyle-Knoten

1 of 1

11.04.98 14:02

ElevationGrid

file:///D|/vrmltoword/ElevationGrid.html

Syntax und Struktur Der ElevationGrid-Knoten Der ElevationGrid-Knoten ist zur Erzeugung von großen Flächen in VRML. Mit ihm kann man sehr gut Berge o.ä. erzeugen. Es wird ein Gitter in xDimension und zDimension aufgespannt, und man kann über das set_height eventIn die Höhe jedes einzigen Punktes setzen. Die Liste der Punkte wird im height field vom oberen linken Punkt bis zum unteren rechten Punkt angegeben. Über die xSpacing und zSpacing fields wird die Distanz zwischen den Punkt in x und z Richtung angegeben. Das color field ist dazu da ein Color-Knoten aufzunehmen. Über diesen Knoten wird in RGB-Werten die Farbe der einzelnen "face" von oben links nach unten rechts angegeben wenn der Wert von colorPerVertex FALSE ist. Wenn colorPerVertex TRUE ist, werden die Farben den einzelnen "Vertex" zugeordnet. Über den TextureCoordinate Knoten könne Koordinaten angegeben wie eine Textur auf das Objekt aufgebracht werden soll. Über die Felder ccw und solid wird die Sichtbarkeit des ElevationGrid definiert. Wenn der Wert von solid FALSE ist, muß der Browser beide Seiten rendern, was mehr Rechenaufwand ist. Bei den Wert TRUE wird nur eine Seite gerendert, da angenommen wird das das Objekt massiv ist. Über ccw kann die Außenseite des Objektes definiert werden. Auch kann man über die Felder normalPerVertex und normal einstellen wie sich Licht verhält wenn es auf das Grid fällt. Hierzu lesen Sie bitte in der VRML-Spezifikation 6.71 nach. Ein Beispiel ElevationGrid.wrl Der ElevationGrid-Knoten

1 of 1

11.04.98 14:03

Extrusion

file:///D|/vrmltoword/Extrusion.html

Syntax und Struktur Der Extrusion-Knoten Viele komplex erscheinende Objekte haben eine Symetrieachse, und genau diese Objekte kann man mit dem Extrusion-Knoten sehr einfach erzeugen. Über das crossSection Feld wird ein Shape durch x und z Werte angegeben die entlang des Path aus den spine Feld erzeugt. Über scale und orientation kann wie immer größe und Orientierung des Objektes bewinflußt werden. Die Werte können auch zu Zeit des Browsens über die eventIn´s des Knotens geändert werden. Wenn man den Wert von beginCap und endCap auf FALSE setzt kann man das Objekt uznsichtbar machen. Die Felder ccw,solid usw. haben die selbe Bedeutung wie beim ElevationGrid-Knoten. Ein Beispiel Extrusion.wrl Der Extrusion-Knoten

1 of 1

11.04.98 14:03

IndexedFaceSet / IndexedLineSet / PointSet

file:///D|/vrmltoword/IndexedFLP.html

Syntax und Struktur Der IndexedFaceSet-Knoten Der IndexedFaceSet-Knoten ist des komplexesten Knoten in VRML. Hiermit kann man ein sehr komplexes Objekt in einem Array aus Punkten angeben. Viele 3D-Modeller geben genau diesen Knoten als VRML 2.0 Export aus. Hiermit kann man sehr realistische Objekte in VRML bauen, allerdings muß man immer zwischen Realismus und Performance unterscheiden. Denn ein sehr realistisches Objekt kann leicht einen IndexedFaceSet-Knoten von mehreren Seiten Code erfordern. Über das coordIndex Feld werden Punkte im 3D-Raum angegeben, dabei ist die Reihenfolge egal, wichtig ist nur das der Punkt ein "Vertex" es Objektes ist. Abgeschlossen wir das Array von Punkten mit dem Wert -1. Über den color-Knoten werden wieder die Farben angegeben, und über das colorIndex Feld kann angegeben werden wie die Farben verwendet werden sollen. Auch in diesem Knoten gibt es wieder das colorPerVertex Feld. Bei den Farben muß man bedenken, das wenn der Wert von solid FALSE ist die Farben auf beide Seiten des Objektes gerendert werden, was ein sehr großer Rechenaufwand ist. Über das creaseAngel Feld kann man wie beim ElevationGrid-Knoten einen Winkel zum glätten des Objektes angeben. Über die ganzen eventIn´s können die Werte auch wieder während des Browsens geändert werden Ein Beispiel IndexedFaceSet.wrl Ein großes Beispiel Eiffel Tower.wrl Der IndexedFaceSet-Knoten

Der IndexedLineSet-Knoten Der IndexedLineSet-Knoten ist einfacher als der IndexedFaceSet-Knoten. Er wird dazu verwendet Linien in die 3d-Welt zubringen. DAmit kann man gut Dräte und Antennen erzeugen. Übr das coord Feld wird ein Coordinate-Knoten eingehängt der die Anfangs- und Endpunkte der Linie angibt. Die Reihenfolge der Verbindungen der Punkte wird über den coordIndex-Knoten angegeben. Auch kann wieder über die Felder colorIndex und colorPerVertex die Farbgebung beeinflußt werden. Auch hier kann man über die eventIn´s set_coordIndex und set_colorIndex Veränderungen während des Browsens vornehmen. Ein Beispiel IndexedLineSet.wrl Der IndexedLineSet-Knoten

Der PointSet-Knoten DEr PointSet-Knoten ist mit der einfachste noten VRML, denn damit kann man einfach Punkt in der 3d-Welt setzen und ihnen noch eine Farbe zuordnen. Über das coord Feld wird ein Coordinate-Knoten angegeben in dem die Punkte in beliebiger Reihenfolge stehen. Zudem gibt es noch das color Feld, über das ein Color-Knoten angegeben wird. den PointSet-Knoten kann man gut dazu verwenden um Sterne oder dergleichen zu produzieren. Ein Beispiel PointSet.wrl

1 of 2

11.04.98 14:03

IndexedFaceSet / IndexedLineSet / PointSet

file:///D|/vrmltoword/IndexedFLP.html

Der PointSet-Knoten

2 of 2

11.04.98 14:03

Sound / AudioClip

file:///D|/vrmltoword/SoundAudio.html

Sound und Sensoren Der Sound-Knoten Um die 3d-Welt interessanter zu machen kann man auch Sound´s einbauen. Über das spatialize Feld kann man angeben ob eine Soundquelle überall zuhören (FALSE) ist oder ob die Angaben vom maxBack, maxFront, minBack und minFront einen Effekt haben (TRUE). Im allgemeinen sind Sound-Knoten in Gruppenknoten eingehängt und ihre Position wird darüber angegeben. Wenn dies nicht der Fall ist, ist die Position wie bei allen VRML-Knoten der Null-Punkt (0 0 0). Über das intensity Feld kann die Lautstärke der Soundquelle von 0 (aus) bis 1 (volle Lautstärke) angegeben werden. Das direction Feld gibt einen Punkt im 3d-Raum an in die die Soundquelle zeigt. Über die minBack und minFront Felder wird die Entfernung vom Ursprung der Soundquelle angegeben in der der Sound noch mit voller Lautstärke zu hören ist. Wenn diese Werte gleich sind, ist das Zentrum der Soundquelle gleich der Position im des Knotens im Raum. Die maxFront und maxBack Felder geben somit den Bereich an in dem der Sound maximal noch zu hören ist bzw. wann sich die Lautstärke auf null reduziert hat. Über das priority Feld kann die "Wichtigkeit" des Sounds eingestellt werden, dies ist wichtig für den Fall das ein Client-Computer nicht mehrere Sound´s gleichzeitig abspielen kann. Es wird dann immer der Sound gespielt der die höhst Priorität hat. Die eigendliche Soundquelle wird über das source Feld angegeben. Ein Beispiel Sound.wrl Der Sound-Knoten

Der AudioClip-Knoten Über den AudioClip-Knoten gibt man an wo die Soundfile zu finden ist, wann und wielange mit welcher Geschwindigkeit er abgespielt werden soll. Über das url Feld wird die absolute oder relative Adresse des Soundfiles angegeben. VRML unterstützt das WAVE und MIDI Format. Mit dem Trick ein Video über den MovieTexuture-Knoten auf ein unsichtbares Objekt zu legen kann man auch den Soundanteil aus MPEG und AVI File als Soundquelle mutzen. Das description Feld kann einen String aufnehmen in dem eine Beschreibung des AudioClip steht. Das loop Feld gibt an ob der AudioClip einmal gestartet immerwieder abgespielt werden soll (TRUE) oder ob er nur einmal gespielt wird (DEFAULT Wert FALSE). Über das pitch Feld wird die Geschwindigkeit des AudioClips gesteuert, ein Wert kleiner 1 bedeutet langsames abspielen, ein Wert größer 1 das der File schneller als in seiner Originalgeschwindigkeit abgespielt wird. Über die exposedFields startTime und stopTime kann an den AudioClip-Knoten die Zeit gesendet werden wann der Sound wiedergegeben werden soll und wann er stoppen soll. Normalerweise stoppt der Sound wenn der Wert von stopTime gleich dem Wert ist der sich aus startTime + (pitch * Länge) errechnet. Der AudioClip-Knoten

1 of 1

11.04.98 14:04

Route

file:///D|/vrmltoword/Route.html

Sound und Sensoren Das Route-Statement Das ROUTE Statement ist dazu da um die Objekte in der 3d Welt zuverbinden. Die Sensoren sind sozusagen die Nervenenden und das ROUTE Statement sind die Nervenbahnen zwischen den Nerven. Über ROUTE werden die eventOut Felder mit den eventIn Feldern verbunden. Beide Felder müssen den selben Datentyp haben (z.B. SFInt32). Welcher Knoten welche Felder hat kann man in NodeFormat.html nachlesen. Im Allgemeinen werden die ROUTE Statements ans Ende der VRML-Datei geschrieben, sie können aber überall in der VRML-Datei stehen.

1 of 1

11.04.98 14:04

TouchSensor

file:///D|/vrmltoword/touchSensor.html

Sound und Sensoren Der TouchSensor-Knoten Der TouchSensor verwandelt Aktionen der Mouse in events um, die somit andere Aktionen in der 3D-Welt auslösen können. Der TouchSensor wirkt auf alle Knoten die den selben Elternknoten haben. Über den Bool Wert enabled kann man jeder Zeit den TouchSensor ein- und ausschalten. Das eventOut isActive wird TRUE wenn der Mausbutton über einem mit den TouchSensor verbundenen Objekt gedrückt wird. Der isOver eventOut ist TRUE wenn die Maus nur über dem Objekt ist mit dem der TouchSensor verbunden ist. Der touchTime eventOut gibt immer die Zeit an wann die Maus über dem TouchSensor ist oder wann er gedrückt wurde. Diese Zeit kann amn dazu nutzen um z.B. Animationen auszulösen. Über die eventOuts hitTexCoord_changed, hitPoint_changed und hitNormal_changed können noch direkter manipulationen in der 3d Welt worgenommen werden. Genaueres ist nachzulesen in der VRML Spezifikation 6.51 Ein Beispiel TouchSensor.wrl Der TouchSensor-Knoten

1 of 1

11.04.98 14:05

ProximitySensor

file:///D|/vrmltoword/proximitySensor.html

Sound und Sensoren Der ProximitySensor-Knoten Mit den ProximitySensor kann amn eine Zone in der 3d Welt definiren. Immer wenn der Besucher diese Zone betritt wird der Sensor aktiviert und berichtet über Aktionen des Besuchers. Über das center Feld wird das Zentrum der Zone angegeben, und über das size Feld wird die größe der Zone definiert. Da man das center Feld hat kann man so einen ProximitySensor überall in der VRML-Welt einbauen, ohne ihr an ein Objekt zu binden. Das enabled Feld ist wieder dazu da den Sensor ein (TRUE) und auszuschalten (FALSE). Der enterTime eventOut gibt den Zeitpunkt an zudem der Besucher die definierte Zone betritt. Entsprechend gibt das exitTime eventOut den Zeitpukt des verlassens der Zone an. Der Wert von isActive ist solange TRUE wie der Besucher in der Zone ist. Die beiden wichtigsten eventOuts sind position_changed und orientation_changed. Der position_changed eventOut gibt die Position des Besuchers innerhalb der Zone an. Der orientation_changed eventOut gibt die Richtung an in die der Besucher schaut, solange der Besucher in der Zone ist. Der ProximitySensor kann dazu verwendet werden Animationen oder Sounds nur dann zu starten wenn der Besucher in seinem Bereich ist. Man sollte sehr vorsichtig mit dem Einsatz des ProximitySensor sein, da er ständig eine Menge von events produziert wenn der Besucher in der definierten Zone ist. Also die Zonen möglichst klein halten. Ein Beispiel ProximitySensor.wrl Der ProximitySensor-Knoten

1 of 1

11.04.98 14:05

VisibilitySensor

file:///D|/vrmltoword/VisibilitySensor.html

Sound und Sensoren Der VisibilitySensor-Knoten Auch mit diesem Sensor kann man eine Zone in der 3d Welt definieren, allerdings ist diese Zone dazu da den VisibilitySensor immer dann aktiv zu schalten wenn ein Objekt dieser Zone für den Besucher sichtbar wird. Die beiden exposedFields center und size haben die selbe Funktion wie beim ProximitySensor. Sie geben die Position und größe der Zone an. Der isActive eventOut ist solange TRUE wie der Besucher auch nur einen kleinen Teil der Zone im Blickfeld hat. Die beiden eventOut Felder enterTime und exitTime geben den genauen Zeitpunkt an bei dem der Besucher die Zone im Blichfeld hat bzw. aus dem Blickfeld verloren hat. Auch dieser Sensor kann dazu genutzt werden Aktionen nur dann auszulöen wenn der Besucher auch etwas davon mitgekommen kann. Ein Beispiel VisibilitySensor.wrl Der VisibilitySensor-Knoten

1 of 1

11.04.98 14:06

TimeSensor

file:///D|/vrmltoword/TimeSensor.html

Sound und Sensoren Der TimeSensor-Knoten Das Feld enabled ist als DEFAULT Wert TRUE und dazu da den Sensor wie bei den anderen Sensoren ein und auszuschalten. Die Länge des Timers kann über das Feld cycleInterval eingestellt werden. Der TimeSensor kann auch explizit gestartet und gestoppt werden über die Felder startTime und stopTime. Auch eine Wiederholung ist über loop möglich. Das cycleTime eventOut gibt immer dann ein Time event wenn der Time gestartet wird (startTime event) oder wenn der Zeitzyklus von neuem beginnt. Das isActive Feld ist solange TRUE wie der TimeSensor aktiv ist. Der TimeSensor-Knoten

1 of 1

11.04.98 14:06

PlaneSensor

file:///D|/vrmltoword/PlaneSensor.html

Sound und Sensoren Der PlaneSensor-Knoten Der PlaneSensor erlaubt es dem Besucher in einer 3d Welt Objekte in zwei Dimensionen zu bewegen. Dies kann dazu genutzt werden um z.B. Slider zu erzeugen. Auch der PlaneSensor ist über das enabled Feld ein (TRUE) und auszuschalten (FALSE). Ebenso gibt es das Feld isActive das solange TRUE wie der Sensor aktiv ist, also solange das mit dem Sensor verbundene Objekt per Maus bewegt wird. Der Sensor gibt die Position zum einen über das translation_changed eventOut an, zum anderen über das trackPoint_changed eventOut Feld. Das translation_changed eventOut gibt die Positionsänderung der Maus von ihrer Anfangsposition an, wogegen das trackPoint_changed eventOut die Koordinaten der Maus in der Bewegung ausgibt. Ein Beispiel PlaneSensor.wrl Der PlaneSensor-Knoten

1 of 1

11.04.98 14:06

CylinderSensor

file:///D|/vrmltoword/CylinderSensor.html

Sound und Sensoren Der CylinderSensor-Knoten Durch denn CylinderSensor kann man Objekte entlang einer Achse bewegen z.B. eine Tür öffnen. Auch den CylinderSensor kann man über das enabled Feld ein und ausschalten. Ebenso gibt es das isActive Feld, das immer dann TRUE ist wenn die Maus Links oder Rechts über das verbundene Objekt bewegt wird. Genau wie beim PlaneSensor wird die Positionsänderung über zwei eventOut ausgegeben rotation_changed und trackPoint_changed. Über das rotation_changed eventOut wird nur der Wert für die Y-Achse geändert. Über minAngle und maxAngle kann man einstellen wie weit die Bewegung gehen darf. Der trackPoint_changed eventOut gibt die Koordinaten der Maus in der Bewegung an. Ein Beispiel CylinderSensor.wrl Der CylinderSensor-Knoten

1 of 1

11.04.98 14:07

SphereSensor

file:///D|/vrmltoword/SphereSensor.html

Sound und Sensoren Der SphereSensor-Knoten Der SphereSensor erlaubt es dem Besucher der 3d Welt ein Objekt um alle Achsen zu drehen und somit sich das Objekt anzusehen. Wie auch bei den anderen Sensoren wirkt er auf die Objekte die den selben Elternknoten haben. Auch dieser Sensor hat das enabled Feld zum ein und ausschalten und das isActive Feld welches TRUE liefert solange der Sensor aktiviert ist. Auch hier wird die Positionsänderung auf zwei Wegen mitgeteilt. Über den rotation_changed eventOut wird die Position der Maus angegeben wenn sie mit gedrückter Maustaste über das verbundene Objekte bewegt wird. Dieer rotation_changed eventOut verändert allerdings alle Achsen und nicht wie beim CylinderSensor nur die Y-Achse. Der trackPoint_changed eventOut gibt die selben Werte zurück wie beim CylinderSensor. Bei dem SphereSensor kann man keine Bewegungsbeschränkungen einstellen, nur über das autoOffset Feld kann man einstellen ob das Objekt nach dem loslassen wieder in seine Ausgangsposition zurück gesetzt oder nicht. Ein Beispiel SphereSensor.wrl Der SphereSensor-Knoten

1 of 1

11.04.98 14:07

Fog

file:///D|/vrmltoword/Fog.html

Licht Der Fog-Knoten Der Fog-Knoten ist in VRML zum einen um in einer 3D Welt eine bestimmt Stimmung zu erzeugen, zum anderen um Objekte langsam in der Entfernung verschwinden zu lassen. Damit nicht immer alle 3D Objekte gerendert werden, kann man in NavigationInfo ein visibilityLimit angeben. Wenn man Fog einsetzt, kann der Wert von visibilityLimit relativ klein sein was zu folge hat das die Welt schneller gerendert wird. Beim fogType Feld gibt es nur zwei mögliche einträge, zumeinen "LINEAR" zuanderen "EXPONENTIAL". Bei "LINEAR" nimmt die Sichbarkeit der Objekte linear ab, realistischer ist der EXPONENTIAL Nebel, bei dem die Sichbarkeit wie in der Natur exponentiell abnimmt. Genau wie beim NavigationInfo-Knoten kann man zwar beliebig viele Knoten des Typs Fog in eine 3D Welt einbauen, allerdings kann immer nur einer aktiv sein. Dies geschieht über das eventIn set_bind. Wenn eine Fog-Knoten einmal aktiv ist, wirkt er auf die gesamte 3d Welt, egal wo er sich im Scenegraph befindet. Die Farbe des Nebels wird über color Feld in RGB-Notation angegeben. Zwei Beispiele Fog.wrl Fog2.wrl Der Fog-Knoten

1 of 1

11.04.98 14:07

Background

file:///D|/vrmltoword/Background.html

Licht Der Background-Knoten Auch der Background-Knoten kann beliebig oft in einer 3D Welt stehen, aktiv wir der über set_bind. Mit dem Background-Knoten kann man auf zwei verschiedene Arten den Hintergrund einer 3d Welt gestalten. Man kann 2D Bilder als Hintergrund auf alle sechs Seiten eines Würfels plazieren. Dies geschieht über die Felder backUrl, bottomUrl, frontUrl, leftUrl, rightUrl, und topUrl. Hier kann jeweils mit absoluter oder relativer Adresse ein Bild der Formate GIF oder JPEG angegeben werden. Die andere Möglichkeit besteht darin über groundColor und skyColor jeweils für den Boden und den Himmel Farben definiert. Diese Farben werden zu einem Farbverlauf zusammen gesetzt. Ein Beispiel Background.wrl Der Background-Knoten

1 of 1

11.04.98 14:08

Lights

file:///D|/vrmltoword/PDSLight.html

Licht PointLight Das PointLight strahlt gleichmäßig in alle Richtungen. Man kann das Licht das von dem Punktlicht ausgestrahlt über die exposedField´s ambientIntensity, attenuation und color verändern. Über das Feld on kann das Licht ein (TRUE) und ausgeschaltet werden (FALSE). Das Feld location gibt die Position des Lichtes an, direkt zu sehen ist es allerdings nicht in der 3D Welt. Über das Feld radius kann eingestellt werden wieweit das Licht Auswirkungen auf Objekte hat. Ein Beispiel PointLight.wrl Der PointLight-Knoten

DirectionalLight Das DirectionalLight strahl Licht parallel in eine Richtung. Dies kann man über direction angeben. Auch hier gibt es das Feld on über das man das Licht ein (TRUE) und ausschalten (FALSE) kann. Zudem ist das abgestrahlte Licht über die Felder ambientIntensity, color und intensity zu beeinflußen. Ein Beispiel DirectionalLight.wrl Der DirectionalLight-Knoten

SpotLight Das SpotLight kann auch wie die anderen Lichter über on ein (TRUE) und ausgeschaltet (FALSE) werden. Über die Felder ambientIntensity, attenuation und intensity kann das abgestrahlte Licht beeinflußt werden. Das location Feld gibt die Position des Lichtes an, direction die Richtung in die es strahlt. Über beamWidthund cutOffAngle kann die größe des Spots angegeben werden. Das beamWidth Feld gibt den Radius an in dem das Licht mit maximaler Intensität leuchtet. Das cutOffAngle Feld gibt den Radius an in dem das Licht nicht mehr zu sehen ist. In dem Bereich zwischen diesen beiden Kreisen wird das Licht des SpotLights von maximaler Intensität auf null heruntergefahren. Ein Beispiel SpotLight.wrl Der SpotLight-Knoten

1 of 1

11.04.98 14:08

Viewpoint

file:///D|/vrmltoword/Viewpoint.html

Kamera Der Viewpoint-Knoten Auch der Viewpoint-Knoten kann wie z.B. der NavigationInfo-Knoten beliebig häufig in der 3d Welt vorkommen, allerdings kann immer nur einer aktiv sein. Dies geschieht über das set_bind eventIn. Über die Felder position und orientation kann die Position und Blickrichtung angegeben werden. Das Feld fieldOFView gibt an wieviel man von der Welt sehen kann. Der Wert kann zwischen 0 (sehr nah) und PI (sehr weites Blickfeld) liegen. Im description Feld kann man eine Beschreibung des Viewpoint hinterlegen, diese wird im allgemeinen von den VRML-Browsern angezeigt. Ein Beispiel Viewpoint.wrl Der Viewpoint-Knoten

1 of 1

11.04.98 14:08

Anchor

file:///D|/vrmltoword/Anchor.html

Kamera Der Anchor-Knoten Der Anchor-Knoten ist ein Gruppenknoten, daher können zur Zeit des Browsens auch children-Knoten über addChildren hinzugefügt und über removeChildren entfernt werden. Über das url Feld des Anchor-Knoten kann man eine Datei angeben zu der der Besucher der 3D Welt gelangt. Wenn die angegebene Datei eine VRML-Datei ist springt der Besucher in diese Welt, wenn es sich um eine andere Datei handelt wird versucht sie mit einem geeigneten Programm darzustellen. Über das description Feld kann man dieser Verbindung eine Beschreibung geben. Ein Beispiel Anchor.wrl Der Anchor-Knoten

1 of 1

11.04.98 14:10

Billboard

file:///D|/vrmltoword/Billboard.html

Kamera Der Billboard-Knoten Der Billboard-Knoten ist auch ein Gruppenknoten und hat daher ebenso die Felder addChildren und removeChildren über die children-Knoten hinzugefügt und entfernt werden können. Über das Feld axisOfRotation wird die Achse angegeben um die sich das Billboard drehen kann. Alle children-Knoten des Billboards drehen sich immer zum Betrachter hin, so das man nicht hinter ein Billboard kommen kann. Dies kann man gut für Schilder oder dergleichen benutzen. Ein Beispiel Billboard.wrl Der Billboard-Knoten

1 of 1

11.04.98 14:10

Lod

file:///D|/vrmltoword/LOD.html

Kamera Der LOD-Knoten Der LOD-Knoten ist zwar auch ein Gruppenknoten, allerdings besitzt er statt einem Feld für children ein level Feld. Über center wird die Mitte des LOD angegeben, dies ist Wichtig, da von hier die Entfernungen zu den Entfernungsleveln ausgerechnet wird. Der LOD-Knoten wird dazu verwendet eine Möglichkeit zu haben weit entfernte Objekte in verschiedenen Auflösungen darzustellen. Ein Beispiel LOD.wrl Der LOD-Knoten

1 of 1

11.04.98 14:11

Switch

file:///D|/vrmltoword/Switch.html

Aktionen Der Switch-Knoten Der Switch-Knoten enthält zwei exposedField Felder, choice und whichChoice. Children-Knoten werden unter dem choice Feld plaziert, wobei ihre Reihenfolge wichtig ist!. Über das whichChoice Feld kann dann eines des children-Knoten ausgewählt werden. ACHTUNG der Index geht bei 0 los, also 0 (erster children-Knoten), 1 (zweiter children-Knoten) usw. Wenn man -1 als Wert bei whichChoice angibt sind alle children-Knoten unsichtbar. Der Switch-Knoten

1 of 1

11.04.98 14:11

Script

file:///D|/vrmltoword/Script.html

Aktion Der Script-Knoten VRML ist entwickelt worden um 3D Welten zu erzeugen. Das Scripting ist dazu da, damit man diese 3D Welten mit anderen Programmen verändern kann. Zu Zeit unterstützen die VRML-Browser drei Scriptsprachen: Java, JavaScript und VRMLScript. Alle Scripte haben drei Elemente: Eingabe, Verarbeitung und Ausgabe. Ein Scripte-Knoten hat drei feste Felder: 1. url (hier wird die Adresse des Scripts angegeben) 2. directOutput (Wenn TRUE kann des Script einen Output direkt zu Knoten in der 3D Welt weiterleiten, DEFAULT ist FALSE) 3. mustEvaluate (Wenn dises Feld auf TRUE ist signalisiert es dem Browser das das Script sofort ausgeführt werden muß.) Ein Beispiel Script.wrl Der Script-Knoten

1 of 1

11.04.98 14:11