VRML 97


Formato per la definizione di oggetti 3D. La
versione VRML 1 viene da una semplificazione
degli scene graphs di OpenInventor. La versione
2.0 (97) aggiunge molti nuovi nodi e modifica gran
parte dei vecchi. Si tratta comunque di uno
standard molto recente (Agosto 1996 per la 1.0).
I files VRML non sono eseguibili, ma files di solo
testo che vengono “eseguiti” da un VRML browser.
Il browser legge il file e genera un ambiente 3D
interattivo. Molto usato sul WEB.
VRML 2.0
Informatica Grafica
1
Ambiente Usato
I browsers VRML sono plugins di un browser
HTML. Noi vedremo Cosmo Player 2.0 (della
Silicon Graphics) insieme a Netscape 4.
 Il browser e’ disponibile gratuitamente sul sito
http://cosmo.sgi.com
 Alternativa: usare WorldView (della Intervista)
insieme ad Internet Explorer 4.
 Informazioni dettagliate su VRML nei siti:
http://www.vrml.org
Sito Ufficiale VRML
http://www.sdsc.edu/vrml
Repository VRML

VRML 2.0
Informatica Grafica
2
Tutorial
I lucidi successivi vengono da un tutorial tenuto al
SIGGRAPH96 da:
Dave Nadeau, John Moreland e Mike Heck
Versione interattiva disponibile sulla mia pagina e
nella directory del laboratorio. Contiene anche
molti esempi ed esercizi. Originale sul WWW alla
pagina:
http://www.sdsc.edu/siggraph96vrml/
VRML 2.0
Informatica Grafica
3
What is VRML?
VRML is:
A text file format
A simple language for describing 3-D shapes and
interactive environments
A web standard
VRML is endorsed by:
Most 3-D graphics vendors
Most web browser vendors
VRML 2.0
Informatica Grafica
4
VRML File Structure
VRML files contain:
The file header
Comments - notes to yourself
Nodes - nuggets of scene information
Fields - node attributes you can change
Values - attribute values
Node Names - names for reusable nodes
more. . .
VRML 2.0
Informatica Grafica
5
A Sample VRML File
#VRML V2.0 utf8
# A Cylinder
Shape {
appearance Appearance {
material Material { }
}
geometry Cylinder {
height 2.0
radius 1.5
}
}
VRML 2.0
Informatica Grafica
6
Defining Names for Nodes
Nodes can be named, and used
repeatedly
DEF MyCylinder Shape {
...
}
...
USE MyCylinder
...
USE MyCylinder
VRML 2.0
Informatica Grafica
7
Shapes
Shapes are the building blocks of a VRML world
Primitive Shapes are standard building blocks:
Box
Cone
Cylinder
Sphere
VRML 2.0
Informatica Grafica
8
Shapes (2)
Shape nodes describe:
geometry - form, or structure
appearance - color and texture
Shape {
geometry . . .
appearance . . .
}
VRML 2.0
Informatica Grafica
9
Specifying Geometry
Shape geometry is built with geometry nodes
Standard, primitive geometry nodes include:
Box
{...}
Cone { . . . }
Cylinder { . . . }
Sphere { . . . }
VRML 2.0
Informatica Grafica
10
Setting Geometry Dimensions
Geometry node fields control dimensions
Box { size 2.0 0.5 3.0 }
Dimensions are usually in meters, but they can be
anything
Cone { height 3.0 bottomRadius 0.75 }
Cylinder { height 2.0 radius 1.5 }
Sphere { radius 1.0}
VRML 2.0
Informatica Grafica
11
A Sample Primitive Shape
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material { }
}
geometry Cylinder {
height 2.0
radius 1.5
}
}
VRML 2.0
Informatica Grafica
12
Groups
Group nodes describe:
children - a list of member nodes for the group
#VRML V2.0 utf8
Group {
children [
Shape { . . . },
Shape { . . . },
...
]
}
VRML 2.0
Informatica Grafica
13
Specifying Transforms
A Transform group node controls:
translation - position
rotation - orientation
scale - size
Transform {
translation 2.0 0.0 0.0 rotation 0.0 0.0 1.0 0.52
scale 0.5 0.5 0.5
children [ . . . ] }
It applies, in a fixed order,
scale - rotation -translation
VRML 2.0
Informatica Grafica
14
Appearance
The primitive shapes have a default emissive
(glowing) white appearance
You can control a shape's
Shading color
Glow color
Transparency
more . . .
VRML 2.0
Informatica Grafica
15
Appearance (2)
Appearance nodes describe:
material properties - color,
transparency, etc.
more . . .
Shape {
appearance Appearance { material . . . }
geometry . . .
}
VRML 2.0
Informatica Grafica
16
Materials
A Material node controls:
diffuse color - main shading color
emissive color - glowing color
transparency - opaque or not
more . . .
Material {
diffuseColor . . .
emissiveColor . . .
transparency . . . }
VRML 2.0
Informatica Grafica
17
Example
Shape {
appearance Appearance {
material Material { diffuseColor 1.0 1.0 1.0 }
}
geometry . . .
}
VRML 2.0
Informatica Grafica
18
Grouping Nodes
Shapes can be grouped to compose more complex
shapes
VRML has several grouping nodes, including:
Group
{...}
Switch
{...}
Transform { . . . }
Billboard { . . . }
VRML 2.0
Informatica Grafica
19
Group and Switch
The Group node creates a basic group. Every child
node in the group is displayed
Group { children [ . . . ] }
The Switch group node creates a switched group.
Only one child node in the group is displayed. You
select which child
Switch {
whichChoice 0
choice [ . . . ]
}
VRML 2.0
Informatica Grafica
20
Transform and Billboard
The Transform group node creates a group with its
own coordinate system. Every child node in the
group is displayed
Transform {
translation . . .
rotation . . .
scale
...
children [ . . . ]
}
VRML 2.0
Informatica Grafica
21
Billboard
The Billboard group node creates a group with a
special coordinate system. Every child node in the
group is displayed. Coordinate system is turned to
face viewer
Billboard { axisOfRotation . . . children [ . . . ] }
A rotation axis defines a pole to rotate round. Similar
to a Transform node's rotation field, but no angle
(auto computed)
VRML 2.0
Informatica Grafica
22
A Sample Billboard Group
Group {
children [
Billboard {
axisOfRotation 0.0 1.0 0.0
children [ ... ]
},
Transform { . . . }
]
}
VRML 2.0
Informatica Grafica
23
Summary of Groups
The Group node creates a basic group
The Switch node creates a group with 1 choice used
The Transform node creates a group with a new
coordinate system
The Billboard node creates a group with a coordinate
system that rotates to face the viewer
VRML 2.0
Informatica Grafica
24
Components
VRML files describe
components of a world:
Tables, chairs, lamps,
walls, floors, doors
Inlining combines files to
build larger components
Rooms, buildings,
neighborhoods
VRML 2.0
Informatica Grafica
25
Inlining
The Inline node creates a special group. Children are
read from a VRML file selected by a URL. Every
child node in the group is displayed
Inline { url "table.wrl” }
Transform {
translation . . .
children [ Inline { url "chair.wrl" } ]
}
VRML 2.0
Informatica Grafica
26
Esempio (1)
Definizione della seguente scena
VRML 2.0
Informatica Grafica
27
Esempio
#VRML V2.0 utf8
Group {
children [ Inline { url "table.wrl" },
Transform {
translation 0.95 0.0 0.0
children DEF Chair Inline { url "chair.wrl" }
Transform {
translation -0.95 0.0 0.0
rotation 0.0 1.0 0.0 3.14 children USE Chair
Transform {
translation 0.0 0.0 0.95
rotation 0.0 1.0 0.0 -1.57 children USE Chair
Transform {
translation 0.0 0.0 -0.95
rotation 0.0 1.0 0.0 1.57 children USE Chair
]
}
VRML 2.0
Informatica Grafica
},
},
},
},
28
IndexedFaceSet
Hard to build using primitives
VRML 2.0
Informatica Grafica
29
Specifying Coordinates
Location of dots (points) using Coordinate node
Coordinate {
point [
2.0 1.0 3.0,
4.0 2.5 5.3,
...
]
}
Three nodes have a coord field which accepts a
Coordinate node
PointSet, IndexedLineSet, IndexedFaceSet
VRML 2.0
Informatica Grafica
30
PointSet node
A dot is drawn at each point
PointSet {
coord Coordinate {
point [ . . . ]
}
}
No control over size of dot
Also supports color field for Color node
VRML 2.0
Informatica Grafica
31
IndexedLineSet node
Straight lines are drawn between points
IndexedLineSet {
coord Coordinate {
point [ . . . ]
}
coordIndex [
1, 0, 3, -1, . . .
]
}
VRML 2.0
Informatica Grafica
32
Coordinate Index Values
coordIndex [ 1, 0, 3, -1, . . . ]
Indexes reference ordered points of coord field:
Index order is arbitrary (eg: 1, 0)
Indexes are Zero-based (eg: 0)
Can skip coordinates (eg: 0, 3)
Poly-line can be many points (eg: 1, 0, 3)
End of poly-line (eg: -1)
Multiple poly-lines (eg: . . .)
VRML 2.0
Informatica Grafica
33
IndexedFaceSet node
Faces are drawn within perimeter of points
IndexedFaceSet {
coord Coordinate {
point [ . . . ]
}
coordIndex [
1, 0, 3, -1, . . .
]
}
VRML 2.0
Informatica Grafica
34
ElevationGrid Node
Good for creating terrains, Mountain Ranges, Sea
Floors and Planet Surfaces
ElevationGrid {
xDimension 3
xSpacing 1.0
zDimension 2
zSpacing 1.0
height [
0.0, -0.5, 0.0,
0.2, 4.0, 0.0
]
}
VRML 2.0
Informatica Grafica
35
Texture Mapping
Wrap images around
shapes
Apply an image as an
opaque "decal"
Apply an image with
transparent "holes"
Wrap a movie's images
around shapes
Add realistic appearance to
shapes
VRML 2.0
Informatica Grafica
36
Texture Mapping Specifics
Texture color overrides Material node color
Appearance node's texture field wraps an image
around geometry
The texture can be an ImageTexture, MovieTexture,
or PixelTexture
VRML 2.0
Informatica Grafica
37
ImageTexture node
Appearance {
material Material {}
texture ImageTexture {
url "myimage.jpg"
}
}
The ImageTexture node supports
JPEG, PNG, GIF
VRML 2.0
Informatica Grafica
38
MovieTexture node
Appearance {
texture MovieTexture {
url "mymovie.mpg"
speed 1
loop FALSE }
}
The MovieTexture nodes supports:
MPEG1-Systems and MPEG1-Video
VRML 2.0
Informatica Grafica
39
PixelTexture Format
The PixelTexture node contains data stored as width,
height, number of channels, followed by
width*height hex values representing the image
Example: A 2x4 RGB image
PixelTexture {
image 2 4 3 0xFF0000 0x00FF00
0 0 0 0 0xFFFFFF 0xFFFF00
}
VRML 2.0
Informatica Grafica
40
Lights
Light sources illuminate
and effect shading of
faces
Several types of lights
available for maximum
control
Lights do not cast shadows
VRML 2.0
Informatica Grafica
41
Light Nodes and Fields
Three different light nodes
PointLight, DirectionalLight, SpotLight
Standard fields (common to all 3) and defaults
on
TRUE
intensity
1.0
ambientIntensity
0.0
color
1.0 1.0 1.0
VRML 2.0
Informatica Grafica
42
Point Light
Point lights have a location and glow radially
PointLight {
# Standard fields, plus:
location 0.0 0.0 0.0
radius 1.0
attenuation 1.0 0.0 0.0
}
VRML 2.0
Informatica Grafica
43
Directional Light
Directional lights point in a specified direction
DirectionalLight {
# Standard fields, plus:
direction 1.0 0.0 0.0
}
VRML 2.0
Informatica Grafica
44
Spot Light
Spot lights point in a direction and focus in a cone
SpotLight { # Standard fields, plus:
location 0.0 0.0 0.0
direction 1.0 0.0 0.0
beamWidth 1.57
cutOffAngle 0.785
radius 1.0
attenuation 1.0 0.0 0.0
}
VRML 2.0
Informatica Grafica
45
Viewpoint
Primarily used to define named camera positions
Browser will usually present a list of viewpoints
using their description strings.
Browser may animate between viewpoints.
Orientation defines direction of view and "up"
direction (relative to default orientation).
Viewpoint { position 0 0 10 orientation 0 0 1 0
description "DefaultView"
}
VRML 2.0
Informatica Grafica
46
Events
Event: A message that contains a data value
Has a specific data type, eg. SFTime
set_
event: Changes node when received
Example: set_startTime
_changed
event: Sent when node changes
Example: position_changed
VRML 2.0
Informatica Grafica
47
Data Types
Standard VRML Data Types
SFBool
SFColor / MFColor
SFFloat / MFFloat
SFImage
SFInt32 / MFInt32
SFnode / MFNode
VRML 2.0
SFRotation / MFRotation
SFString / MFString
SFTime
SFVec2f / MFVec2f
SFVec3f / MFVec3f
Informatica Grafica
48
Fields and Events
Each node has specific fields and
events
Field: A stored value
(parameter), eg. url
EventIn: An event node can
receive, eg. set_url
EventOut: An event node can
send, eg. url_changed
Note: ExposedField defines all
three
VRML 2.0
Informatica Grafica
49
Routes
Route: Connects an EventOut to an EventIn
A Route is not a node!
Output type must match input type exactly
Output may connect to multiple inputs (fan-out)
Multiple outputs may connect to single input
(fan-in)
Nodes must be named in order to use Routes
VRML 2.0
Informatica Grafica
50
Collision Triggers Sound
ROUTE Node1.collideTime
TO Node2.startTime
Note use of DEF to name nodes
DEF NODE1 Collision { . . . }
DEF NODE2 AudioClip { . . . }
ROUTE NODE1.CollideTime
TO NODE2.startTime
VRML 2.0
Informatica Grafica
51
Summary of Events
Event: A message that contains a data value
set_
_changed
events: Change node when received
events: Sent when node changes
EventIn:
Specifies an event node can receive
EventOut:
Specifies an event node can send
VRML 2.0
Informatica Grafica
52
Sensors
Sensing the user's "presence" in the world:
Entering the world
Entering a region surrounding an object
Position and orientation within a region
VRML 2.0
Informatica Grafica
53
The ProximitySensor
Generates events when viewpoint:
Enters Region: SFTime enterTime
Leaves Region: SFTime exitTime
Moves within Region:
SFVec3f position_changed
SFRotation orientation_changed
ProximitySensor { center 0 0 0 size 0 0 0 }
Defines an axis-aligned region
Zero size disables the sensor
All relevant Proximity sensors generate events
VRML 2.0
Informatica Grafica
54
Example: Trigger Alarm
Sound {
source DEF Alarm AudioClip { . . . }
}
DEF Car ProximitySensor {
size 10 10 10 # size of Car
}
ROUTE Car.enterTime TO Alarm.startTime
VRML 2.0
Informatica Grafica
55
Other Nodes that "Sense" the
Viewer
LOD: Distance to viewpoint (no explicit events)
VisibilitySensor: Visibility of a region.
events: isActive, enterTime, exitTime
Collision: Collision of viewer with objects.
event: SFTime collideTime
VRML 2.0
Informatica Grafica
56
TouchSensor Events
Pointer is on geometry: SFBool isOver
Button press/release:
SFBool isActive
SFTime touchTime (on ButtonUp)
Pointer dragged over geometry:
SFVec3f hitPoint_changed
SFVec3f hitNormal_changed
SFVec2f hitTexCoord_changed
VRML 2.0
Informatica Grafica
57
Other Nodes That "Sense" the
User
Anchor: Click on children (causes implicit action)
CylinderSensor: Maps motion to rotation around
sensor's Y axis
PlaneSensor: Maps motion to translation in sensor's
XY plane
SphereSensor: Maps motion to general rotation
around center of sensor
VRML 2.0
Informatica Grafica
58
Summary of Sensors
Sensors are not grouping nodes
Trigger on geometry defined by sibling nodes
When geometry overlaps, closest object is used
Sensor "lowest" in the graph sends the event
Multiple sensors may send "simultaneous" events
Use these sensors to detect user actions.
Use their events to start and stop animations.
Also for simple dragging, rotating objects.
VRML 2.0
Informatica Grafica
59
Time
A TimeSensor node is similar to a stop watch (sorta)
You control the start time, stop time, and cycle
length
The sensor generates events while it is running
You ROUTE events to change node fields
VRML 2.0
Informatica Grafica
60
Time Sensors
TimeSensor nodes describe:
start and stop time - when to run
cycle interval time - how long a cycle is
looping - whether or not to repeat
cycles
TimeSensor {
cycleInterval 4.0
loop FALSE
starTime 0.0
stopTime 1.0
}
VRML 2.0
Informatica Grafica
61
Timer Input Events
Can create continuously running timmers:
loop TRUE stopTime < startTime
Can run one cycle then stop
loop FALSE stopTime < startTime
Can run until stopped, or after cycle is over
loop TRUE or FALSE stopTime >= startTime
The set_startTime input event:
Sets when the timer should start
The set_stopTime input event:
Sets when the timer should stop
VRML 2.0
Informatica Grafica
62
Timer Cycles
The first cycle starts at the start time
The cycle interval is the length (in seconds) of the
cycle
Each cycle varies a fraction from 0.0 to 1.0
If loop is FALSE, there is only one cycle, otherwise
the timer may cycle forever
VRML 2.0
Informatica Grafica
63
Timer Output Events
The isActive output event:
Outputs TRUE at timer start
Outputs FALSE at timer stop
The fraction_changed output event:
Outputs values from 0.0 to 1.0 during a cycle
Resets to 0.0 at the start of each cycle
VRML 2.0
Informatica Grafica
64
A Sample Time Sensor
DEF Monolith1Timer TimeSensor {
cycleInterval 4.0
loop FALSE
startTime 1.0
stopTime 0.0
}
ROUTE Monolith1Touch.touchTime
TO Monolith1Timer.set_startTime
ROUTE Monolith1Timer.fraction_changed
TO Monolith1Light.set_intensity
VRML 2.0
Informatica Grafica
65
Summary of TimeSensors
The TimeSensor node's fields control:
Timer start and stop times
The cycle interval
Whether the timer loops or not
The sensor generates:
isActive events at start and stop
fraction_changed events while running
VRML 2.0
Informatica Grafica
66
Interpolators
To animate the position of a shape you specify:
A list of key positions for a path
An interpolator computes intermediate positions for
you
You specify key values (like positions) along a path
Key values have two components
A value (such as a position)
A key fraction (usually between 0.0 and 1.0)
VRML 2.0
Informatica Grafica
67
Interpolation
Interpolation fills in values between your key values:
Time
Position
Time
Position
0.0
0.0 0.0 0.0 0.1
0.4 0.1 0.0
0.2
0.8 0.2 0.0 . . .
...
0.5
4.0 1.0 0.0 . . .
...
PositionInterpolator nodes describe:
keys - key fractions
values - key positions
PositionInterpolator {
key [ 0.0, . . . ]
keyValue [ 0.0 0.0 0.0, . . . ] }
VRML 2.0
Informatica Grafica
68
Position Interpolator Events
The set_fraction input event:
Sets the current fraction (usually 0.0 to 1.0) along the
key path
The value_changed output event:
Outputs the position along the path each time the
fraction is set
DEF Stair1Path PositionInterpolator {
key [ 0.0, . . . ] keyValue [ 0.0 0.0 0.0, . . .] }
ROUTE Stair1Timer.fraction_changed TO Stair1Path.set_fraction
ROUTE Stair1Path.value_changed TO Stair1.set_translation
VRML 2.0
Informatica Grafica
69
Other Interpolators
You can also interpolate:
Rotations
Colors
Coordinates
Normals
Scalars
VRML 2.0
Informatica Grafica
70
Format of Interpolators
All Interpolators use keys for key fractions.
OrientationInterpolator nodes describe:
values - key rotations (axis and angle)
ColorInterpolator nodes describe:
values - key colors (red, green, blue)
CoordinateInterpolator nodes describe:
values - key coordinate lists (X,Y,Z lists)
NormalInterpolator nodes describe:
values - key normal lists (X,Y,Z lists)
ScalarInterpolator nodes describe:
values - key scalars (used for anything)
VRML 2.0
Informatica Grafica
71
Scripts
Many actions are too complex for built-in sensors,
interpolators, shapes, etc.
Computed animation paths (eg. gravity)
Algorithmic shapes (eg. fractals)
Collaborative environments (eg. games)
You can write program scripts in Java, JavaScript,
etc, that:
Accept event inputs
Generate event outputs
Read and write fields
VRML 2.0
Informatica Grafica
72
Program Script Use
Script nodes include:
url - the program script to use
Script { url "circle.class” or… url "circle.js” or...
url "javascript: ...”}
Script nodes also declare:
fields and events - the program script interface
Each has a name and data type
Fields have an initial value
Script {
field SFFloat cycles 1.0
eventIn SFFloat set_fraction
eventOut SFVec3f position_changed }
VRML 2.0
Informatica Grafica
73
Proto
You can create new node types that encapsulate:
Shapes
Sensors
Interpolators
Scripts
anything else . . .
This creates high-level nodes
Robots, menus, new shapes, etc.
PROTO declares a new node type:
name - the new node type name
fields and events - interface to the prototype
VRML 2.0
Informatica Grafica
74
Scarica

VRML 2.0