TIPOS DE DATOS:

Un archivo VRML contendrá nodos los cuales están conformados por campos y eventos. Los tipos de datos que se definirán a continuación son usados tanto por campos como por los eventos.

Existen 2 clases de campos y eventos: los que contienen un valor simple (donde éste puede ser un número, un vector o una imagen), y los que contienen múltiples valores. Aquellos con valor simple tienen nombres que comienzan con las letras SF, mientras que los que tienen valores múltiples tienen nombres que empiezan con las letras MF.

Los campos con múltiples valores son escritos como una serie de valores encerrados con paréntesis cuadrados y separados por espacios en blanco (o comas). Si el campo o evento tiene valores cero, entonces sólo se escriben los paréntesis cuadrados. El último valor puede opcionalmente ser seguido por un espacio en blanco (o coma). Si el campo tiene solamente un valor, los paréntesis pueden ser omitidos y sólo escribir el valor.

Los tipos de datos que se ocupan en un archivo VRML son los siguientes:

SFBool; SFColor y MF Color; SFFloat y MFFloat; SFImage; SFInt32 y MFInt32; SFNode y MFNode; SFRotation y SFRotation; SFString y MFString; SFTime; SFVec2f y MFVec2f; SFVec3f y MFVec3f.

SFBool:

Un campo o evento contiene un valor booleano simple. Los valores del campo entonces son TRUE (verdadero) o FALSE (falso).

Por ejemplo:

fooBool FALSE

Es un campo SFBool, fooBool designa un valor falso.

El valor inicial de un evento de salida (eventOut) SFBool es FALSE.

SFColor/MFColor:

SFColor especifica una tripleta de colores RGB (red-green-blue), y MFColor especifica cero o más tripletas RGB. Cada color es escrito a un archivo como una tripleta de números en punto flotante en el formato de punto flotante ANSI C, en el rango de 0.0 a 1.0.

Por ejemplo:

fooColor [ 1.0 0. 0.0, 0 1 0, 0 0 1 ]

Es un campo MFColor, fooColor, contiene los tres colores primarios rojo, verde y azul.

El valor inicial para un eventOut SFColor es (0 0 0). El valor inicial para un eventOut MFColor es [ ].

SFFloat/MFFloat:

SFFloat especifica un número simple con precisión de punto flotante, y MFFloat especifica cero o más números simples con precisión de punto flotante. SFFloat y MFFloat son escritos con el formato de punto flotante de los archivos ANSI C.

Por ejemplo:

fooFloat [ 3.1415926, 12.5e-3, .0001 ].

Es un campo MFFloat, fooFloat, conteniendo tres valores de punto flotante.

El valor inicial para un eventOut SFFloat es 0.0. El valor inicial de un eventOut MFFloat es [ ].

SFImage:

El campo o evento SFImage define una imagen pixelada bidimencional descomprimida. Los campos y eventos SFImage son escritos como tres enteros representando el ancho, la altura y el número de componentes en la imagen, seguidas por valores hexadecimales ancho*altura representando los pixeles en la imagen, separados por un espacio en blanco.

fooImage <ancho> <altura> <num componentes> <valores de pixeles>

Un primer componente de la imagen especifica un valor de un byte hexadecimal representando la intensidad de la imagen. Por ejemplo, 0xFF es intensidad plena, 0x00 es no intensivo. Un segundo componente de la imagen coloca la intensidad en el primer (alto) byte y el alpha (opaco) en el segundo (bajo) byte. Los pixeles en un tercer componente de la imagen tienen el componente rojo en el primer (alto) byte, seguidos por los componentes verdes y azules (0xFF0000 es rojo). El cuarto componente coloca el byte alpha después de rojo/verde/amarillo (0x0000FF80 es azul semi-transparente). Un valor 0x00 es completamente transparente, 0xFF es completamente opaco.

Cada pixel es leido como un simple número sin signo. Por ejemplo un tercer componente pixel con valores 0x0000FF puede también ser escrito como 0xFF o 255 (decimal). Los pixels son especificados de izquierda a derecha, abajo hacia arriba. El primer valor hexadecimal es el pixel menor de la izquierda y el último valor es el pixel mayor a la derecha.

Por ejemplo:

fooImage 1 2 1 0xFF 0x00

Es un pixel de ancho con 2 pixel de alto, un componente (por ejemplo una escala gris), con el pixel más bajo blanco y el pixel más alto negro.

Otro ejemplo:

fooImage 2 4 3 0xFF0000 0xFF00 0 0 0 0 0xFFFFFF 0xFFFF00

Es 2 pixel de ancho con 4 pixel de alto, imagen RGB, con el pixel más bajo de la izquierda rojo, el pixel más bajo de la derecha verde, las dos hileras del medio de pixeles negros, el pixel más alto a la izquierda blanco y el pixel más alto a la derecha amarillo.

El valor inicial de un eventOut SFImage es (0 0 0).

SFInt32/MFInt32:

El campo y evento SFInt32 especifican un entero de 32 bits, y el campo y evento MFInt32 especifican cero o más enteros de 32 bits. Los campos y eventos SFInt32 y MFInt32 son escritos como un entero en los formatos decimal o hexadecimal (comenzando con "0x").

Por ejemplo:

fooInt32 [ 17, -0xE20, -518820 ]

Es un campo MFInt32 conteniendo tres valores.

El valor inicial para un eventOut SFInt32 es 0. El valor inicial para un eventOut MFInt32 es [ ].

SFNode/MFNode:

El campo y evento SFNode especifican un nodo VRML, y el campo y evento MFNode especifica cero o más nodos. El siguiente ejemplo ilustra la sintaxis válida para un campo MFNode, fooNode, definiendo cuatro nodos.

fooNode [ Transform { translation 1 0 0 }

DEF CUBE Box { }

USE CUBE

USE SOME_OTHER_NODE ]

Los campos y eventos SFNode y MFNode pueden contener la palabra reservada NULL para indicar que están vacíos.

El valor inicial de un eventOut SFNode es NULL. El valor inicial de un eventOut MFNode es [ ].

SFRotation/MFRotation:

El campo y evento SFRotation especifica una rotación arbitraria, y el campo y evento MFRotation especifica cero o más rotaciones arbitrarias. Estos campos y/o eventos son escritos como cuatro valores de punto flotante separados por espacios en blanco. Los primeros tres valores especifican una rotación normalizada en el eje acerca del cual la rotación toma lugar. El cuarto valor especifica el grado de rotación (regla de la mano derecha) en torno al eje, medido en radianes.

Por ejemplo un SFRotation con un grado de rotación de 180 grados sexagesimales, en torno al eje Y es :

fooRot 0.0 1.0 0.0 3.14159265

El valor inicial de un eventOut SFRotation es (0 0 1 0). El valor inicial de un eventOut MFRotation es [ ].

SFString/MFString:

Los campos y eventos SFString y MFString contienen strings formateados con el conjunto universal de caracteres UTF-8 (ISO/IEC 10646-1:1993, http://www.iso.ch/cate/d18741.html). SFString especifica un string simple y MFString especifica cero o más strings. Los strings son escritos como una secuencia de UTF-8 octetos encerrados en dobles comillas (ej: "string").

Algunos caracteres (incluyendo retornos de carro y #) pueden aparecer sin las comillas. Para incluir dobles comillas en un string, éste debe ir precedido de un backslash. Para incluir un carácter backslash con el string se deben tipear 2 backslashes.

Por ejemplo:

fooString [ "Un, Dos, Tres", "El dice, \"Maaambo!\"" ]

Es un campo MFString, fooString, con 2 strings válidos.

El valor inicial de un eventOut SFString es "". El valor inicial de un eventOut MFRotation es [ ].

SFTime/MFTime:

El campo y evento SFTime especifica un valor simple de tiempo, y el campo y evento MFTime especifican cero o más valores de tiempo. Estos valores son escritos como un número en punto flotante de doble precisión en el formato de punto flotante ANSI C. Los valores de tiempo son especificados como el número de segundos desde un tiempo original especificado. Típicamente los campos y eventos SFTime representan el número de segundos desde Jan 1, 1970, 00:00:00 GMT.

El valor inicial de un eventOut SFTime es -1. El valor inicial de un eventOut MFTime es [ ].

SFVec2f/MFVec2f:

Un campo o evento SFVec2f especifica un vector bidimensional. Un campo o evento MFVec2f especifica cero o más vectores bidimensionales. Los SFVec2fs y MFVec2fs son escritos como un par de valores en punto flotante separados por un espacio en blanco.

Por ejemplo:

fooVec2f [ 42 666, 7, 94 ]

Es un campo MFVec2f, fooVec2f, con dos vectores válidos.

El valor inicial de un eventOut SFVec2f es (0 0). El valor inicial de un eventOut MFVec2f es [ ].

SFVec3f/MFVec3f:

Un campo o evento SFVec3f especifica un vector tridimensional. Un campo o evento MFVec3f especifica cero o más vectores bidimensionales. Los SFVec3fs y MFVec3fs son escritos como tres valores en punto flotante separados por un espacio en blanco.

Por ejemplo:

fooVec3f [ 1 42 666, 7, 94, 0 ]

Es un campo MFVec3f, fooVec3f, con dos vectores válidos.

El valor inicial de un eventOut SFVec3f es (0 0 0). El valor inicial de un eventOut MFVec3f es [ ].