Vertiefende C-Techniken > Virtual Reality > Software > 3D Grafikprogrammierung > VRML  

VRML ist die Bezeichnung für einen Standard für 3D im World Wide Web. VRML steht für "Virtual Reality Modeling Language" und ist eine Beschreibungssprache für die Darstellung von künstlichen, begeh- und rotierbaren online-generierten und gerenderten 3D-Welten im Internet oder auch offline von CD-ROM. Je nachdem, ob die Anwendung für das Internet oder als Offline-CD-ROM-Anwendung konzipiert wird, kann die Erstellung entweder auf geringen Datendurchsatz (unter Inkaufnahme einer etwas verringerter Bildgüte und z. B. ohne Texturen) optimiert werden, oder auf bestmögliche Bildgüte inclusive Texturen (unter Inkaufnahme eines hohen Datenaufkommens). Die Software, die zur Darstellung und Navigation der über das Internet übertragenen Panoramen notwendig ist, wird beispielsweise als Plugin für die Internet-Browser Netscape oder Internet-Explorer installiert. Der Cosmo-Player ist ein oft als Plugin eingesetztes tool. Cosmo ist ein Interpreter für VRML, der VRML darzustellen kann und es zudem dem Benutzer erlaubt, über Java- oder JavaSkript-Programme in der VRML-Welt Veränderungen vorzunehmen. [FRHS02]

Entstehung

Die Sprache VRML erlebte ihre Geburtsstunde im Frühjahr 1994 auf der ersten World Wide Web-Konferenz in Genf. Die Mitglieder der Arbeitsgruppe einigten sich auf eine einfache Beschreibungsprache, mit der sich dreidimensionale Welten definieren lassen und in HyperLinks integriert werden können. VRML läßt sich so als Pendant zur HyperText Markup Language (HTML) für Virtual Reality sehen. Der Begriff Virtual Reality Markup Language wurde geprägt und die Arbeitsgruppe begann nach der Konferenz mit der Spezifikation dieser neuen Sprache. Das Wort 'Markup' wurde später in 'Modeling' geändert, um dem graphischen Charakter von VRML gerecht zu werden. Man einigte sich nach kurzer Zeit auf einen ersten Anforderungskatalog und begann mit der Suche nach geeigneten Technologien, die den Bedürfnissen von VRML entsprachen. Entschieden wurde sich für das Open Inventor ASCII File Format, entwickelt von Silicon Graphics. [FRHS02]

Eigenschaften von VRML

VRML zeichnet sich dadurch aus, daß sie unabhängig von der verwendeten Hardwareplattform ist, sich beliebig erweitern lässt und auch mit langsamen Verbindungen (14.400 Bit/s - Modem) noch hinreichend benutzbar ist. Eine VRML Szene ist eine Umgebung, die lokal zur Navigation geladen wird. Daher beeinflußt die Bandbreite das die Anwendung nur während des Herunterladens der Szene. Ist die Szene geladen, so ist es die Leitungsfähigkeit der Zentraleinheit, die einen beeinflussenden Faktor darstellt. Je leistungsfähiger der benutzte Prozessor ist, desto schneller und reibungsloser ist die Navigation durch die virtuelle Welt. Es sind bereits sind bereits Diskussionen angesetzt, die sich damit befassen, die Übertragungsdauer von VRML-Szenen über das Internet zu verkürzen. Eine Möglichkeit wäre zum Beispiel, häufig verwendete Elemente wie bestimmte Texturabbildungen und Audiodateien als Referenz lokal auf dem PC zu speichern. [FRHS02]

Unterschiede von VRML 1.0 zu 2.0

Erst in Version 2.0 wurden neben der Interaktion auch Dynamik, Sound und Animation implementiert. Das Hauptmerkmal von VRML 2.0 gegenüber VRML 1.0 ist die Dynamik der Welten. Dies sagt auch schon der Name des Standardisierungsorschlags zu VRML 2.0, den die Firma Silicon Graphics Inc. machte: "Moving Worlds". Diese vielfältigen Änderungen gingen einher mit einer grundlegenden Änderung der Syntax. Dies ist auch der Grund, warum VRML 1.0-Programme meistens nicht mit VRML 2.0-Browsern laufen. Zudem sind in VRML wichtige Knotennamen in der Version 2.0 umbenannt worden, so daß beim Versuch, ein VRML 1.0-Programm auf einem VRML 2.0-Browser zu starten, der Browser häufig Syntaxfehlermeldungen ausgibt. [FHRH02]

