Einführung in VRML Was ist VRML?

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