Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CONCEPTO
El VRML (virtual reality modeling lenguage ) es un formato de
archivo que describe objetos interactivos 3D dentro de una escena
especifica. Como tal podemos decir además que es un lenguaje no
de programación sino un lenguaje de modelamiento de escenas
tridimensionales interactivas. El VRML permite implementar
escenas estáticas o dinámicas en 3D con posibilidad de
encadenamiento de texto, sonido imágenes y vídeo. Dentro de la
arquitectura del VRML aparece un concepto interesante como lo es
el concepto de visualizador el cual como su nombre lo indica
permite presentar la escena VRML. Un visualizador básicamente es
un programa de computador que se encarga de interpretar el
código VRML y ejecutarlo en la plataforma en la que se encuentra,
permitiendo al usuario interactuar con la escena definida. Esta
forma de ejecución de un archivo VRML es ventajosa considerando
las implicaciones que tiene cargar por la red un archivo ejecutable
contar un archivo de solo texto como lo son los archivos VRML. Todo
el trabajo se deja entonces la visualizador.
ORGANISMOS CONSTITUYENTES
Los entes que colaboraron en la estandarización del worlwide fueron
la ISO (organización internacional de estandarización), la IEC
(comisión internacional electrónica), la JTC (comité técnico de
trabajo) y el consorcio VRML.
OBJETIVOS
• El VRML esta diseñado para ser utilizado sobre Internet, Intranets
o como clientes locales.
• Los formatos VRML están diseñados para integrar gráficos
tridimensionales y multimedia.
• El VRML está pensado para diversidad de aplicaciones en áreas
como ingeniería, simulación, entretenimiento, educación etc.
ALCANCES Y LIMITACIONES
Una escena VRML es una integración básica de gráficos 3D y
multimedia los objetos integrados en una escena pueden ser
modificados en momento de ejecución a través de diferentes
mecanismos. VRML compone, encapsula y da extensibilidad a una
escena.
VRML no define dispositivos físicos u otros conceptos afines como
resolución de pantalla o dispositivos de entrada, VRML interpreta un
amplio rango de posibilidades sin particularizar sobre el uso de
ciertos elementos por ejemplo VRML no asume la existencia de
mouse en 2D.
ARCHIVOS VRML.
un archivo VRML puede contener:
a. Una escena compuesta de objetos
b. un conjunto de posibilidades multimedia
c. encadenamiento a otros archivos y aplicaciones.
d. mecanismos de modificación del comportamiento de los objetos.
DEFINICIONES:
nodo: componente esencial de una escena en VRML. Un nodo es
una abstracción de conceptos y objetos reales. Esta compuesto por
campos y eventos que determinan las características y
comportamiento del nodo.
nodos de agrupación: son nodos cuya tarea primordial es agrupar
otros nodos, con el fin primordial de establecer un comportamiento
particular sobre ellos.
entradas
Archivo VRML
usuario
VISUALIZADOR VRML
PARSER
prototipos Constructor
de nodos
ESCENA GRAFICA
Jerarquización en
transformaciones Ruta gráfica
Máquina * sensores
de * escript
ejecución * interpolaciones
PRESENTACION AUDIO/VISUAL
SFBool
SFBool es una campo o un evento que contiene un valor booleano.
Los SFBools pueden tener un valor falso (FALSE) o verdadero
(TRUE).
Ejemplo:
field SFBool dato
exposedFiel SFBool dato
eventIn SFBool dato
eventOut SFBool dato
dato=TRUE
dato=FALSE
SFColor / MFColor
SFColor especifica una tripleta de color RGB. MFColor cero o más
tripletas de color RGB. Cada color en VRML se escribe como una
tripleta RGB en donde la combinación de rojo, verde y azul son
números en punto flotante expresados en el formato ISOC. en
donde cada número esta en un rango de 0.0 y 1.0.
SFFloat / MFFloat
SFFloat especifica un número en punto flotante. MFFloat especifica
cero o más números en punto flotante. Tanto SFFloat y MFFloat son
escritos en el formato de punto flotante ISO C.
SFInt32 / MFInt32
SFInt32 especifica un entero de 32 bits, MFInt especifica cero o
más enteros de 32 bits. Lo datos entero se escriben en VRML como
decinales o hexadecimales.
field SFInt dato field MFInt dato
exposedFiel SFInt dato exposedFiel MFInt dato
eventIn SFInt dato eventIn MFInt dato
eventOut SFInt dato eventOut MFInt dato
SFRotation / MFRotation
SFRotation especifica una determinada rotación. MFRotation
especifica cero o más rotaciones. Una SFRotation se escribe en los
archivos VRML con cuatro valores flotantes del formato ISO C y
además separados por un espacio. Los tres primeros Valores
especifican un eje de rotación normalizado vector alrededor del cual
se efectúa la rotación. El cuarto valor especifica la rotación que se
debe realizar y esta expresada en radianes. MFRotation especifica
cero o más rotaciones.
SFString / MFString
SFString y MFString contienen cadenas formateadas con la norma
UTF-8, SFString especifica una cadena de caracteres mientras
MFSTRing especifica cero o más cadenas de caracteres. Cualquier
carácter puede aparecer dentro de las comillas incluso las comillas
mismas para lo cual se debe anteponer un backslash para que no
sean reconocidas como el carácter que esta encerrando la cadena
de caracteres.
SFTime
SFTime especifica un valor de tiempo. El timepo en VRML es escrito
con numeros en punto flotante de doble precision en el formato de
ls ISO C. Los valores de tiempo son especificados como el número
de segundos desde enero 1 de 1970, 00:00:00
dato = 0
SFVec2f / MFVec2f
SFVect2f espefica un vector en dos dimensiones. MFVect2F
especifica cero o más vectores en dos dimensiones. tanto SFVect2f
como MFVect2f son vectores escritos en VRML como valores en
punto flotante según el formato ISO C. separdos poe espacios en
blanco.
SFVec3f / MFVec3f
SFVec3f especifica un vector en tres dimensiones. MFVec3f
especifica cero o más vectores en tres dimensiones. SFVec3f y
MFVec3f se escriben en un archivo VRML como valores en punto
flotante del formato ISO C. separados con espacios:
field SFVect3f dato field MFVect3f dato
exposedFiel SFVect3f exposedFiel MFVect3f
dato dato
eventIn SFVect3f dato eventIn MFVect3f dato
eventOut SFVect3f dato eventOut MFVect3f dato
Transform
Transform {
eventIn MFNode addChildren
eventIn MFNode removeChildren
exposedField SFVec3f center 0 0 0 # (-∞,∞)
exposedField MFNode children []
exposedField SFRotation rotation 0 0 1 0 # [-1,1],(-
∞,∞)
exposedField SFVec3f scale 1 1 1 # (0, ∞)
exposedField SFRotation scaleOrientation 0 0 1 0 # [-1,1],(- ∞,
∞)
exposedField SFVec3f translation 000 # (-∞,∞)
field SFVec3f bboxCenter 000 # (-∞,∞)
field SFVec3f bboxSize -1 -1 -1 # (0,
∞) or -1,-1,-1
}
P' = T × C × R × SR × S × -SR × -C × P
Shape
Shape {
exposedField SFNode appearance NULL
exposedField SFNode geometry NULL
}
El nodo Shape tiene dos campos el campo appearance y el campo
geometry los cuales son usados para usar objetos rendereados en
el mundo.
El campo appearance contiene nodo Appearance que especifica los
atributos visuales “material y texturaÓ que serán aplicados a la
geometría.
El campo gemetry contiene un nodo geometría la cual es
rendereada con la apariencia.
Si la geometría es null no se pinta nada.
Geometrias
Sphere
Sphere {
field SFFloat radius 1 # (0,∞)
}
El nodo esfera especifica una esfera centrada en (0,0,0) en sistema
coordenado local. El campo radius especifica el radio de la esfera
que debe ser >0.0
Box
Box {
field SFVec3f size 2 2 2 # (0, ∞)
}
el nodo Box especifica un cubo paralepipedo rectangular centrado
en (0,0,0) en sistema coordenado local alineado con los ejes. Por
defecto al medida del cubo es de 2 unidades en x,y,z tomados en
cada eje desde –1 hasta 1.
Cone
Cone {
field SFFloat bottomRadius 1 # (0, ∞)
field SFFloat height 2 # (0, ∞)
field SFBool side TRUE
field SFBool bottom TRUE
}
Cylinder
Cylinder {
field SFBool bottom TRUE
field SFFloat height 2 # (0 ∞)
field SFFloat radius 1 # (0, ∞)
field SFBool side TRUE
field SFBool top TRUE
}
Programa:
Transform {
children [
Shape {
geometry Box {size 1 1 1}
}
]
}
Appearance
Appearance {
exposedField SFNode material NULL
exposedField SFNode texture NULL
exposedField SFNode textureTransform NULL
}
Material
Material {
exposedField SFFloat ambientIntensity 0.2 # [0,1]
exposedField SFColor diffuseColor 0.8 0.8 0.8 # [0,1]
exposedField SFColor emissiveColor 000 # [0,1]
exposedField SFFloat shininess 0.2 # [0,1]
exposedField SFColor specularColor 000 # [0,1]
exposedField SFFloat transparency 0 # [0,1]
}
ImageTexture
ImageTexture {
exposedField MFString url []
field SFBool repeatS TRUE
field SFBool repeatT TRUE
}
MovieTexture
MovieTexture {
exposedField SFBool loop FALSE
exposedField SFFloat speed 1.0 # (-∞,
∞)
exposedField SFTime startTime 0 # (-∞,
∞)
exposedField SFTime stopTime 0 # (-∞,
∞)
exposedField MFString url []
field SFBool repeatS TRUE
field SFBool repeatT TRUE
eventOut SFTime duration_changed
eventOut SFBool isActive
}
El nodo MovieTexture define un mapa de textura “que contiene un
archivo de una películaÓ y los parámetros del control de la película
y el mapeo de textura. Un nodo MovieTexture puede ser usado
también como una fuente de datos de sonido por un nodo Sound.
En este caso especial el nodo MovieTexture no es usado para
rendereo.
Transform
{
children Shape
{
appearance Appearance
{
texture MovieTexture{url "nombre.mpg"}
}
geometry Box{}
}
}
PixelTexture
PixelTexture {
exposedField SFImage image 000
field SFBool repeatS TRUE
field SFBool repeatT TRUE
}
Transform
{
children Shape
{
appearance Appearance
{
material Material{diffuseColor 1 0 0}
texture PixelTexture{image 2 2 2 0xff0000}
}
geometry Box{}
}
}
TextureTransform
TextureTransform {
exposedField SFVec2f center 00 # (-∞,∞)
exposedField SFFloat rotation 0 # (-∞,∞)
exposedField SFVec2f scale 11 # (-∞,∞)
exposedField SFVec2f translation 0 0 # (-∞,∞)
}
a. una traslacion
b. una rotacion alrededor del punto central
c. una escala no uniforme alrededor del punto central.
Fog
Fog {
exposedField SFColor color 111 # [0,1]
exposedField SFString fogType "LINEAR"
exposedField SFFloat visibilityRange 0 # [0,∞)
eventIn SFBool set_bind
eventOut SFBool isBound
}
Los nodos atables tienen cada uno su propia pila con a la cual se
modela el comportamiento de estos nodos en una escena, este
comportamiento se maneja a través de los eventos del entrad
set_bind y el evento de salida isBound. El evento de entrada
set_bind es usado para mover un nodo dado del tope o hacia el tope
de la pila. Un valor TRUE enviado a set_bind mueve el nodo al tope
de la pila, un valor FALSE enviado a set_bind remueve el nodo del
tope de la pila. El evento de salida isBoud es generado cuando el
nodo es movido del tope, cuando el nodo es movido hacia el tope o
cuando el nodo se mete debajo del tope de la pila. Es decir un
evento isBound es enviado cuando un dado se convierte o deja de
ser nodo activo. El nodo en el tope del stack es usado por el
browser para definir la escena. Si la pila esta vacía porque no se
han definido nodos o por que ha sido vaciada se presenta la escena
con los valores por defecto que se tengan.
Para atar nodos se tienen las siguientes reglas:
• durante la lectura el primer nodo atable es colocado en el topo
de la pila
• cuando un nodo recibe TRUE en set_bind, puede suceder:
- que el nodo no este en el tope del stack lo cual hace que sea
es movido al tope. Enviando un evento de salida isBoud de
TRUE. El nodo que se encontraba en el tope envía por su
parte un evento de salida isBoud FALSE.
- Que el nodo este en el tope de la pila situación en la cual los
eventos no tiene efecto.
• cuando un nodo recibe FALSE en set_bind el nodo es removido
del stack
- si estaba en el tope del stack envia un evnto isBound FALSE el
siguiente nodo en el stack se atara y este enviara isbound TRUE.
• cuando un nodo recibe FALSE en set_bind y este nodo no se
encuentra en pila los eventos son ignorados
• cuando un nodo reemplaza otro en el tope de la pila se envía
simultáneamente isBound TRUE y FALSE para los nodos de forma
respectiva.
• Si un ndo es borradoi se comporta como si recibiera un set_bind
FALSE.
Fog{
color 1 0 0
visibilityRange 1
}
Transform
{
children Shape{geometry Box{}}
}
DirectionalLight
DirectionalLight {
exposedField SFFloat ambientIntensity 0 #
[0,1]
exposedField SFColor color 111 #
[0,1]
exposedField SFVec3f direction 0 0 -1 # (-
∞,∞)
exposedField SFFloat intensity 1 #
[0,1]
exposedField SFBool on TRUE
}
PointLight
PointLight {
exposedField SFFloat ambientIntensity 0 # [0,1]
exposedField SFVec3f attenuation 1 0 0 # [0,∞)
exposedField SFColor color 1 1 1 # [0,1]
exposedField SFFloat intensity 1 # [0,1]
exposedField SFVec3f location 0 0 0 # (-∞,∞)
exposedField SFBool on TRUE
exposedField SFFloat radius 100 # [0, ∞)
}
El nodo PointLight una fuente de luz puntual con una ubicación en
sistema coordenado local. Un fuente puntual emite luz
uniformemente en todas direcciones es decir es omnidireccional.
Una fuente puntual es afectada por las transformaciones ancestro.
SpotLight
SpotLight {
exposedField SFFloat ambientIntensity 0 # [0,1]
exposedField SFVec3f attenuation 100 # [0,∞)
exposedField SFFloat beamWidth 1.570796 # (0,π
/2]
exposedField SFColor color 111 # [0,1]
exposedField SFFloat cutOffAngle 0.785398 # (0, π
/2]
exposedField SFVec3f direction 0 0 -1 # (- ∞,
∞)
exposedField SFFloat intensity 1 # [0,1]
exposedField SFVec3f location 000 # (-∞,
∞)
exposedField SFBool on TRUE
exposedField SFFloat radius 100 # [0,
∞)
}
Irgb=IFrgb×(1- f0)+f0×[OErgb+SUM(oni×attenuationi×spoti×ILrgb×(ambienti +
difussei + especulari))]
donde:
f0 = fog interpolado.
LINEAR ⇒ f0 = (fogVisibility-dV) / fogVisibility para dV
< fogVisibility
LINEAR ⇒ f0 = 0 para dV
≥ fogVisibility
EXPONENTIAL ⇒ f0 = exp(-dV / (fogVisibility- dV ) ) para dV
< fogVisibility
EXPONENTIAL ⇒ f0 = 0 para dV ≥
fogVisibility
NO Fog ⇒ f0 = 1
Con: dV = distancia del punto de la geometría a la posición
del observador, en sistema
coordenado del nodo Fog actual.
fogVisibility= visibilityRange.
OErgb = color de emisión del material “emissiveColorÓ.
con:
spotAngle = acos( -L · spotDiri)
spotDiri =directccion normalizada SpotLight i
spot BW = SpotLight i beamWidth
spot CO = SpotLight i cutOffAngle
Background {
eventIn SFBool set_bind
exposedField MFFloat groundAngle [] # [0, ∞/2]
exposedfield MFColor groundColor [] # [0,1]
exposedField MFString backUrl []
exposedField MFString bottomUrl []
exposedField MFString frontUrl []
exposedField MFString leftUrl []
exposedField MFString rightUrl []
exposedField MFString topUrl []
exposedField MFFloat skyAngle [] # [0, ∞]
exposedField MFColor skyColor [000] # [0,1]
eventOut SFBool isBound
}
El nodo Background es usado para especificar un color backdrop
que simule tierra y cielo, tan satisfactorio como una textura del
fondo, o panorama, que se pone detrás de todas las geometrías en
la escena en frente del la tierra y el cielo. Los nodos Background se
especifican en el sistema coordenado local y son afectados por la
rotación acumulada de sus antepasados.los nodos Background son
nodos del atados." existe un stack de Background, en el cual el tope
será el nodo activo. Para mover un nodo Background al tope se
envía un valor TRUE al evento de entrada set_bin.Un valor de FALSE
enviado a set_bind remueve el backgraund del tope de la pila.El
backdrop es conceptually una esfera parcial (la tierra) encerrada
dentro de de una esfera completa (el cielo) en el sistema
coordenado local con el observador en el centro de las esferas.
Ambas esferas tienen radios infinitos (un epsilon aparte) y cada una
es pintada con círculos concentricos de colores interpolados,
perpendicular al eje Y local de la esfera. El nodo Background esta
sujeto a las rotaciones acumuladas de su antepasadas
transformaciones. El escalamineto y traslación son ignorados. La
esfera del cielo siempre esta un poco más alejada del obsrvador
que la esfera de la tierra causando que la tierra aparesca en frente
del cielo en casos donde se solapan.
ordenadas así:
QuadNormal[i,j] = Normal[ i + j × (xDimension-1)]
con:
0 ≤ i < xDimension-1 and 0 ≤ j < zDimension-1,
y QuadNormal[i,j] es la normal para el cuadrilátero
definido
por: height[i+j×xDimension],
height[(i+1)+j×xDimension],
height[(i+1)+(j+1)×xDimension] y
height[i+(j+1)×xDimension]
Si la normalPerVertex es TRUE y el campo normal no es NULL, el
campo normal debe especificar un nodo normal que conteniendo
por lo menos las normales xDimension × zDimension normals, una
para cada vértice, ordenadas así:
VertexNormal[i,j] = Normal[ i + j ×
xDimension]
con:
0 ≤i < xDimension and 0 ≤ j <
zDimension,
y VertexNormal[i,j], es la normal por
vertece definido
por height[i+j×xDimension]
PointSet {
exposedField SFNode color NULL
exposedField SFNode coord NULL
}
El nodo PointSet especifica un conjunto de puntos 3D, en sistema
local de coordenadas con colores asociados a cada punto. el campo
coord especifica que puede contener un nodo Coordinate o una
instancia de un nodo Cordinate. El campo color especifica que
puede contener un nodo Color.
#definiciones
Transform
{
translation 5 10 0
children [Shape { appearance
Appearance {texture ImageTexture
{url "Texture/Fire_4.gif"} }
geometry Sphere{}
}
Shape { appearance NULL
geometry PointSet {
color USE colores
coord USE coordenadas
}
}
]#fin del children
}#fin de la transform
Transform
{
children [
Shape {
appearance
Appearance {
material NULL
texture ImageTexture
{url "Texture/Fire_4.gif"}
}
geometry ElevationGrid
{
color NULL
normal NULL
texCoord NULL
ccw TRUE
colorPerVertex FALSE
creaseAngle 3.1416
normalPerVertex TRUE
solid FALSE
xDimension 20
xSpacing 1
zDimension 10
zSpacing 2.1
height
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.574138, 1.15642, 0, 0, 0, 0, 0,
0, 0, 0, 1.24391, 1.22496, 1.34675,
0, 0.750605, 0, 0, 0, 0, 0.77818,
0.882007, 0.511196, 1.17336, 1.51892,
0.682372, 0, 0, 0, 0, 0, 3.02813,
2.04578, 1.70073, 0.900392, 0, 0, 0,
0, 0, 0.935582, 2.29136, 1.80391,
1.94608, 0.80072, 1.82315, 0, 0, 0, 0,
1.0034, 1.94628, 1.77, 1.98183,1.47482,
0, 0, 0, 0, 0, 1.48495, 0.754169, 2.0891,
2.53922, 1.56558, 1.30134, 0, 0, 0, 0, 0,
0, 0.689713, 0, 0.987446, 0.696322, 0, 0,
0, 0.750605, 0, 2.30714, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
]
}#fin height
}#fin Shape
]#fin de children
}#fin Transform
IndexedLineSet
IndexedLineSet {
eventIn MFInt32 set_colorIndex
eventIn MFInt32 set_coordIndex
exposedField SFNode color NULL
exposedField SFNode coord NULL
field MFInt32 colorIndex [] # [-1,
∞)
field SFBool colorPerVertex TRUE
field MFInt32 coordIndex [] # [-1,
∞)
}
b. Si colorPerVertex es TRUE
• si el campo colorIndex no esta vacío, entonces los colores son
aplicados a cada vértice del IndexedLineSet en exactamente la
misma forma que el campo coordIndex es usado para suplir las
coordenadas para cada vértice del nodo Coordinate. El campo
colorIndex debe contener por lo menos tantos índices en el
campo coordindex con la separación de –1 en los mismos lugares
del campo coordIndex. Si el índice mas grande en el campo
colorIndex es N entonces debe haber N+1 color en el nodo Color.
• Si el campo colorIndex esta vacío, entonces el campo coordIndex
es usado para escoger colores del nodo Color. Si el índice mas
grande en el campo coordIndex es N. Deben haber N+1 colores
en el nodo Color.
Transform
{
translation 0 0 0
rotation 0 0 1 0
scale 111
center 000
children Shape
{appearance Appearance {material Material {}}
geometry IndexedLineSet
{
color USE miColor
coord USE miCoordenada
coordIndex [0,1,-1,1,2,-1,2,3,-1,3,0]
colorPerVertex FALSE
colorIndex [0,0,0,0]
}
}
}
Sound {
exposedField SFVec3f direction 001
exposedField SFFloat intensity 1 # [0,1]
exposedField SFVec3f location 000
exposedField SFFloat maxBack 10
exposedField SFFloat maxFront 10
exposedField SFFloat minBack 1
exposedField SFFloat minFront 1
exposedField SFFloat priority 0 # [0,1]
exposedField SFNode source NULL
field SFBool spatialize TRUE
}
AudioClip {
exposedField SFString description ""
exposedField SFBool loop FALSE
exposedField SFFloat pitch 1.0
exposedField SFTime startTime 0
exposedField SFTime stopTime 0
exposedField MFString url []
eventOut SFTime duration_changed
eventOut SFBool isActive
}
Un nodo AudioClip especifica los datos de audio que pueden ser
referenciados por otros nodos que requieren una fuente de audio. El
campo description especifica una descripción textual de la fuente
del audio. No se requiere visualizador para desplegar el campo
description pero puede escoger hacerlo en adición a tocar el sonido.
El campo url especifica el URL (localizador de recursos) desde el
cual el sonido es cargado. los Browsers deben soportar por lo
menos el formato del wavefile en estructura estructura PCM, se
recomienda que los browsers también soporten archivos de tipo
MIDI. Los resultados no son definidos cuando el URL referenciado
tiene tipos de datos no soportados.
Transform
{
children [
Shape {geometry Sphere {radius 0.5}}
Sound {
direction 0 0 1
intensity 1
location 0 0 0
maxBack 10
maxFront 20
minBack 1
minFront 10
priority 1
source USE miSonido
spatialize TRUE
}
]
}
Text
Text {
exposedField MFString string []
exposedField SFNode fontStyle NULL
exposedField MFFloat length [] # [0,∞)
exposedField SFFloat maxExtent 0.0 # [0, ∞)
}
FontStyle
FontStyle {
field MFString family ["SERIF"]
field SFBool horizontal TRUE
field MFString justify "BEGIN"
field SFString language ""
field SFBool leftToRight TRUE
field SFFloat size 1.0 # (0,∞)
field SFFloat spacing 1.0 # [0, ∞)
field SFString style "PLAIN"
field SFBool topToBottom TRUE
}
Dirección y justificación
Anchor {
eventIn MFNode addChildren
eventIn MFNode removeChildren
exposedField MFNode children []
exposedField SFString description ""
exposedField MFString parameter []
exposedField MFString url []
field SFVec3f bboxCenter 0 0 0
field SFVec3f bboxSize -1 -1 -1
}
Anchor {
url "http://.../AlgunaEscena.wrl#AlgunNombreDeCamara"
children Shape { geometry Box {} }
}
Anchor
{ children Shape {geometry Box {}}
bboxCenter 1 0 0
bboxSize 111
description "ESTE ES MI ANCHOR"
parameter ""
url "texto.WRL"
}
Interpoladores
OrientationInterpolator {
eventIn SFFloat set_fraction
exposedField MFFloat key []
exposedField MFRotation keyValue []
eventOut SFRotation value_changed
}
PositionInterpolator {
eventIn SFFloat set_fraction
exposedField MFFloat key []
exposedField MFVec3f keyValue []
eventOut SFVec3f value_changed
}
el nodo PositionInterpolator interpola valores de traslación sin que
estos sean acumulativos.
El campo key contiene las porcentajes de interpolación del campo
keyValue que contiene las posiciones de interpolación. Hay que
tener en cuenta que deben existir tantos porcentajes de
interpolación como posiciones de traslación.
El evento de entrada set_fraction recibe un evento que indica el
comienzo de la interpolación
el evento de salida value_changed genera los valores de
interpolación.
ScalarInterpolator {
eventIn SFFloat set_fraction
exposedField MFFloat key []
exposedField MFFloat keyValue []
eventOut SFFloat value_changed
}
CoordinateInterpolator {
eventIn SFFloat set_fraction
exposedField MFFloat key []
exposedField MFVec3f keyValue []
eventOut MFVec3f value_changed
}
Script
Script {
exposedField MFString url []
field SFBool directOutput FALSE
field SFBool mustEvaluate FALSE
# And any number of:
eventIn eventType eventName
field fieldType fieldName initialValue
eventOut eventType eventName
}
Viewpoint
Viewpoint {
eventIn SFBool set_bind
exposedField SFFloat fieldOfView 0.785398 # (0,
π)
exposedField SFBool jump TRUE
exposedField SFRotation orientation 0010 #
[-1,1],(- ∞,∞)
exposedField SFVec3f position 0 0 10 # (-
∞,∞)
field SFString description ""
eventOut SFTime bindTime
eventOut SFBool isBound
}
#####
ROUTE TocarSol.isActive TO Programa.cambiarSol
ROUTE Programa.nodo_cambiadoS TO
SistemaCamaraTierra.removeChildren
ROUTE Programa.nodo_cambiadoS TO
SistemaCamaraLuna.removeChildren
ROUTE Programa.nodo_cambiadoS TO
SistemaCamaraSol.addChildren
###############
ROUTE TocarTierra.isActive TO Programa.cambiarTierra
ROUTE Programa.nodo_cambiadoT TO
SistemaCamaraSol.removeChildren
ROUTE Programa.nodo_cambiadoT TO
SistemaCamaraLuna.removeChildren
ROUTE Programa.nodo_cambiadoT TO
SistemaCamaraTierra.addChildren
###############
ROUTE TocarLuna.isActive TO Programa.cambiarLuna
ROUTE Programa.nodo_cambiadoL TO
SistemaCamaraSol.removeChildren
ROUTE Programa.nodo_cambiadoL TO
SistemaCamaraTierra.removeChildren
ROUTE Programa.nodo_cambiadoL TO
SistemaCamaraLuna.addChildren
#####
Prototipos
PlaneSensor {
exposedField SFBool autoOffset TRUE
exposedField SFBool enabled TRUE
exposedField SFVec2f maxPosition -1 -1 # (-∞,
∞)
exposedField SFVec2f minPosition 00 # (-∞,
∞)
exposedField SFVec3f offset 0 0 0 # (-∞,
∞)
eventOut SFBool isActive
eventOut SFVec3f trackPoint_changed
eventOut SFVec3f translation_changed
}
SphereSensor
SphereSensor {
exposedField SFBool autoOffset TRUE
exposedField SFBool enabled TRUE
exposedField SFRotation offset 0100
eventOut SFBool isActive
eventOut SFRotation rotation_changed
eventOut SFVec3f trackPoint_changed
}
function TrasladarEnYN(tiempo)
{traslacion_cambiada[1]=traslacion_cambiada[1]-
paso*tiempo/relojYN.cycleInterval;}
function TrasladarEnYP(tiempo)
{traslacion_cambiada[1]=traslacion_cambiada[1]+paso*tiempo/
relojYP.cycleInterval;}
function TrasladarEnZN(tiempo)
{traslacion_cambiada[2]=traslacion_cambiada[2]-
paso*tiempo/relojZN.cycleInterval;}
function TrasladarEnZP(tiempo)
{traslacion_cambiada[2]=traslacion_cambiada[2]+paso*tiempo/
relojZP.cycleInterval;}
function RotarEnYN(tiempo)
{rotacion_cambiada[0]=0;rotacion_cambiada[1]=1;rotacion_cam
biada[2]=0;
rotacion_cambiada[3]=rotacion_cambiada[3]-
giro*tiempo/relojYNR.cycleInterval;}
function RotarEnYP(tiempo)
{rotacion_cambiada[0]=0;rotacion_cambiada[1]=1;rotacion_cam
biada[2]=0;
rotacion_cambiada[3]=rotacion_cambiada[3]+giro*tiempo/relojY
PR.cycleInterval;}
"
eventIn SFTime CambiarVelocidad
eventIn SFFloat TrasladarEnYN
eventIn SFFloat TrasladarEnYP
eventIn SFFloat TrasladarEnZN
eventIn SFFloat TrasladarEnZP
eventIn SFFloat RotarEnYN
eventIn SFFloat RotarEnYP