VRML 97 Abril2020
VRML 97 Abril2020
VRML 97 Abril2020
VRML 97
FORMAS SHAPE
Shape {
geometry . . . el valor es uno de varios tipos de nodos de geometría
appearance. . .el valor es el nodo de apariencia Appearance
}
o formas primitivas
Box {...} Cone {...} Cylinder {...} Sphere {...} Text {...}
ElevationGrid {...} Extrusion {...} IndexedFaceSet {...}
IndexedLineSet {...} PointSet {...}
Appearance {
material.... ... el valor es un nodo Material
texture.... ... el valor es un nodo de varios tipos de nodos de textura
...
}
Formas primitivas
Box
Shape {
geometry Box {
size 2.0 2.0
2.0 }
appearance Appearance {
material
Material { }
}
}
Formas primitivas
Sphere
Formas primitivas
Cylinder
Un nodo de geometría Cylinder construye un cilindro
o Los campos height y radius especifican el
tamaño
o Los campos bottom, top y side especifican la
presencia de las partes
Shape {
geometry Cylinder {
height 2.0
radius 1.0
bottom TRUE
top TRUE
side TRUE
}
appearance Appearance {
material
Material { }
}
}
Formas primitivas
Cone
Shape {
geometry Cone {
height 2.0
bottomRadius 1.0
bottom TRUE
side TRUE
}
12
Formas primitivas
Text
Un nodo de geometría Text construye texto
o El campo string especifica el texto
o El campo fontStyle tiene como valor un nodo FontStyle
Shape {
geometry Text {
string [ "Shape:",
"Texto"]
fontStyle FontStyle {
style
"BOLD"
family
"SERIF"
justify
"FIRST"
size
2.0
spacing
3.0
}
}
appearance Appearance {
material
Material { }
}
}
Un nodo FontStyle describe una fuente
Por defecto, todas las formas tienen una apariencia de color blanco
Un nodo Material controla
Apariencia
Especificación de color R G B
o Mezcla de luz roja (Red), verde (Green) y azul (Blue)
o Valores entre 0.0 (nada) y 1.0 (máximo)
...
Shape {
geometry Box { }
appearance Appearance {
material Material {
diffuseColor 0.0 0.0
1.0
emissiveColor 0.0
0.0 0.0
transparency 0.0
}
}
}
...material Material {
diffuseColor 0.0 0.0 0.0
emissiveColor 0.0 0.0 1.0
transparency 0.0
}...
...material Material {
diffuseColor 0.0 0.0 0.0
emissiveColor 0.0 0.0 1.0
transparency 0.5
}...
...material Material {
diffuseColor 1.0 0.0 0.0
emissiveColor 0.0 0.0 1.0
transparency 0.0
}...
Color Red Green Blue
Blanco 1.0 1.0 1.0
Rojo 1.0 0.0 0.0
Amarillo 1.0 1.0 0.0
Celeste 0.0 1.0 1.0
Marrón 0.5 0.2 0.0
Apariencia
Experimentando con el brillo
...
Shape {
geometry Sphere { }
appearance Appearance {
material Material {
diffuseColor 0.22
0.15 0.0
specularColor 0.71
0.7 0.56
shininess 0.16
ambientIntensity
0.4
}
}
}
...
ambient diffuse specular
Descripción
Intensity Color Color
Shape {
appearance DEF oro Appearance {
material Material {
ambientIntensity 0.4
diffuseColor 0.22 0.15 0.0
specularColor 0.71 0.70 0.56
shininess 0.16
}
}
geometry Box {size 1.0 1.0 1.0 }
}
Shape {
appearance USE oro
geometry Sphere { radius 0.7}
}
Shape {
appearance USE oro
geometry Cylinder { radius 1.5
height 0.2 }
}
AGRUPAMIENTO
Agrupamiento
Transform
...
Transform {
translation 0.0 2.5 0.0
rotation 0.0 1.0 0.0 0.0
scale 0.375 0.375 0.375
children [
Shape {
appearance Appearance {
material Material {...}
}
geometry Box { }
}
]
}
...
Agrupamiento. Transform
translation
Transform {
translation 1.0 1.5
2.0
children [
Shape {
geometry Box
{ }
}
]
}
....
Agrupamiento Transform
scale
Transform {
translation 1.0 1.5 2.0
scale 2.0 0.5 1.0
children [
Shape {
geometry Box { }
}
]
}
...
Agrupamiento Transform
rotation
Transform {
translation 1.0 1.5 2.0
rotation 0.0 1.0 0.0 0.7
children [
Shape {
geometry Box { }
}
]
}
...
Agrupamiento
Group
Group {
children [
# hijo 1: puerta
Shape {
geometry Box {
size 3.0 6.0 0.2
}
....
},
# hijo 2: picaporte
Transform {
translation 1.18 -0.0 0.2
children [
Shape {
geometry Sphere {
radius 0.15
}
....
}
]
}
]
}
Agrupamiento
Switch
El nodo de agrupamiento Switch crea un grupo donde sólo uno de sus
hijos es visualizado
o Los nodos hijos están dentro del campo choice y son numerados
implícitamente desde 0
o El campo whichChoice indica el hijo seleccionado (-1 ninguno)
Switch {
whichChoice 0
choice [
# 0, rojo
.....
Shape {
geometry Sphere {}
appearance Appearance {
material Material {
diffuseColor 1.0 0.0 0.0
}
}
}
# 1, amarillo
...
Shape {
geometry Sphere {}
appearance ...(amarillo)
}
# 2
....
Shape {
geometry Sphere {}
appearance ...(verde)
}
]
}
...
Agrupamiento
Billboard
El nodo de agrupamiento Billboard crea un grupo con un
sistema especial de coordenadas
o El sistema de coordenadas se rota alrededor del
ejeaxisOfRotation para enfrentar al usuario
o Si el eje es 0.0 0.0 0.0 la rotación se realiza alrededor de
cualquier eje
Billboard {
# Rota alrededor del eje Y
axisOfRotation 0.0 1.0 0.0
children [ . . .cabeza del robot ]
}
. . .
Billboard {
# Rota alrededor de cualquier eje
axisOfRotation 0.0 0.0 0.0
children [. . .]
}
Agrupamiento
Anchor
Anchor {
url
"../sonidos/bach.wav"
description "sonido"
children [
Shape {...}
]
}
Anchor {
url "..indice.htm"
description "html"
parameter "target=new"
children [...]
}
Anchor {
url "temple.wrl"
description "vrml"
children [...]
}
Anchor {
url "#VP"
description "viewpoint"
children [...]
}
Agrupamiento
Inline
Transform {
translation 0.95 0.0 0.0
children [
DEF silla Inline{
url"chair.wrl"
}
]
}
Transform {
translation 0.95 0.0 0.0
rotation 0.0 1.0 0.0
children USE silla
}
. . .
Agrupamiento
Collision
DEF Collide Collision {
collide TRUE
proxy Shape { geometry Box { . . . }
}
children [ . . . ]
}
Agrupamiento
LOD
Coordinate {
point [ # X Y Z
2.0 1.0 3.0,
4.0 2.5 5.3,
. . .
]
}
PointSet
El nodo de geometría PointSet crea un conjunto de puntos
Shape {
appearance Appearance
{
material
Material{...}
}
geometry PointSet {
coord Coordinate {
point [
1.0 1.0 0.0,
2.0 4.0 0.0,
. . .
]
}
. . .
}
}
IndexedLineSet
Shape {
appearance Appearance {
material
Material{...}
}
geometry IndexedLineSet
{
coord Coordinate {
point [
1.0 1.0 0.0,
2.0 4.0 0.0,
. . .]
}
coordIndex [0, 1, 2,-
1,
3, ..., -1,]
}
}
o coord tiene como valor un nodo Coordinate que especifica
coordenadas numeradas implícitamente desde 0
o Los índices de las coordenadas se listan en coordIndex en el
orden deseado (índice -1 indica un corte de línea)
IndexedFaceSet
ElevationGrid
Shape {
appearance Appearance {
material Material{...}
}
geometry ElevationGrid {
xDimension 128
zDimension 128
xSpacing 0.02
zSpacing 0.02
solid TRUE
height [
0.019608,
0.015686,
. . . ]
}
}
Extrusion
Shape {
appearance Appearance {
material Material{...}
}
geometry Extrusion {
crossSection [ 0.75 0.00,
0.69
-0.285,...]
spine [ 2.00 0.00 -0.00,
1.85 0.12
-0.77,...]
scale [ 0.1 0.1,
0.15 0.11,...]
endCap TRUE
beginCap FALSE
solid FALSE
}
}
Shape {
appearance Appearance {
material Material { . . . }
}
geometry ....
}
Color {
color [ 1.0 0.0 0.0, . . . ]
}
o puede usarse en el campo color de los nodos IndexedFaceSet,
IndexedLineSet, PointSet y ElevationGrid para proveer colores a
las distintas partes de las geometrías
o anula los efectos del nodo Material
Shape {
geometry PointSet {
coord Coordinate
{
point [. . .]
}
color Color {
color [
0.0 1.0
0.0,
1.0 1.0
0.0,
...]
}
}
}
Shape {
geometry IndexedFaceSet {
coord Coordinate {... }
coordIndex [ N índices ]
color Color { color [...] }
colorIndex[ N índices ]
colorPerVertex TRUE
}
}
Shape {
geometry IndexedFaceSet {
...
color Color { color [ ...] }
colorindex[ N
índices=nro.caras ]
colorPerVertex FALSE
}
}
Shape {
appearance Appearance {...}
geometry IndexedFaceSet {
coord Coordinate {...}
coordIndex [...]
creaseAngle 0.0
}
}
Shape {
appearance Appearance {...}
geometry IndexedFaceSet {
coord Coordinate {...}
coordIndex [...]
creaseAngle 1.5
}
}
Shape { Shape {
appearance Appearance appearance Appearance
{ . . . } { . . . }
geometry geometry ElevationGrid
IndexedFaceSet { {
coord Coordinate height [ . . . ]
{... } normal Normal
coordIndex [N { . . . }
índices] normalPerVertex
normal Normal { . . . TRUE
} }
normalIndex [ N }
índices ]
normalPerVertex
TRUE
}
}
Texturas
Para modelar una textura
Texturas
ImageTexture
Texturas
ImageTexture
# Pared
Shape {
appearance DEF Brick Appearance {
texture ImageTexture { url "brick.jpg" }
}
geometry IndexedFaceSet {. . . }
}
# Arbol derecha
Transform {
translation 3.5 0.0 0.0
children [
Billboard { children [
Shape {
appearance Appearance {
texture ImageTexture { url "tree1.png" }
}
geometry DEF TreeFace IndexedFaceSet
{... }
}
] }
] }
# Arbol medio
Transform {
children [
Billboard { children [
Shape {
appearance Appearance {
texture ImageTexture { url "tree1.jpg" }
}
geometry USE TreeFace
}
] }
] }
# Arbol izquierda
Transform {
translation -3.5 0.0 0.0
children [
Billboard { children [
Shape { geometry USE TreeFace }
] }
] }
.
Texturas
ImageTexture
Texturas
PixelTexture
Shape {
appearance Appearance
{
texture PixelTexture
{
image 3 1 3
0xFF0000
0x00FF00
0x0000FF
}
}
geometry Cylinder {
height 2.7
}
}
Texturas
MovieTexture
El nodo de textura MovieTexture usa un video de un archivo MPEG-1
para proyectarlo como textura en una forma
Shape {
appearance Appearance
{
texture MovieTexture
{
url "t-
rex.mpg"
loop TRUE
speed 1.0
startTime 0.0
stopTime 0.0
}
}
geometry Cylinder {
height 2.7
}
}
o url indica el archivo utilizado
o loop, speed, startTime, stopTime especifican cuando y cómo
proyectarlo
Es problemático en algunos browsers
En su lugar, se puede
o extraer una parte de la imagen mediante el uso del
nodo TextureCoordinate
o modificar la posición, orientación y escala de una imagen de
textura mediante el nodo TextureTransform
Las imagenes de textura tienen un sistema de coordenadas
bidimensional: