Download presentation
Published byTyrone Bodily Modified over 9 years ago
1
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
2
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 Alternativa: usare WorldView (della Intervista) insieme ad Internet Explorer 4. Informazioni dettagliate su VRML nei siti: Sito Ufficiale VRML Repository VRML VRML 2.0
3
Dave Nadeau, John Moreland e Mike Heck
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: VRML 2.0
4
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
5
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
6
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
7
Defining Names for Nodes
Nodes can be named, and used repeatedly DEF MyCylinder Shape { . . . } USE MyCylinder VRML 2.0
8
Shapes Shapes are the building blocks of a VRML world
Primitive Shapes are standard building blocks: Box Cone Cylinder Sphere VRML 2.0
9
Shapes (2) Shape nodes describe: geometry - form, or structure
appearance - color and texture Shape { geometry appearance . . . } VRML 2.0
10
Specifying Geometry Shape geometry is built with geometry nodes
Standard, primitive geometry nodes include: Box { } Cone { } Cylinder { } Sphere { } VRML 2.0
11
Setting Geometry Dimensions
Geometry node fields control dimensions Box { size } 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
12
A Sample Primitive Shape
#VRML V2.0 utf8 Shape { appearance Appearance { material Material { } } geometry Cylinder { height 2.0 radius 1.5 VRML 2.0
13
Groups Group nodes describe:
children - a list of member nodes for the group #VRML V2.0 utf8 Group { children [ Shape { }, . . . ] } VRML 2.0
14
Specifying Transforms
A Transform group node controls: translation - position rotation - orientation scale - size Transform { translation rotation scale children [ ] } It applies, in a fixed order, scale - rotation -translation VRML 2.0
15
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
16
Appearance (2) Appearance nodes describe: material properties - color,
transparency, etc. more . . . Shape { appearance Appearance { material } geometry . . . } VRML 2.0
17
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
18
Example Shape { appearance Appearance {
material Material { diffuseColor } } geometry . . . VRML 2.0
19
Grouping Nodes Shapes can be grouped to compose more complex shapes
VRML has several grouping nodes, including: Group { } Switch { } Transform { } Billboard { } VRML 2.0
20
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
21
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
22
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
23
A Sample Billboard Group
children [ Billboard { axisOfRotation children [ ... ] }, Transform { } ] } VRML 2.0
24
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
25
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
26
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
27
Esempio (1) Definizione della seguente scena VRML 2.0
28
Esempio #VRML V2.0 utf8 Group { children [ Inline { url "table.wrl" },
Transform { translation children DEF Chair Inline { url "chair.wrl" } }, Transform { translation rotation children USE Chair }, Transform { translation rotation children USE Chair }, Transform { translation rotation children USE Chair }, ] } VRML 2.0
29
IndexedFaceSet Hard to build using primitives VRML 2.0
30
Specifying Coordinates
Location of dots (points) using Coordinate node Coordinate { point [ , , . . . ] } Three nodes have a coord field which accepts a Coordinate node PointSet, IndexedLineSet, IndexedFaceSet VRML 2.0
31
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
32
IndexedLineSet node Straight lines are drawn between points
coord Coordinate { point [ ] } coordIndex [ 1, 0, 3, -1, . . . ] } VRML 2.0
33
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
34
IndexedFaceSet node Faces are drawn within perimeter of points
coord Coordinate { point [ ] } coordIndex [ 1, 0, 3, -1, . . . ] VRML 2.0
35
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
36
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
37
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
38
ImageTexture node Appearance { material Material {}
texture ImageTexture { url "myimage.jpg" } The ImageTexture node supports JPEG, PNG, GIF VRML 2.0
39
MovieTexture node Appearance { texture MovieTexture {
url "mymovie.mpg" speed 1 loop FALSE } } The MovieTexture nodes supports: MPEG1-Systems and MPEG1-Video VRML 2.0
40
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 xFF0000 0x00FF00 xFFFFFF 0xFFFF00 } VRML 2.0
41
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
42
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 VRML 2.0
43
Point Light Point lights have a location and glow radially
# Standard fields, plus: location radius 1.0 attenuation } VRML 2.0
44
Directional Light Directional lights point in a specified direction
# Standard fields, plus: direction } VRML 2.0
45
Spot Light Spot lights point in a direction and focus in a cone
SpotLight { # Standard fields, plus: location direction beamWidth 1.57 cutOffAngle 0.785 radius 1.0 attenuation } VRML 2.0
46
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 orientation description "DefaultView" } VRML 2.0
47
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
48
Data Types Standard VRML Data Types SFBool SFRotation / MFRotation
SFColor / MFColor SFString / MFString SFFloat / MFFloat SFTime SFImage SFVec2f / MFVec2f SFInt32 / MFInt32 SFVec3f / MFVec3f SFnode / MFNode VRML 2.0
49
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
50
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
51
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
52
Summary of Events Event: A message that contains a data value
set_ events: Change node when received _changed events: Sent when node changes EventIn: Specifies an event node can receive EventOut: Specifies an event node can send VRML 2.0
53
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
54
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 size } Defines an axis-aligned region Zero size disables the sensor All relevant Proximity sensors generate events VRML 2.0
55
Example: Trigger Alarm
Sound { source DEF Alarm AudioClip { } } DEF Car ProximitySensor { size # size of Car ROUTE Car.enterTime TO Alarm.startTime VRML 2.0
56
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
57
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
58
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
59
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
60
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
61
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
62
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
63
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
64
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
65
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
66
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
67
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
68
Interpolation Interpolation fills in values between your key values:
Time Position Time Position PositionInterpolator nodes describe: keys - key fractions values - key positions PositionInterpolator { key [ 0.0, ] keyValue [ , ] } VRML 2.0
69
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 [ , . . .] } ROUTE Stair1Timer.fraction_changed TO Stair1Path.set_fraction ROUTE Stair1Path.value_changed TO Stair1.set_translation VRML 2.0
70
Other Interpolators You can also interpolate: Rotations Colors
Coordinates Normals Scalars VRML 2.0
71
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
72
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
73
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
74
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.