Einführung in VRML Paul Scheremet Ratschläge: Diego Iglesias Was ist VRML? VRML steht für Virtual Reality Modelling Language und wird “wermel” gesprochen. Es ist ein Standard für 3D rendering im Internet oder Offline, ähnlich wie HTML ein Standard für Internetseiten ist. VRML ist ein Teil vom Open Inventor Standard der von SGI für ihre Graphics Workstation entwickelt wurde. 1 Die Darstellung der “Welt” VRML ist darauf ausgelegt, ausgelegt, virtuelle Welten zu erstellen. erstellen. Man hat die Möglichkeit, Möglichkeit, Körper zu kreieren und so anzuordnen, anzuordnen, dass man sich dadurch bewegen kann. kann. Licht und Ton variieren je nach Betrachterstandort. Betrachterstandort. Obwohl VRML sich auch dafür eignet, eignet, ausschließlich Einzelstücke zu präsentieren, präsentieren, ist es in erster Linie für virtuelle Welten gedacht, ”. gedacht, daher auch die Endung “.wrl “.wrl”. VRML 1.0 Erste Version von VRML. Geometry, Licht, Licht, Texturen und Verlinkungen lassen sich in dieser Version bereits realisieren. realisieren. VRML 1.0 erfüllt folgende Aspekte: Aspekte: – Plattformunabhängigkeit – Erweiterbarkeit – Langsame Internetverbindungen Es unterstützt kein interaktives Verhalten der Objekte 2 VRML 2.0 Aktuelle Version von VRML. Besitzt bessere Interaktivität und unterstützt Animationen, Animationen, 3D Sound und vorallem Scripting zusätzlich zu den bereits bekannten Funktionen von VRML 1.0. Es wurde im März 1996 vom VRML Architecture Board veröffentlicht VRML97 VRML 97 ist der ISO Standard für VRML Es setzt auf VRML 2.0 auf 3 Features in VRML97 Mehr Realismus in statischen Welten Sound Objekte mit kontrollierbarer Dämpfung Ein effizientes System für unebenen Untergrund Extrusionobjekte Verbesserungen für farbigen Hintergrund und Panorama Ein Nebelsystem für Unterwasserwelten und Wolken MPEGMPEG-Video als Texturen Features in VRML97 Interaktionen mit Sensoren: Collision detection Berührungssensors Näherungssensoren Sichtbarkeitssensors, Sichtbarkeitssensors, um Resourcen zu schonen 4 Features in VRML97 Bewegung, Verhalten und mehr: verschiedene Interpolatoren erlauben jegliche Art von Animation. Scripting in JavaScript oder Java ermöglichen von simpler Logik bis hin zu hoch komplex mathemetischen Engines. Prototypen erhöhen die Wiederverwendbarkeit von selbstdefinierten Objekten. Objekten. Ein Navigation Information Object stellt dem Browser detaillierte Angaben über Geschwindigkeit und Bewegungsart des Benutzers in der Welt zu Verfügung. Verfügung. VRML-Dateien erstellen Bei VRML Code handelt es sich um eine einfache Textdatei Header: – #VRML V2.0 utf8 Kommentare werden durch “#” eingeleitet Terminologie: Terminologie: – Nodes: eine Welt besteht aus Nodes, die vom Typ “Objekt” Objekt” sind – Fields: beschreiben Eigenschaften eines Nodes 5 Beispiel #VRML V2.0 utf8 Node Field WorldInfo { title "Example 1" } DEF FBOX Shape { appearance Appearance { material Material { diffuseColor 0 0.5 0 } } geometry Box { } } (uses default values) Oberflächen Quader – geometry Box {size 5.5 3.75 1.0} Zylinder – geometry Cylinder {radius 0.5 height 10 Kegel – geometry Cone {bottomRadius {bottomRadius 5 height 10 bottom FALSE} top FALSE} side TRUE Kugel – geometry Sphere { radius 10,000,000} Text & Schriftart 6 Materialien Eigenschaften der Material Node: – diffuseColor: diffuseColor: eigentliche Farbe des Objekts – specularColor: specularColor: Glanzfarbe bei glänzenden Objekten – emissiveColor: Objekte; hat emissiveColor: Selbstscheinende Farbe von Objekte; keine Auswirkung auf andere Objekte – ambientIntensity: ambientIntensity: Intensität der Hintergrundbeleuchtung – shininess: Grad der Verspiegelung – transparency: Transparenz; Transparenz; Achtung: Achtung: nicht alle Viewer unterstützen TeilTeil-Transparenz Transformationen Entfernungen werden konventionell in Meter (!) gemessen Winkel wiederum um Bogenmaß Transformationsmöglichkeiten: Transformationsmöglichkeiten: – versetzen, versetzen, rotieren und skalieren Folgende Reihenfolge ist einzuhalten: einzuhalten: – Scale, Rotate, Translate (ansonsten (ansonsten über Nestings) Nestings) Transform { Beispiel: Beispiel: translation 1 1 1 rotation 0 1 0 0.78 scale 2 1 2 children [ USE FBOX ] 7 Beispiel 1 #VRML V2.0 utf8 Transform { children [ NavigationInfo { headlight FALSE } # Wir haben unser eigenes Licht DirectionalLight { direction 0 0 -1 } # Erstes child # Szenenbeleuchtung Transform { # Zweites child – eine rote Kugel translation 3 0 1 children [ Shape { geometry Sphere { radius 2.3 } appearance Appearance { material Material { diffuseColor 1 0 0 } # Rot } } ] } (…) Beispiel 2 #VRML V2.0 utf8 Transform { children [ DEF Paul Shape { geometry Sphere {} } Transform { translation 2 0 0 children DEF Paul Shape { geometry Sphere { radius .2 } } } Transform { translation -2 0 0 children USE Paul } ] } 8 Beispiel 3 #VRML V2.0 utf8 PROTO TwoColorTable [ field SFColor legColor .8 .4 .7 field SFColor topColor .6 .6 .1 ] { Transform { children [ Transform { # table top translation 0 0.6 0 children Shape { appearance Appearance { material Material { diffuseColor IS topColor } } geometry Box { size 1.2 0.2 1.2 } } } Transform { # first table leg translation -.5 0 -.5 children DEF Leg Shape { appearance Appearance { material Material { diffuseColor IS legColor } } geometry Cylinder { height 1 radius .1 } } } Transform { # another table leg translation .5 0 -.5 children USE Leg } Transform { # another table leg translation -.5 0 .5 children USE Leg } Transform { # another table leg translation .5 0 .5 children USE Leg } ] # End of root Transform's children } # End of root Transform } # End of prototype # The prototype is now defined. Although it contains a # number of nodes, only the legColor and topColor fields # are public. Instead of using the default legColor and # topColor, this instance of the table has red legs and # a green top: TwoColorTable { legColor 1 0 0 topColor 0 1 0 } NavigationInfo { type "EXAMINE" } # Use the Examine viewer Beispiel 4 #VRML V2.0 utf8 DEF OpenVault Script { # Declarations of what's in this Script node: eventIn SFTime openVault eventIn SFBool combinationEntered eventOut SFTime vaultUnlocked field SFBool unlocked FALSE # Implementation of the logic: url "javascript: function combinationEntered(value) { unlocked = value; } function openVault(value) { if (unlocked) vaultUnlocked = value; }" } Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere { } } Sound { source DEF Click AudioClip { url "click.wav" stopTime 1 } minFront maxFront minBack maxBack 1000 1000 1000 1000 } DEF TS TouchSensor { } ROUTE TS.isOver TO OpenVault.combinationEntered ROUTE TS.touchTime TO OpenVault.openVault ROUTE OpenVault.vaultUnlocked TO Click.startTime 9 Zusätzliche Beispiele Königsegg CC Mehr Beispiele Beispiel VRML code from – http://web3d.vapourtech.com/ – Und natürlich www.google.de 10 References VRML Consortium/Web3D – http://www.vrml.org http://www.vrml.org// VRML repository: – http://vrml.sdsc.edu http://vrml.sdsc.edu// VRML 1.0 Specification – http://www.vrml.org/VRML1.0/vrml10c.html VRML 2.0 Specification – http://www.vrml.org/VRML2.0/FINAL/ VRML97 Specification – http://www.web3d.org/Specifications/VRML97/ Beispiele VRML97 Beispiele – http://www.web3d.org/Specifications/VRML97/part1/exampl es.html 3D Web Graphics Using VRML Book Examples – http://www.iup.edu/~jacross/graphics/mybook.htmlx http://www.iup.edu/~jacross/graphics/mybook.htmlx Links (gute (gute Beispiele): Beispiele): – http://www.3dhttp://www.3d-design.com/vrmlsite.html 11 Tutorials VRML97 Tutorial – http://www.vapourtech.com/vrmlguide http://www.vapourtech.com/vrmlguide// VRML Works Tutorial – http://home.hiwaay.net/~crispen/vrmlworks/tutorials/index. http://home.hiwaay.net/~crispen/vrmlworks/tutorials/index. html Cosmo VRML Tutorial – http://cosmosoftware.com/developer/tutorials.html http://cosmosoftware.com/developer/tutorials.html VRML Repository Tutorial links – http://vrml.sdsc.edu/cgihttp://vrml.sdsc.edu/cgibin/display.cgi?category=Tutorials+ bin/display.cgi?category=Tutorials+--+VRML Tour Beispiel Wichtiger Quellcode DEF GuidePI PositionInterpolator { key [ 0, 0.2, 0.3, 0.5, 0.6, 0.8, 0.9, 1 ] keyValue [ 0 0 0, 0 0 -5, 2 0 -5, 2 6 -15 -4 6 -15, -4 0 -5, 0 0 -5, 0 0 0 ] } DEF GuideRI OrientationInterpolator { key [ 0, 0.2, 0.3, 0.5, 0.6, 0.8, 0.9, 1 ] keyValue [ 0 1 0 0, 0 1 0 0, 0 1 0 1.2, 0 1 0 3, 0 1 0 3.5, 0 1 0 5, 0 1 0 0, 0 1 0 0, ] } DEF TS TimeSensor { cycleInterval 30 } # 30 second tour ROUTE StartTour.touchTime TO TS.startTime ROUTE TS.fraction_changed TO GuidePI.set_fraction ROUTE TS.fraction_changed TO GuideRI.set_fraction ROUTE GuidePI.value_changed TO GuideTransform.set_translation ROUTE GuideRI.value_changed TO GuideTransform.set_rotation 12
© Copyright 2024 ExpyDoc