Einbettung und Syntax von VRML Objekten

VRML-Szenen werden in ASCII-Dateien, welche die Endung *.wrl haben, beschrieben und können mit dem folgenden Tag innerhalb einer einer HTML-Seite referiert werden.

<EMBED SRC="Dateiname.wrl "WIDTH=400 HEIGTH=300>

Hierbei handelt es sich um eine Szene, die eine Fläche von 400x300 Pixel beansprucht.

Zu Beginn eines VRML-Dokumentes befindet sich immer eine Zeile, die sich ‘File Header’ nennt und das Dokument als ein Dokument im VRML-Format ausweist. [FRHS02]

#VRML V1.0 ascii

Hinter dem "V" befindet sich eine Angabe bezüglich der Version. In dem Beispiel handelt es sich um die Version 1.0. Alle weiteren in dieser Zeile stehenden Zeichen werden übergangen. Ebenfalls übergangen werden alle übrigen Zeilen, die mit dem Zeichen # beginnen, da dieses Zeichen - es sei denn es steht in der ersten Zeile des VRML-Dokumentes - Kommentare einleitet. Beim Übertragen von Dateien löscht der VRML- Dokument- Server eventuell Kommentare und Leerräume, um das Datenaufkommen des Dokumentes gering zu halten. Zu diesen Leerräumen zählen hierbei nur solche Tabulatorenzeichen, Leerschritte und Zeilenwechselzeichen, die außerhalb von Zeichenketten erscheinen. Die einzelnen Einheiten des VRML- Codes werden nämlich auch durch ein oder mehrere Leerraumzeichen getrennt. Informationen wie Copyright-Hinweise, die auch auf Empfängerseite beibehalten werden sollten, sind aus besagtem Grunde nicht in Kommentare zu fassen. Als Medium eignet sich hierfür ein Info- Knoten. Die Information wird dann auf jeden Fall übertragen, da es sich bei den Knoten um wichtige syntaktische Elemente handelt. [FRHS02]

Einleitung Knoten (Nodes)

Grundsätzlich besteht ein VRML-Dokument aus einer Liste von Objekten, sogenannten Knoten. Die geordnete Liste der Knoten wird Szenengraph genannt. Ein Knoten-Typ kann beispielsweise ein Würfel, eine Kugel, eine Transformation oder eine Oberflächentextur sein. Durch Zuweisung von Parametern werden Knoten vom gleichen Typ unterscheidbar. Jene Parameter werden in der Literatur oft auch Fields genannt. Ein Knoten kann null oder mehr Parameter haben. Wird im VRML-Code kein Wert für einen Parameter festgelegt, so wird der, für den jeweiligen Knotentyp festgelegte, Standardwert verwendet. Der Würfel-Knoten wird beispielsweise standardmäßig am Ursprung des Koordinatensystems plaziert und mit einer Länge und Breite von jeweils zwei Einheiten versehen. Eine VRML 1.0 Welt besitzt nur einen Node, der jedoch seinerseits beliebig viele Kinder besitzen kann. Gleichzeitig beeinflussen die Eigenschaften eines Vorgängers immer auch den aktuellen Node. Um die Möglichkeit bereitzustellen, Eigenschaften gezielt einem Objekt oder auch einer bestimmten Gruppe von Objekten zuzuweisen, bietet VRML insgesamt drei Möglichkeiten zur Strukturierung: [FRHS02]

  • den Group-Node
  • den Separator-Node
  • und den TransformSeparator-Node.

Im Folgenden sollen diese drei Varianten und deren Eigenschaften kurz vorgestellt werden.

[FRHS02]

Group Nodes

Der Group- Node fasst mehrere Objekte einer VRML-Szene zusammen. Man kann ihn als einen Container beschreiben, der der Sammlung von Nodes dient. Wie der Beispielcode veranschaulichen soll, wirken sich Materialeigenschaften und Transformationen auf nachfolgende Objekte aus, die außerhalb des Group- Nodes liegen. [FRHS02]

_____________________________________________________________

#VRML V1.0 ascii
Info                   {
                                    String “Beispiel für Group-Knoten” 
                        }

#DEF BackgroundColor Info {String “0 0 0”}
#(Komentar)Group ist 1. Node der dann beliebig viele Kinder haben kann.

