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.
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 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 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 [ ].
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).
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 [ ].
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 [ ].
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 [ ].
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 [ ].
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 [ ].
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 [ ].
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 [ ].