NODOS:

INTRODUCCIÓN A LOS NODOS:

En un alto nivel de abstracción, VRML es un formato de archivo simple para la descripción de objetos. Teóricamente, los objetos pueden contener cualquier cosa (figuras geométricas en 3 dimensiones, datos MIDI, imágenes JPEG, etc. VRML define un conjunto de objetos útiles para gráficas 3d y la construcción de objetos y/o mundos interactivos. Estos objetos son llamados nodos, y contienen datos los cuales son guardados en campos.

CARACTERÍSTICAS GENERALES DE LOS NODOS:

Un nodo tiene las siguientes características:

exposedField foo

es equivalente a la declaración:

eventIn set_foo

field foo

eventOut foo_changed

La sintaxis para la representación de este tipo de información es:

Tipo de nodo {campos}

Sólo se requiere el tipo de nodo y los paréntesis, los nodos pueden no tener especificados los valores de los campos. Cuando un valor de campo no es especificado se toman los valores por defecto.

NODOS DE GEOMETRÍA:

Box:

Box {

field SFVec3f size 2 2 2

}

Este nodo dibuja una caja rectangular alineada con el eje coordenado.

Por defecto esta caja está ubicada en el centro del eje coordenado (0,0,0), y con cada dimensión midiendo 2 unidades, desde -1 a +1.

CAMPO size:

field SFVec3f size 2 2 2.

Este campo especifica los valores del tamaño de los lados del rectángulo en el orden (X,Y,Z).

Y

Ejemplo:

Box{

size 2.0 0.5 3.0 X

} Z

Cone:

Cone {

field SFFloat bottomRadius 1

field SFFloat height 2

field SFBool side TRUE

field SFBool bottom TRUE

}

Este nodo especifica un cono.

Por defecto el cono se encontrará en el centro del eje tridimensional (0,0,0). y tendrá un tamaño que irá de -1 a +1 en las tres dimensiones del espacio.

CAMPO bottomRadius:

field SFFloat bottomRadius 1

Este campo especifica el valor del radio basal del cono.

CAMPO height:

field SFFloat height 2

Este campo especifica el valor de la altura del cono.

CAMPO side:

field SFBool side TRUE

Este campo especifica una parte del cono (el manto), si el valor es TRUE, entonces será visible, si es FALSE, entonces no lo será.

CAMPO botton:

field SFBool bottom TRUE

Este campo especifica una parte del cono (la base), si el valor es TRUE, entonces será visible, si es FALSE, entonces no lo será.

Ejemplo:

Cone{

heigh 3.0

bottonRadious 0.75

}

Cylinder:

Cylinder {

field SFBool bottom TRUE

field SFFloat height 2

field SFFloat radius 1

field SFBool side TRUE

field SFBool top TRUE

}

Este nodo especifica un cilindro alrededor del eje X.

Por defecto el cilindro se encuentra en el centro del eje tridimensional, y un tamaño que va desde -1 a +1.

El cilindro tiene tres partes: manto, tope (Y=+1) y base (Y=-1).

CAMPO botton:

field SFBool bottom TRUE

Este campo especifica una parte del cilindro (la base), si el valor es TRUE, entonces será visible, si es FALSE, entonces no lo será.

CAMPO heigh:

field SFFloat height 2

Este campo especifica el valor de la altura del cilindro.

CAMPO radius:

field SFFloat radius 1

Este campo especifica el valor del radio del cono.

CAMPO side:

field SFBool side TRUE

Este campo especifica una parte del cilindro (el manto), si el valor es TRUE, entonces será visible, si es FALSE, entonces no lo será.

CAMPO top:

field SFBool top TRUE

Este campo especifica una parte del cilindro (el tope), si el valor es TRUE, entonces será visible, si es FALSE, entonces no lo será.

Ejemplo:

Cylinder{height 2.0

radius 1.5

}

SPHERE:

Sphere {

field SFFloat radius 1

}

Este nodo especifica una esfera.

Por defecto la esfera es centrada en el origen, el valor del radio es 1.

CAMPO radius:

field SFFloat radius 1

Este campo especifica el valor del radio de la esfera.

Ejemplo:

Sphere{

radius 1.0

}

ElevationGrid:

ElevationGrid {

eventIn MFFloat set_height

exposedField SFNode color NULL

exposedField SFNode normal NULL

exposedField SFNode texCoord NULL

field MFFloat height []

field SFBool ccw TRUE

field SFBool colorPerVertex TRUE

field SFFloat creaseAngle 0

field SFBool normalPerVertex TRUE

field SFBool solid TRUE

field SFInt32 xDimension 0

field SFFloat xSpacing 0.0

field SFInt32 zDimension 0

field SFFloat zSpacing 0.0

}

Este nodo crea una rejilla rectangular uniforme de altura variable en el plano XZ. La geometría es descrita por medio de un arreglo de valores de altura que especifican la altura de la superficie rectangular por encima de cada punto de la rejilla.

Este nodo es ideal para crear efectos tales como cadenas montañosas, superficies marinas o superficies planetarias, por ejemplo.

Campos xDimension y zDimension:

field SFInt32 xDimension 0

field SFInt32 zDimension 0

Estos campos indican las dimensiones de la altura de la rejilla en las direcciones X y Z.

Campo height:

field MFFloat height []

Este campo es un arreglo de valores escalares X por Y, que representan la altura por encima de la rejilla para cada vértice.

Campos xSpacing y zSpacing:

field SFFloat xSpacing 0.0

field SFFloat zSpacing 0.0

Estos campos indican la distancia entre los vértices en las direcciones X y Z respectivamente.

De esta manera el vértice correspondiente al punto P[i, j], en la grilla es puesto como:

P[i,j].x = xSpacing * i

P[i,j].y = height[ i + j * zDimension]

P[i,j].z = zSpacing * j

Donde 0<i<xDimencion y 0<j<zDimencion.

Campo colorPerVertex:

field SFBool colorPerVertex TRUE

Este campo determina si los colores (si están especificados en el campo color) pueden ser aplicados a cada vértice o a cada cuadrilátero del ElevationGrid. Si colorPerVertex es FALSE y el campo color no es NULL, entonces el campo color debe contener un nodo Color conteniendo al menos (xDimension-1)*(zDimension-1) colores. Si colorPerVertex es TRUE y el campo color no es NULL, entonces el campo color debe contener un nodo Color conteniendo al menos xDimension*zDimension colores.

Campo ccw:

field SFBool ccw TRUE

Este campo indica si los vértices son ordenados en el sentido horario cuando la figura es vista desde el exterior (TRUE). Si el orden es antihorario o desconocido, el valor del campo es FALSE.

Campo solid:

field SFBool solid TRUE

Este campo indica si la figura circundada es un volumen (TRUE). Si el valor del campo es FALSE implica que la figura en relieve no puede ser presentada y que el polígono tiene dos lados.

Campo creaseAngle:

field SFFloat creaseAngle 0

Este campo afecta como las normas por defecto son generadas. El creaseAngle es el ángulo entre las superficies normales en polígonos adyacentes.

Evento set_height:

eventIn MFFloat set_height

Este evento permite que el campo height pueda ser cambiado, permitiendo ElevationGrids animados.

Ejemplo:

ElevationGrid{

xDimension 3

xSpacing 1.0

zDimension 2

zSpacing 1.0

height [0.0, -0.5, 0.0, 0.2, 4.0, 0.0]

}

Extrusion:

Extrusion {

eventIn MFVec2f set_crossSection

eventIn MFRotation set_orientation

eventIn MFVec2f set_scale

eventIn MFVec3f set_spine

field SFBool beginCap TRUE

field SFBool ccw TRUE

field SFBool convex TRUE

field SFFloat creaseAngle 0

field MFVec2f crossSection [ 1 1, 1 -1, -1 -1, -1 1, 1 1 ]

field SFBool endCap TRUE

field MFRotation orientation 0 0 1 0

field MFVec2f scale 1 1

field SFBool solid TRUE

field MFVec3f spine [ 0 0 0, 0 1 0 ]

}

Este nodo es usado para definir figuras basadas en un corte transversal en dos dimensiones estirado a lo largo de una columna tridimensional. El corte transversal puede ser escalado y rotado en cada uno de los puntos de la columna para producir una amplia variedad de figuras.

Ejemplo:

Extrusion{

crossSection [1.0 0.0 ... ]

spine[10.0 0.0 0.0 ... ]

IndexedFaceSet:

IndexedFaceSet {

eventIn MFInt32 set_colorIndex

eventIn MFInt32 set_coordIndex

eventIn MFInt32 set_normalIndex

eventIn MFInt32 set_texCoordIndex

exposedField SFNode color NULL

exposedField SFNode coord NULL

exposedField SFNode normal NULL

exposedField SFNode texCoord NULL

field SFBool ccw TRUE

field MFInt32 colorIndex []

field SFBool colorPerVertex TRUE

field SFBool convex TRUE

field MFInt32 coordIndex []

field SFFloat creaseAngle 0

field MFInt32 normalIndex []

field SFBool normalPerVertex TRUE

field SFBool solid TRUE

field MFInt32 texCoordIndex []

}

Este nodo dibuja una figura utilizando caras (polígonos) definidas por un conjunto de puntos.

Campo coord:

exposedField SFNode coord NULL

Este campo debe contener un nodo Coordinate.

Campo coordIndex:

field MFInt32 coordIndex []

Los índices de este campo sirven para especificar las caras del polígono. Un índice de -1 indica que la cara actual ha sido terminada y la próxima comienza. La última cara puede (pero no tiene que ser así) seguida por un -1. Si el número de índices en el campo ccordIndex es N, entonces el nodo Coordinate debe contener N+1 coordenadas (indexadas como 0-N).

Campo color:

exposedField SFNode color NULL

Si este campo no es NULL, entonces debe contener un nodo Color, cuyos colores son aplicados a los vértices o caras de IndexedFaceSet como sigue:

Campo normal:

exposedField SFNode normal NULL

Si este campo es NULL, entonces el browser puede automáticamente generar nodos Normal, usando creaseAngle para determinar si y como sus vectores serán alisados a través de los vértices formados.

Si este campo no es NULL, entonces debe contener un nodo Normal, cuyos vectores son aplicados a los vértices o caras del IndexedFaceSet en una manera exactamente equivalente a como se describe abajo para la aplicación de colores a vértices/caras.

Campo texCoord:

exposedField SFNode texCoord NULL

Si el campo texCoord no es NULL, entonces debe contener un nodo TextureCoordinate, las coordenadas de textura en este nodo son aplicadas a los vértices del IndexedFaceSet como sigue:

Si el campo texCoord es NULL, un mapeamiento de una coordenada de textura es calculado usando una caja atada a la figura.

Campo convex:

field SFBool convex TRUE

Este campo indica si todas las caras en la figura son convexas (TRUE). Si nada se conoce acerca de las caras, este campo es FALSE.

Ejemplo:

IndexedFaceSet{

coord Coordinate {...}

coordIndex[...]

color Color{

Color[1.0 0.0 0.0 ... ]

}

colorIndex [3,0,1,... ]

colorPerVertex TRUE

}

IndexedLineSet:

IndexedLineSet {

eventIn MFInt32 set_colorIndex

eventIn MFInt32 set_coordIndex

exposedField SFNode color NULL

exposedField SFNode coord NULL

field MFInt32 colorIndex []

field SFBool colorPerVertex TRUE

field MFInt32 coordIndex []

}

Este nodo dibuja una figura utilizando líneas definidas por un conjunto de puntos.

Campo Coord:

exposedField SFNode coord NULL

Este campo lista los vértices para la construcción de líneas.

Campo coordIndex:

field MFInt32 coordIndex []

Este campo posee índices que especifican las líneas. Un índice -1 indica que la línea actual ha finalizado y comienza la siguiente. La última línea puede (pero no tiene que ser así) ser seguida por un -1.

Campo color:

exposedField SFNode color NULL

Si este campo no es NULL, debe contener un nodo color, y los colores son aplicados a la línea o líneas como sigue:

Si el campo colorIndex es vacío, entonces el campo coordIndex es usado para elegir colores desde el nodo Color. Si el índice en el campo coordIndex es N, entonces deben haber N+1 colores en el nodo Color.

Ejemplo:

IndexedLineSet{

coord Coordinate{

point [...]

}

coordIndex [1,0,3,-1, ... ]

}

PointSet:

PointSet {

exposedField SFNode color NULL

exposedField SFNode coord NULL

}

Este nodo especifica una figura usando un conjunto de puntos. Estos puntos están contenidos en el campo coord.

CAMPO coord:

Este campo debe ser un nodo Coordinate (o una instancia del nodo Coordinate).

CAMPO color:

Si este campo no es NULL, deberá contener un nodo Color que contenga al menos el número de puntos contenido en el nodo coord. Estos campos (color) son siempre aplicados a cada punto en orden.

Text:

Text {

exposedField MFString string []

exposedField SFNode fontStyle NULL

exposedField MFFloat length []

exposedField SFFloat maxExtent 0.0

}

Este nodo representa una o más cadenas de texto.

CAMPO string:

Este campo contiene las cadenas de texto.

CAMPO fontStyle:

Este campo contiene un nodo FontStyle que especifica el tamaño del tipo de letra, su familia y estilo, dirección de la cadena de texto y alguna especificación de las técnicas de renderización que deben ser usadas para el texto.

CAMPO length:

Este campo contiene un valor MFFloat que especifica el largo de cada cadena de texto en el espacio coordenado local. Si la cadena es demasiado corta, esta es estirada, si es demasiado larga es comprimida.

CAMPO maxExtent:

Este campo limita y escala la cadena de texto, si el largo natural de la cadena es larga, en comparación a la extención máxima. Si la cadena de texto es corta en comparación a la extención máxima, no es cambiada.

La extensión máxima es medida horizontalmente para los textos horizontales (FontStyle: horizontal=TRUE) y verticalmente para los textos verticales (FontStyle: horizontal=FALSE).

Ejemplo:

Text{

string ["HOY OFERTA", "LLEVE 2 y PAGUE 3"]

}

NODOS DE AGRUPACIÓN:

Anchor:

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

}

Este nodo crea un grupo de nodos hijos, los cuales son mostrados en su totalidad, seleccionando algún nodo hijo podemos saltar a un mundo VRML especificado por una determinada URL. En ese caso el mundo es cargado y mostrado en lugar de éste del cual el nodo Anchor es parte. La selección de los nodos hijos es hecha (con el browser VRML corriendo) haciendo click en uno de ellos y de esta manera el resultado será una nueva escena que reemplazará a la anterior.

Campo description:

exposedField SFString description ""

Este campo permite escribir una descripción acerca de la alternativa que se está eligiendo en ese momento al por ejemplo pulsar aquel nodo.

Ejemplo:

Anchor {url "ejemplo.wrl"

description "un ejemplo"

children [...]

}

Billboard:

Billboard {

eventIn MFNode addChildren

eventIn MFNode removeChildren

exposedField SFVec3f axisOfRotation 0 1 0

exposedField MFNode children []

field SFVec3f bboxCenter 0 0 0

field SFVec3f bboxSize -1 -1 -1

}

Este nodo crea un grupo con un sistema de coordenadas especiales. Aquí todos los nodos hijos son mostrados. El sistema de coordenadas es girado de tal forma que siempre las caras están a la vista.

Campo axisOfRotation:

exposedField SFVec3f axisOfRotation 0 1 0

Este campo especifica cual eje va a ser usado para procesar la rotación. Este eje es definido. Este eje es definido en las coordenadas locales del nodo billboard. El valor por defecto (0,1,0) es usado para objetos tales como arboles y postes, que están posicionados sobre un plano recto. Pero si un objeto está orientado en torno a un ángulo, por ejemplo una montaña inclinada, entonces este eje puede también necesitar ser orientado en un ángulo similar. Un caso especial de esto es cuando tenemos que los objetos rotan y siempre están alineados con la cámara (el observador) cuando ésta se eleva, inclina o rota. Este caso especial se denota con el valor en el campo axisOfRotation (0,0,0).

Ejemplo:

Group{

children[

Billboard{

axisOfRotation 0.0 1.0 0.0

children[...]

}

Transform {...}

]

}

Collision:

Collision {

eventIn MFNode addChildren

eventIn MFNode removeChildren

exposedField MFNode children []

exposedField SFBool collide TRUE

field SFVec3f bboxCenter 0 0 0

field SFVec3f bboxSize -1 -1 -1

field SFNode proxy NULL

eventOut SFTime collideTime

}

Por defecto todos los objetos de una escena son colisionables, por lo tanto la detección de colisiones está siempre presente. El nodo Collision se comporta exactamente igual al nodo Group, con el agregado que permite especificar objetos alternativos a usar para la detección de colisiones.

La colisión en este caso es entendida como aquel caso en que en una escena un objeto puede tapar a otro.

Campo collide:

exposedField SFBool collide TRUE

Este campo activa la detección de colisiones (prende y apaga). Si su valor es FALSE, entonces los hijos y sus descendientes no detectarán las colisiones, para que si sean detectadas el valor debe estar en TRUE.

Campo proxy:

field SFNode proxy NULL

Este campo define una colisión proxy, que es un grupo o un nodo hoja que es usado como un sustituto delos nodos hijos de la colisión durante la detección de éstas. Proxy es usado sólo para la detección de colisiones, si existen nodos que no son de geometría son ignorados.

Evento collideTime:

eventOut SFTime collideTime

Genera un evento especificando el tiempo cuando el usuario intersecta los nodos colisionables o proxy del nodo Collision.

Los browsers serán los encargados de definir que ocurre cuando el usuario navega en un objeto colisionable. Por ejemplo cuando el usuario está lo demasiado cerca de un objeto como para activar una colisión, el browser puede hacer que el usuario rebote, o se deslice a lo largo de la superficie.

Group:

Group {

eventIn MFNode addChildren

eventIn MFNode removeChildren

exposedField MFNode children []

field SFVec3f bboxCenter 0 0 0

field SFVec3f bboxSize -1 -1 -1

}

Este nodo crea un grupo conformado por un número cualquiera de nodos hijos. Este nodo es equivalente al Transform, sin los campos de transformación.

Transform:

Transform {

eventIn MFNode addChildren

eventIn MFNode removeChildren

exposedField SFVec3f center 0 0 0

exposedField MFNode children []

exposedField SFRotation rotation 0 0 1 0

exposedField SFVec3f scale 1 1 1

exposedField SFRotation scaleOrientation 0 0 1 0

exposedField SFVec3f translation 0 0 0

field SFVec3f bboxCenter 0 0 0

field SFVec3f bboxSize -1 -1 -1

}

Este nodo crea un grupo, como el nodo Group, pero además define un sistema de coordenadas para los nodos hijos que es relativo al sistema de coordenadas de los padres.

Campo translation:

exposedField SFVec3f translation 0 0 0

Este campo permite una traslación de una figura geométrica tridimensional consistente de una escala no uniforme en torno a un punto arbitrario.

Campo rotation:

exposedField SFRotation rotation 0 0 1 0

Este campo especifica una rotación del sistema de coordenadas, en torno a un punto y un eje.

Campo scale:

exposedField SFVec3f scale 1 1 1

Este campo especifica una escala no uniforme para el sistema coordenado.

Campo center:

exposedField SFVec3f center 0 0 0

Este campo especifica una traslación desde el origen del sistema de coordenadas local (0,0,0).

Campo scaleOrientation:

exposedField SFRotation scaleOrientation 0 0 1 0

Este campo especifica una rotación del sistema de coordenadas antes de escalarlo (al especificar escalas en orientaciones arbitrarias). Este campo se aplica sólo en la operación de especificar una escala.

Ejemplo:

Transform{

translation 4.0 0.0 0.0

rotation 0.0 1.0 0.0 0.785

scale 0.5 0.5 0.5

children [...]

}

NODOS ESPECIALES DE AGRUPACIÓN:

Inline:

Inline {

exposedField MFString url []

field SFVec3f bboxCenter 0 0 0

field SFVec3f bboxSize -1 -1 -1

}

Este nodo es similar a Group, pero crea un grupo especial. Los nodos hijos son leídos desde otro archivo VRML, seleccionado por medio de una URL. Todos los nodos hijo en el grupo son mostrados.

Ejemplo:

Inline{

url "mesa.wrl"

}

LOD:

LOD {

exposedField MFNode level []

field SFVec3f center 0 0 0

field MFFloat range []

}

Este nodo es usado para permitir que los browsers puedan pasar entre varias representaciones de objetos automáticamente. Con este nodo podemos por ejemplo reducir el tiempo de carga de un archivo, al cargar primero los modelos simples; y además podemos mejorar la calidad de la estructura general del archivo, al usar modelos simples para objetos muy alejados.

Campo level:

exposedField MFNode level []

Este campo contiene nodos que representan el mismo objeto u objetos en varios niveles de detalle, desde el alto al bajo nivel de detalle.

Switch:

Switch {

exposedField MFNode choice []

exposedField SFInt32 whichChoice -1

}

Este nodo define a un grupo de nodos y sólo dibuja a un miembro de ese grupo, que ha sido previamente seleccionado.

Campo whichChoise:

exposedField SFInt32 whichChoice -1

Este campo especifica el índice del nodo hijo a atravesar, donde el primer nodo hijo tiene índice 0. Si este valor es menor que cero o mayor que el número de nodos en el campo choise, entonces ninguno es elegido.

Ejemplo:

LOD{

range [...]

center 0 0 0

level[...]

}

NODOS DE LAZO (COMPLEMENTO):

Background:

Background {

eventIn SFBool set_bind

exposedField MFFloat groundAngle []

exposedfield MFColor groundColor []

exposedField MFString backUrl []

exposedField MFString bottomUrl []

exposedField MFString frontUrl []

exposedField MFString leftUrl []

exposedField MFString rightUrl []

exposedField MFString topUrl []

exposedField MFFloat skyAngle []

exposedField MFColor skyColor [ 0 0 0 ]

eventOut SFBool isBound

}

Este nodo es usado para especificar un color que simule cielo y tierra o un panorama que es empleado detrás de toda la geometría en la escena y en frente de el cielo y la tierra.

Campo skyColor:

exposedField MFColor skyColor [ 0 0 0 ]

Este campo especifica el color del cielo en los diversos ángulos de la esfera del círculo. El primer valor de este campo especifica el color del cielo en 0.0 grados sexagesimales (desde el punto de vista del observador).

Campo skyAngle:

exposedField MFFloat skyAngle []

Este campo especifica los ángulos desde el polo norte, en los cuales círculos concéntricos de color aparecen.

El polo norte de la esfera es implícitamente definido en los 0.0 grados, el horizonte como pi/2 radianes y el polo sur como pi radianes. skyAngle va en el rango de 0.0 a pi radianes.

Campo groundColor:

exposedfield MFColor groundColor []

Este campo especifica el color del piso en los diversos ángulos de la esfera del piso. El primer valor de este campo especifica el color del piso en 0.0 grados sexagesimales, el polo sur.

Campo groundAngle:

exposedField MFFloat groundAngle []

Este campo especifica los ángulos del polo sur, donde los círculos concéntricos de color aparecen. El polo sur de la esfera es implícitamente definido como 0.0 grados y con restricción desde 0.0 a pi. El primer valor de color es para el polo sur, el cual no es especificado en el campo groundAngle. Si el último valor de groundAngle es menor que pi , entonces la región entre el último groundAngle y el polo norte es invisible.

Campos backUrl, bottonUrl, frontUrl, leftUrl, rigthUrl, topUrl:

exposedField MFString backUrl []

exposedField MFString bottomUrl []

exposedField MFString frontUrl []

exposedField MFString leftUrl []

exposedField MFString rightUrl []

exposedField MFString topUrl []

Estos campos especifican un grupo de imágenes que definen un panorama de fondo, en el escenario creado. El panorama consiste de 6 imágenes.

Frecuentemente las imágenes bottonUrl y topUrl no son especificadas, las cuales permiten definir un piso y un cielo a mostrar. Las otras cuatro nos pueden servir para especificar montañas u otros escenarios distantes. Por defecto no existen imágenes de panorama. Los Browsers requieren soportar los formatos de archivo JPEG, PNG y GIF, los cuales serán referenciados por url.

El primer nodo Background encontrado durante la lectura del archivo wrl es usado como el fondo original cuando el archivo está cargado (evento set_bind TRUE).

Ejemplo:

Background{

groundColor [0.14 0.28 0, 0.09 0.11 0]

groundAngle[0.785]

skyColor[0.02 0 0.26, 0.2 0 0.65]

skyAngle[0.785]

#Especificación de un ambiente

Fog:

Fog {

exposedField SFColor color 1 1 1

exposedField SFString fogType "LINEAR"

exposedField SFFloat visibilityRange 1000

eventIn SFBool set_bind

eventOut SFBool isBound

}

Este nodo es un efecto especial que permite la simulación de atmósferas con el color especificado por el campo color, este efecto (de un cierto desteñido) irá dado por las distancias de los objetos, con respecto al observador.

Campo visibilityRange:

exposedField SFFloat visibilityRange 1000

Este campo especifica la distancia (en el espacio coordenado del nodo Fog), en la cual los objetos son totalmente oscurecidos por la penumbra. Un valor de visibilityRange de 0.0 o menos desabilita el nodo Fog.

Campo fogType:

exposedField SFString fogType "LINEAR"

Este campo controla cuanto del color de la niebla es combinado con el objeto como una función de distancia. Si el valor es "LINEAR" (el valor por defecto), entonces la combinación es una función lineal de la distancia, resultando un efecto de profundidad. Si el valor es "EXPONENTIAL", entonces se toma una función exponencial como incremento, resultando una apariencia de niebla más natural.

Para mejores resultados visuales, el nodo Background (el cual no es afectado por el nodo Fog), puede tener el mismo color del nodo Fog.

NavigationInfo:

NavigationInfo {

eventIn SFBool set_bind

exposedField MFFloat avatarSize [ 0.25, 1.6, 0.75 ]

exposedField SFBool headlight TRUE

exposedField SFFloat speed 1.0

exposedField MFString type "WALK"

exposedField SFFloat visibilityLimit 0.0

eventOut SFBool isBound

}

Este nodo da indicaciones al browser (sugerencias) VRML acerca del mejor camino para navegar en el mundo y el mejor tamaño y velocidad para el observador. El tamaño del observador es importante para la detección de colisiones.

campo Type:

exposedField MFString type "WALK"

Este campo especifica el tipo de navegación a usar en el mundo. Los tipos que todos los visualizadores VRML pueden soportar son: "WALK", "EXAMINE", "FLY", y "NONE".

En WALK el explorador estará sintiéndose como que está caminando en el interior del mundo virtual. EXAMINE es usado generalmente para ver objetos individuales. FLY da la idea de estar volando en el interior del mundo virtual, no están los pies en tierra.

Campo avatarSize:

exposedField MFFloat avatarSize [ 0.25, 1.6, 0.75 ]

Este campo especifica parámetros a usar para determinar las dimensiones del visualizador, con el propósito del manejo de detección de colisiones.

El primer valor permite establecer la distancia permitida entre la posición del usuario y alguna colisión geométrica (especificada por colisión), antes de que la colisión sea detectada. El segundo valor establece la altura por encima del terreno, en que la cámara puede ser mantenida. El tercer valor establece la altura de objetos sobre los cuales la cámara puede pasar.

Campo visibilityLimit:

exposedField SFFloat visibilityLimit 0.0

Este campo setea la distancia más lejana en la cual el visualizador puede ver. El valor 0.0 (el por defecto), indica un limite de visibilidad infinito.

Campo headlight:

exposedField SFBool headlight TRUE

Este campo especifica si un browser puede encender un headlight. Un headligth es una luz direccionada en la que siempre los puntos que caen en la dirección del usuario son vistos. El valor TRUE permite al browser tener un headligth, posiblemente usando su propia interface de control para encendido y apagado. El headligth puede tener intensidad 1, color 1 1 1, y dirección 0 0 -1.

Ejemplo:

NavigationInfo{

avatarSize [0.25, 1.6, 0.75]

headlight TRUE

speed 1.0

type "WALK"

}

Viewpoint:

Viewpoint {

eventIn SFBool set_bind

exposedField SFFloat fieldOfView 0.785398

exposedField SFBool jump TRUE

exposedField SFRotation orientation 0 0 1 0

exposedField SFVec3f position 0 0 0

field SFString description ""

eventOut SFTime bindTime_changed

eventOut SFBool isBound

}

Este nodo define una ubicación especifica en un sistema de coordenadas local desde el cual el usuario puede ver la escena. Los browsers VRML pueden presentar una lista de Viewpoints, usando sus strings de descripción.

Campos position y orientation:

exposedField SFVec3f position 0 0 0

exposedField SFRotation orientation 0 0 1 0

Estos campos especifican ubicaciones relativas en el sistema de coordenadas; position es relativa al origen del sistema de coordenadas (0,0,0), mientras que orientation especifica una orientación relativa a la orientación por defecto.

Campo jump:

exposedField SFBool jump TRUE

Este campo especifica si el browser usa vistas "saltadas" (o animadas) en la posición y orientación del Viewpoint

Campo fieldOfView:

exposedField SFFloat fieldOfView 0.785398

Este campo especifica un campo preferido de vista desde el punto de vista en el que el nodo Viewpoint está actuando, este valor es dado en radianes. El rango de este valor es mayor que cero y menor que pi; el valor por defecto corresponde a 45 grados sexagesimales.

Campo description:

field SFString description ""

Este campo identifica Viewpoints que son recomendados para ser públicamente accesables a través de la interfaz de usuario del browser (ej. Viewpoints menú). El string de este campo puede ser mostrado, si esta función es implementada. Esto es recomendado con el objeto que el browser se mueva hacia aquel Viewpoint, cuando la descripción es seleccionada.

El primer Viewpoint encontrado en el archivo es automáticamente tomado (recibido un evento set_bind TRUE) y es usado como la posición inicial del usuario cuando ha penetrado al mundo virtual.

La expresión URL ".../scene.wrl#ViewpointName" especifica que el usuario inicialmente cuando entre a "scene.wrl", el primer Viewpoint que verá será aquel definido como "DEF ViewpointName Viewpoint { ... }".

Ejemplo:

Viewpoint{

position 0 0 10

orientation 0 0 10

description "Valores por defecto"

}

NODOS DE APARIENCIA:

Appearance:

Appearance {

exposedField SFNode material NULL

exposedField SFNode texture NULL

exposedField SFNode textureTransform NULL

}

Este nodo especifica las propiedades visibles de geometría por medio de la definición de los nodos material y texture. El valor para algunos de los campos en estos nodos puede ser NULL. Sin embargo si el valor del campo no es NULL, éste debe contener un tipo específico de nodo.

Campo material:

exposedField SFNode material NULL

Este campo si es especificado, debe contener un nodo Material. Si el campo es NULL o no especificado, la iluminación se apaga. (todas las luces son ignoradas durante la renderización del objeto que referencia Appearance).

Campo texture:

exposedField SFNode texture NULL

Este campo, si es especificado, debe contener uno de los varios tipos de nodos de textura (ImageTexture, MovieTexture, PixelTexture). Si este nodo es NULL o no especificado, el objeto que referencia Appearance no es texturizado.

Campo textureTransform:

exposedField SFNode textureTransform NULL

Este campo si es especificado, debe contener un nodo TextureTransform. Si este campo es NULL o no especificado, o si el campo texture es NULL o no especificado, entonces textureTransform no tiene efecto

Ejemplo:

Shape {appearance Appearance {

material ...

}

geometry ...

}

FontStyle:

FontStyle {

field SFString family "SERIF"

field SFBool horizontal TRUE

field SFString justify "BEGIN"

field SFString language ""

field SFBool leftToRight TRUE

field SFFloat size 1.0

field SFFloat spacing 1.0

field SFString style ""

field SFBool topToBottom TRUE

}

Este nodo define el tamaño, tipo, familia y estilo de un tipo de texto, también la dirección de la cadena de texto, y algunas técnicas de renderización que deben ser usadas para los textos que no están escritos en inglés.

Este nodo sólo puede aparecer en el campo fontStyle de un nodo Text.

Campo size:

field SFFloat size 1.0

Este campo especifica el tamaño de los caracteres.

Campo family:

field SFString family "SERIF"

Este campo contiene las fuentes para las letras, así por ejemplo "SERIF" (el valor por defecto), es para las Times Roman; "SANS" es para las Helvética; "TYPEWRITER" es para las Courier.

Campo style:

field SFString style ""

Este campo contiene los estilos que pueden ser: un string vacío (el valor por defecto); "BOLD" para negritas; "ITALIC" para tipo itálico; o "BOLD ITALIC" para tipo itálico y negrita.

Campos horizontal, leftToRight y topToBotton:

field SFBool horizontal TRUE

field SFBool leftToRight TRUE

field SFBool topToBottom TRUE

Estos campos indican la dirección del texto:

Campo justify:

field SFString justify "BEGIN"

Este campo determina el tipo de justificación para el texto. Los valores pueden ser "BEGIN", "MIDDLE" Y "END". "BEGIN" es para la justificación a la izquierda;"END" es para la justificación a la derecha; "MIDLE" es para la justificación centrada.

Campo spacing:

field SFFloat spacing 1.0

Este campo determina el espaciamiento entre las palabras.

Ejemplo:

FontStyle{

family "SERIF"

style "BOLD"

size 1.0

spazing 1.0

}

ImageTexture:

ImageTexture {

exposedField MFString url []

field SFBool repeatS TRUE

field SFBool repeatT TRUE

}

Este nodo define un mapeamiento de textura y parámetros para éste mapeamiento.

La textura es leida desde una URL especificada por el campo url.

Este nodo soporta los formatos GIF, JPEG y PNG.

Campo url:

exposedField MFString url []

Este campo especificará la textura a leer.

Campos repeatS y repeatT:

field SFBool repeatS TRUE

field SFBool repeatT TRUE

Estos campos especifican como las texturas van a ser envueltas en las direcciones S (horizontal) y T (vertical). Si repeatS es TRUE (el defecto), el mapeamiento de la textura es repetido fuera del rango de éstas (0 a 1) en la dirección S bajo la cual la figura va a ser rellenada. Si repeatS es FALSE, las coordenadas de textura son arrinconadas en la dirección S. El campo repeatT es análogo.

Ejemplo:

Appearance{

material Material{}

texture ImageTexture{url "mimono.jpg"}

}

Material:

Material {

exposedField SFFloat ambientIntensity 0.2

exposedField SFColor diffuseColor 0.8 0.8 0.8

exposedField SFColor emissiveColor 0 0 0

exposedField SFFloat shininess 0.2

exposedField SFColor specularColor 0 0 0

exposedField SFFloat transparency 0

}

Este nodo define las propiedades del material para los nodos de geometría asociados.

Los campos en el nodo material determinan el modo de reflejo de la luz lejos de un objeto causante de un color.

Campo diffuseColor:

exposedField SFColor diffuseColor 0.8 0.8 0.8

Este campo todas las fuentes de color VRML, dependiendo del ángulo de la superficie respecto a la fuente de luz. Mientras más se acerquen las caras de la superficie, mayor difusión de luz se reflejará.

Campo ambientIntensity:

exposedField SFFloat ambientIntensity 0.2

Este campo especifica cuanta luz del ambiente, desde las fuentes de luz de la superficie pueden ser reflejadas. La iluminación del ambiente es omnidireccional y depende sólo del número de fuentes de luz, no de sus posiciones respecto a la superficie. El color del ambiente es calculado como ambientIntensity*diffuseColor.

Campo specularColor y shininess:

exposedField SFFloat shininess 0.2

exposedField SFColor specularColor 0 0 0

Estos campos determinan la iluminación especular. Bajos valores de shininess producen incandescencias suaves, mientras que valores medianos resultan en iluminaciones agudas.

campo emissiveColor:

exposedField SFColor emissiveColor 0 0 0

Este campo permite modelar objetos incandescentes.

Campo transparency:

exposedField SFFloat transparency 0

Este campo actúa como borrando el objeto. Con el valor 1.0 el objeto es completamente transparente con 0.0 es completamente opaco.

MovieTexture:

MovieTexture {

exposedField SFBool loop FALSE

exposedField SFFloat speed 1

exposedField SFTime startTime 0

exposedField SFTime stopTime 0

exposedField MFString url []

field SFBool repeatS TRUE

field SFBool repeatT TRUE

eventOut SFFloat duration_changed

eventOut SFBool isActive

}

Este nodo define un mapeamiento de textura animado (contenido en un archivo de animación) y parámetros para el control de la animación y el mapeamiento de la textura.

Campo url:

exposedField MFString url []

Este campo permite referenciar el archivo de animación a usar, se pueden usar formatos de archivo MPEG1-Systems (audio y video) o MPEG1-Video (sólo video).

Evento duration-Changed:

eventOut SFFloat duration_changed

Este evento indica la duración del video en segundos. El valor de este evento puede ser leido (via un Script) para determinar la duración de un video. Un valor -1 indica que el video no ha sido cargado, o que no está disponible por alguna razón.

Campo startTime:

exposedField SFTime startTime 0

Este campo indica el momento en el que los MovieTextures pueden partir. En ese tiempo el video es considerado como iniciado, el evento isActive es activado, y el frame muestra el video.

Campo stopTime:

exposedField SFTime stopTime 0

Este campo indica cuando el video se detendrá, en ese momento el evento isActive FALSE es activado. stopTime es ignorado si loop es FALSE.

Campo speed:

exposedField SFFloat speed 1

Este campo indica cuan rápido el video será desplegado. Un valor de 2, indicará que el video está siendo desplegado el doble de su velocidad normal.

Campo loop:

exposedField SFBool loop FALSE

Este campo indica si el video será o no repetido una vez que stopTime sea activado.

Ejemplo:

Appearance{

texture MovieTexture{

url "mimono.jpg"

speed 1

loop FALSE

}

}

PixelTexture:

PixelTexture {

exposedField SFImage image 0 0 0

field SFBool repeatS TRUE

field SFBool repeatT TRUE

}

Este nodo define una imagen bidimensional, basados en una textura mapeada como un arreglo de valores de pixel y parámetros.

Campos repeatS y repeatT:

field SFBool repeatS TRUE

field SFBool repeatT TRUE

Estos campos especifican como las texturas van a ser envueltas en las direcciones S y T. Si repeatS es TRUE (el defecto), el mapeamiento de la textura es repetido fuera del rango de éstas (0 a 1) en la dirección S bajo la cual la figura va a ser rellenada. Si repeatS es FALSE, las coordenadas de textura son arrinconadas en la dirección S. El campo repeatT es análogo.

Ejemplo:

PixelTexture{

image 2 4 3 0xFF0000 0x000FF00

0 0 0 0xFFFFFF 0xFFFF00

}

TextureTransform:

TextureTransform {

exposedField SFVec2f center 0 0

exposedField SFFloat rotation 0

exposedField SFVec2f scale 1 1

exposedField SFVec2f translation 0 0

}

Este nodo define una transformación bidimensional que es aplicada a las coordenadas de la textura. Este nodo sólo se aplica en el campo textureTransform del nodo Appearance y afecta al modo en que las texturas son aplicadas a las superficies del nodo Geometry asociado. La transformación consiste de una escala no uniforme cerca de un punto central arbitrario, una rotación cerca del mismo punto y una traslación. Esto permite usar los cambios de tamaño y posición de las texturas en las figuras.

Ejemplo:

TextureTransform{

rotation 0.39 #22 grados sexagesimales

scale 1.0 1.4

}

NODOS COMUNES:

AudioClip:

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

}

Este nodo representa un sonido que es cargado por el browser, puede empezar en cualquier momento y tiene una duración conocida. Puede ser usado como la fuente de audio para algún nodo Sound (como pensar que es el tocacintas y el nodo Sound el parlante).

Campo url:

exposedField MFString url []

Este campo permite referenciar el archivo de audio a usar, se pueden usar formatos de archivo wav en el formato descomprimido PCM. También se puede usar el formato MIDI.

Campo description:

exposedField SFString description ""

Este campo contiene una descripción del sonido empleado, ésta puede ser mostrada en el momento en que éste es activado.

Campo loop:

exposedField SFBool loop FALSE

Este campo especifica si el sonido es constantemente repetido o no, por defecto su valor es FALSE, lo que indica que no es repetido (sólo se toca una vez).

Campo startTime:

exposedField SFTime startTime 0

Este campo especifica el momento en el que el sonido comienza a ser emitido.

Campo stopTime:

exposedField SFTime stopTime 0

Este campo especifica el momento en que el sonido es apagado, luego de un cierto tiempo de estar encendido.

Campo pitch:

exposedField SFFloat pitch 1.0

Este campo especifica un múltiplo para la proporción en la cual el sonido es emitido, va en el rango de 0 a más infinito. El cambio de este campo afecta el tono del sonido. Si pitch toma el valor 2.0 el sonido puede sonar una octava más alto que lo normal.

Evento isActive:

eventOut SFBool isActive

Este campo puede ser usado por otros nodos para determinar si el clip es actualmente ocupado por un nodo Sound.

Ejemplo:

AudioClip{

url["the_wall.wav"]

loop FALSE

startTime 0

}

DirectionalLight:

DirectionalLight {

exposedField SFFloat ambientIntensity 0

exposedField SFColor color 1 1 1

exposedField SFVec3f direction 0 0 -1

exposedField SFFloat intensity 1

exposedField SFBool on TRUE

}

Este nodo ilumina apuntando a una dirección específica.

Ejemplo:

DirectionalLight{

#luz estándar

direction 1.0 0.0 0.0

}

PointLight:

PointLight {

exposedField SFFloat ambientIntensity 0

exposedField SFVec3f attenuation 1 0 0

exposedField SFColor color 1 1 1

exposedField SFFloat intensity 1

exposedField SFVec3f location 0 0 0

exposedField SFBool on TRUE

exposedField SFFloat radius 100

}

Este nodo define un punto luminoso en una ubicación tridimensional fija. Este punto ilumina igualmente en todas direcciones, por lo que se lo llama omnidireccional.

Ejemplo:

PointLight{

#estándares

location 0.0 0.0 0.0

radius 1.0

attenuation 1.0 0.0 0.0

}

Script:

Script {

exposedField MFString url []

field SFBool directOutput FALSE

field SFBool mustEvaluate FALSE

# y algún número de:

eventIn eventTypeName eventName

field fieldTypeName fieldName initialValue

eventOut eventTypeName eventName

}

Este nodo es usado para programar el comportamiento en una escena. Estos nodos típicamente reciben eventos que significan un cambio o acciones para el usuario, contienen un módulo de programa que presenta algún algoritmo, y cambios de efecto, donde algunos de éstos además van enviando eventos de salida en la escena.

Cada nodo Script tiene asociado un programa, referenciado por el campo url.

Shape:

Shape {

exposedField SFNode appearance NULL

exposedField SFNode geometry NULL

}

Este nodo construye una figura. Este nodo describe la geometría (forma o estructura) y la apariencia (color y textura).

Campo appearance:

exposedField SFNode appearance NULL

Este campo contiene un nodo Appearance el que tiene campos material, texture y textureTransforms.

Campo geometry:

exposedField SFNode geometry NULL

Este campo contiene un nodo de geometría.

Sound:

Sound {

exposedField SFVec3f direction 0 0 1

exposedField SFFloat intensity 1

exposedField SFVec3f location 0 0 0

exposedField SFFloat maxBack 10

exposedField SFFloat maxFront 10

exposedField SFFloat minBack 1

exposedField SFFloat minFront 1

exposedField SFFloat priority 0

exposedField SFNode source NULL

field SFBool spatialize TRUE

}

Este nodo especifica un lugar en donde el sonido especificado en el nodo AudioClip sonará. Por lo tanto este nodo especifica ubicación, dirección, región de atenuación, intensidad ("espacial" o no).

Campo source:

exposedField SFNode source NULL

Este campo especifica la fuente de sonido para el nodo Sound, si ésta no es especificada el nodo no entregará audio. La fuente de sonido debe apuntar ya sea a un nodo AudioClip o a un MovieTexture. Algunas veces el nodo MovieTexture debe referenciar un formato de video que soporte sonido (Como MPEG1-Systems).

Campo intensity:

exposedField SFFloat intensity 1

Este campo ajusta el volumen de cada fuente de sonido, en el rango de 0.0 a 1.0; 0.0 es silencio y 1.0 es volumen máximo.

Campo priority:

exposedField SFFloat intensity 1

Este campo da al autor algún control acerca de como los sonidos aparecerán durante la ejecución, sobre todo cuando existen diversos de éstos al haber diversos canales disponibles. Las prioridades varían entre 0.0 y 1.0, con 1.0 la más alta prioridad. Para algunas aplicaciones la prioridad 0.0 es usada como sonido normal y 1.0 como sonido para algún evento especial o sonidos que indican algo (usualmente de poca duración), que el autor desea que sean así.

Campo location:

exposedField SFVec3f location 0 0 0

Este campo determina la ubicación de la fuente de sonido

Campos minFront y minBack:

exposedField SFFloat minBack 1

exposedField SFFloat minFront 1

Estos campos determinan el alcance de regiones de intensidad plena de sonido, tanto de frente como por detrás de éste.

Campos maxFront y maxBack:

exposedField SFFloat maxBack 10

exposedField SFFloat maxFront 10

Estos campos determinan los límites de audibilidad en las regiones tanto de frente como por detrás del sonido.

Si minFront es igual a minBack y maxFront es igual a maxBack, entonces el sonido es omni-direccional, el vector dirección es ignorado.

Campo spatialize:

field SFBool spatialize TRUE

Este campo setea el tipo de sonido conocido como "espacial".

Ejemplo:

Sound{

source AudioClip {...}

intensity 1

location 0 0 0

direction 0 0 1

spacialize TRUE

}

Spotlight:

SpotLight {

exposedField SFFloat ambientIntensity 0

exposedField SFVec3f attenuation 1 0 0

exposedField SFFloat beamWidth 1.570796

exposedField SFColor color 1 1 1

exposedField SFFloat cutOffAngle 0.785398

exposedField SFVec3f direction 0 0 -1

exposedField SFFloat intensity 1

exposedField SFVec3f location 0 0 0

exposedField SFBool on TRUE

exposedField SFFloat radius 100

}

Este nodo define una fuente de iluminación que es puesta en una ubicación fija en el espacio tridimensional en un cono a lo largo de una dirección particular.

Ejemplo:

Spotlight{

location 0.0 0.0 0.0

direction 1.0 0.0 0.0

beamWidth 1.57

cutOfAngle 0.785

radius 1.0

attenuation 1.0 0.0 0.0

}

WorldInfo:

WorldInfo {

field MFString info []

field SFString title ""

}

Este nodo contiene información acerca del mundo construido. Este nodo no presenta ningún efecto en la apariencia del mundo, sólo es para propósitos de documentación.

Campo title:

field SFString title ""

Este campo registra el nombre o título del mundo, los browsers pueden presentar al usuario esta información como una instancia o a través de una ventana.

Campo info:

field MFString info []

Este campo permite guardar información adicional acerca del mundo virtual hecho, como por ejemplo el autor, derechos de autor o información de dominio público.

Ejemplo:

WorldInfo{

title "Este mundo loco"

info["Un mundo hecho por José Muñoz", "1996" ]

}

NODOS SENSORES:

CylinderSensor:

CylinderSensor {

exposedField SFFloat diskAngle 0.262

exposedField SFBool enabled TRUE

exposedField SFFloat maxAngle -1

exposedField SFFloat minAngle 0

exposedField SFRotation offset 0 1 0 0

exposedField SFBool autoOffset TRUE

eventOut SFBool isActive

eventOut SFRotation rotation_changed

eventOut SFVec3f trackPoint_changed

}

Este nodo genera eventos que interpretan un click del usuario en un cilindro virtual.

Campo enabled:

exposedField SFBool enabled TRUE

Este campo habilita y desabilita el CylinderSensor. Si es TRUE el sensor reacciona frente a los eventos del usuario de una forma adecuada, por el contrario si es falso no lo hace.

PlaneSensor:

PlaneSensor {

exposedField SFBool enabled TRUE

exposedField SFVec2f maxPosition -1 -1

exposedField SFVec2f minPosition 0 0

exposedField SFVec3f offset 0 0 0

exposedField SFBool autoOffset TRUE

eventOut SFBool isActive

eventOut SFVec3f trackPoint_changed

eventOut SFVec3f translation_changed

}

Este nodo genera eventos cuando el usuario hace una traslación por ejemplo con el mouse, en dos dimenciones.

ProximitySensor:

ProximitySensor {

exposedField SFVec3f center 0 0 0

exposedField SFVec3f size 0 0 0

exposedField SFBool enabled TRUE

eventOut SFBool isActive

eventOut SFVec3f position_changed

eventOut SFRotation orientation_changed

eventOut SFTime enterTime

eventOut SFTime exitTime

}

Este nodo genera eventos cuando el usuario entra, sale y se mueve en una región del espacio (definida por una caja).

SphereSensor:

SphereSensor {

exposedField SFBool enabled TRUE

exposedField SFRotation offset 0 1 0 0

exposedField SFBool autoOffset TRUE

eventOut SFBool isActive

eventOut SFRotation rotation_changed

eventOut SFVec3f trackPoint_changed

}

Este nodo mapea un movimiento de rotación alrededor del centro de aquel espacio local.

TimeSensor:

TimeSensor {

exposedField SFTime cycleInterval 1

exposedField SFBool enabled TRUE

exposedField SFBool loop FALSE

exposedField SFTime startTime 0

exposedField SFTime stopTime 0

eventOut SFTime cycleTime

eventOut SFFloat fraction_changed

eventOut SFBool isActive

eventOut SFTime time

}

Este nodo genera eventos que en un tiempo dado o en intervalos dados de tiempo.

Este nodo es usado para conducir simulaciones contínuas y animaciones, o también actividades periódicas y/o eventos simples tales como la alarma de un reloj.

Para esto TimeSensor controla el tiempo de inicio, final y el largo del ciclo; además si este ciclo es periódico o no.

TouchSensor:

TouchSensor {

exposedField SFBool enabled TRUE

eventOut SFVec3f hitNormal_changed

eventOut SFVec3f hitPoint_changed

eventOut SFVec2f hitTexCoord_changed

eventOut SFBool isActive

eventOut SFBool isOver

eventOut SFTime touchTime

}

Este nodo rastrea la ubicación y el estado de los puntos creados y detecta cuando el usuario apunta a una geometría contenida por el grupo padre del TouchSensor. Este sensor puede ser activado o desactivado enviando un evento de habilitación con un valor TRUE o FALSE. Si el TouchSensor es desabilitado no rastreará las entradas del usuario o el envío de eventos de salida.

VisibilitySensor:

VisibilitySensor {

exposedField SFVec3f center 0 0 0

exposedField SFBool enabled TRUE

exposedField SFVec3f size 0 0 0

eventOut SFTime enterTime

eventOut SFTime exitTime

eventOut SFBool isActive

}

Este nodo permite visualizar una región. Es típicamente usado para detectar cuando el usuario puede ver la especificación de un objeto o región en la escena y la activación o desactivación de algunas acciones o animaciones.

NODOS DE INTERPOLACIÓN:

ColorInterpolator:

ColorInterpolator {

eventIn SFFloat set_fraction

exposedField MFFloat key []

exposedField MFColor keyValue []

eventOut SFColor value_changed

}

Este nodo interpola entre medio de un conjunto de valores clave MFColor, producidos por un SFColor (RGB) en un evento value_changed. El número de colores en el campo keyValue debe ser igual al número de keyframes en el campo key. El campo keyValue y el valor del evento value_changed son definidos en el espacio de colores RGB.

CoordinateInterpolator:

CoordinateInterpolator {

eventIn SFFloat set_fraction

exposedField MFFloat key []

exposedField MFVec3f keyValue []

eventOut MFVec3f value_changed

}

Este nodo interpola posiciones entre medio de un conjunto de valores MFVec3f. Esto puede ser apropiado para interpolar posiciones de coordenadas para morfismos geométricos.

El número de coordenadas en el campo keyValue debe ser un múltiplo entero del número de keyframes en el campo key, estos múltiplos enteros definen cuantas coordenadas pueden ser contenidas en los eventos value_changed.

NormalInterpolator:

NormalInterpolator {

eventIn SFFloat set_fraction

exposedField MFFloat key []

exposedField MFVec3f keyValue []

eventOut MFVec3f value_changed

}

Este nodo interpola entre medio de un conjunto de valores Vec3f, convenientes para transformar vectores normales. Todos los vectores de salida pueden estar normalizados por el interpolador.

El número de normales en el campo keyValue debe ser un múltiplo entero del número de keyframes en el campo key, estos múltiplos enteros definen cuantos normales pueden ser contenidas en los eventos value_changed.

OrientationInterpolator:-OrientationInterpolator:-->

OrientationInterpolator {

eventIn SFFloat set_fraction

exposedField MFFloat key []

exposedField MFRotation keyValue []

eventOut SFRotation value_changed

}

Este nodo interpola entre medio de un conjunto de valores SFRotation. Las rotaciones son absolutas en el espacio del objeto y son en consecuencia no acumulativos. El campo keyValue debe contener exactamente tantas rotaciones como keyframes en el campo key, o sino se puede generar un error y los resultados ser indefinidos.

PositionInterpolator:

PositionInterpolator {

eventIn SFFloat set_fraction

exposedField MFFloat key []

exposedField MFVec3f keyValue []

eventOut SFVec3f value_changed

}

Este nodo interpola entre medio de un conjunto de valores SFVec3f. Esto es apropiado para interpolación de traslaciones. Este nodo interpola entre medio de un grupo de valores SFVec3f. Los vectores son interpretados como posiciones absolutas en el espacio del objeto. El campo keyValue debe contener exactamente tantos valores como el campo field.

ScalarInterpolator:

ScalarInterpolator {

eventIn SFFloat set_fraction

exposedField MFFloat key []

exposedField MFFloat keyValue []

eventOut SFFloat value_changed

}

Este nodo interpola entre medio de un conjunto de valores SFFloat. Este interpolador es apropiado para muchos parámetros definidos usando un valor simple de punto flotante, tales como width, radius, intensity, etc. El campo keyValue debe contener exactamente tantos números como keyframes en el campo field.

NODOS DE PROPIEDADES GEOMÉTRICAS:

Color:

Color {

exposedField MFColor color []

}

Este nodo es usado como el valor del campo color en los nodos IndexedFaseSet, IndexedLineSet, PointSet y ElevationGrid. Este nodo tendrá una lista de valores RGB, que serán equivalentes a sus colores.

Coordinate:

Coordinate {

exposedField MFVec3f point []

}

Este nodo define el grupo de coordenadas tridimensionales a usarse en los campos coord de los nodos de geometría (tales como IndexedFaceSet, IndexedLineSet y PointSet).

Normal:

Normal {

exposedField MFVec3f vector []

}

Este nodo define un conjunto de vectores normales a ser usados en el campo vector de algún nodo de geometría (por ejemplo: IndexedFaceSet, ElevationGrid). Este nodo contiene múltiples valores para el vector.

TextureCoordinate:

TextureCoordinate {

exposedField MFVec2f point []

}

Este nodo define un conjunto de coordenadas bidimensionales a usar por los nodos de geometría (ej: IndexedFaceSet y ElevationGrid).

El rango de las coordenadas de textura va de 0 a 1 a través de la imagen texturizada. La coordenada horizontal S es especificada como la primera, seguida de la coordenada vertical T.