Group

            Group 
            { 
                        Material

                                    ampientColor                 1 1 1 
                                    diffuseColor                   0.1 0.1 0.1 
                                    specularColor                 1 1 1 
                                    emissiveColor                 0 0 0.3 
                                    shininess                       1.0 
                                    transparency                 0.0 
                        } 
                        Pointlight 
                        { 
                                    on                                TRUE
                                    intensity                        1 
                                    color                             0 1 0 
                                    location                         0 3 0 
                        } 
                        Transform 
                        { 
                                    translation                     -2 0 0 
                                    rotation                         1 1 0 1.57 
                        } 
                        Cube 
                        {} 
            }

#Wichtig ist hierbei nun, dass alle Transformationen, Materialzuweisungen usw.
#sich auch auf den folgenden Kegel niederschlagen.
#(Grund: bei einem Group wird kein neuer Ast im VRML-Baum gebildet)
#Dieser Sachverhalt ist ausschlaggebend für die Motivation, in VRML mit
# Separator und/oder TransformSeparator zu arbeiten.

                        Cone 
                        { 
                                    parts ALL
                                    bottomRadius1.5
                                    height 2.5 
                        }
}
_____________________________________________________________

Dieser Knoten ist nur für die Version 1.0 ausschlaggebend. In die nachfolgenden Spezifikationen von VRML (1.1, 2.0 ...) wurde er nicht mehr aufgenommen. [FRHS02]

Separator Node

Ein Separator isoliert alle Nodes, die innerhalb der geschweiften Klammern des Separators liegen, von den restlichen Nodes. Im Gegensatz zum Group-Node wird beim Separator also ein neuer Ast in der VRML-Hierarchie gebildet. Innerhalb eines Separator können sämtliche Eigenschaften (Transformationen, Lichtquellen, Materialien, Normalen) definiert werden. Diese beziehen sich dann nur auf Kinder des Separators. In dem oben stehenden Beispielquellcode würde das Austauschen des orange-geschriebenen Group-Node durch einen Separator-Node bewirken, daß keine der im Separator-Node angewendeten Transformierungen oder Materialzuweisungen auf den am Schluss deklarierten Kegel Auswirkung hätten. [FRHS02]

Transformseparator Node

Ein TransformSeparator verhält sich prinzipiell genauso wie ein normaler Separator, jedoch nur in Bezug auf Transformationen. Alle anderen Eigenschaften wie Materialzuweisungen, Lichtquellen und ähnliches wirken auch auf Objekte außerhalb eines TransformSeparators. Dieser Knoten ist nur für die Version 1.0 ausschlaggebend. In die nachfolgenden Spezifikationen von VRML (1.1, 2.0 ...) wurde er nicht mehr aufgenommen [FRHS02]

Parameter

Fields stellen eine Art Datentyp in VRML dar. Die Parameter, die einer Kugel zugewiesen werden können, beschreiben Koordinaten zur Ortsangabe und einen Radius als Größenangabe. Die Knoten können auf verschiedene Gruppen von Parametern zurückgreifen. Diese Gruppen lassen sich wiederum in zwei verschiedene Klassen von Parametern unterscheiden. Zum einen gibt es solche, die nur aus einem Wert bestehen. Dieser Wert ist dann beispielsweise eine Zahl oder ein Vektor. Die der zweiten Klasse zugehörigen Parametern können mehrere Werte enthalten. Die erste Klasse trägt am Anfang ihres Namens immer ein 'SF' für Single- valued Field. Vertreter der zweiten Klasse beginnen immer mit

'MF', was für Multiple-valued Field steht. Ein Beispiel für einen SF-Parameter ist SFBool. Belegt wird SFBool mit einem Boolschen Wert. Dieser kann dann entweder als ‘TRUE’ und ‘FALSE’ ausgeschrieben werden oder es wird 1 beziehungsweise 0 geschrieben. [FRHS02]

Ein anderes Beispiel ist SFRotation. Hierbei handelt es sich um einen Parameter, der eine beliebige Rotation angibt. SFRotation verlangt vier Gleitkommawerte, die durch Leerräume voneinander getrennt werden. [FRHS02]

Folgende Angabe beschreibt eine Rotation:

1 1 0 3.14159265

Die ersten drei Werte bestimmen die Drehachse im Koordinatensystem und der letzte Wert spezifiziert den Drehwinkel in Radienten angegeben. Die oben angegebene Rotation beschreibt eine Drehung um die Winkelhalbierende zwischen der X- und Y-Achse um 180°. [FRHS02]


Impressum- Sitemap- Datenschutz- AGB- Nutzungsbedingungen- Cookies- © 2023 TEDATA GmbH INGGO V 4.2.4