CURSO VRML |
|
entrega 11
-------------------------------------------------------------------------
5.4- NODOS ("Nodes") Y JERARQUIAS ("Hierarchies")
-------------------------------------------------------------------------
Los NODOS son "comandos" utilizados para definir FORMAS y PROPIEDADES en
VRML. Estructurados jerarquicamente, en funcion de su tipo y secuencia
permiten configurar una ESCENA. En el sentido mas amplio del termino,
Puede equivalerse "nodo" a "objeto". Por supuesto que eso implica que
bajo la denominacion de objeto pueden incluirse tambien aquellos de
naturaleza no-geometrica...
Es importante destacar que, una vez especificado el encabezado, un
fichero VRML contiene exacta y unicamente UN nodo. Ese nodo, por
supuesto, puede constituir un NODO DE GRUPO que contiene en si cualquier
cantidad de otros nodos. All igual que en C++ los simbolos {} so
utilizados para delimitar las areas segun las que se estructura un
fichero. Las aplicaremos como ejemplo mas adelante, en la construccion de
las cuatro formas basicas o "primitivas" (cubo, cilindro, cono y esfera).
un NODO posee las siguientes caracteristicas :
--> NATURALEZA del Nodo (que tipo de OBJETO es: cubo, esfera, mapa de
tecturas, una transformacion, etc.).
--> PARAMETROS. Que distinguen al nodo de otros nodos del mismo tipo.
--> NOMBRE. Para identificar al Nodo. El poder asignar un nombre
adicionamente a un nodo y referirse a el mas adelante constituye
un muy poderoso recurso: permite al autor de la escena suminstrar
pistas, a otras aplicaciones que utilicen dicha escena, acerca del
contenido de la escena y tambien crea posibilidades para la
aplicacion de poderosas extensiones de programacion ("scripting").
Los nodos no exigen ser nombrados, pero si se lo hace solo podran
responder a un solo nombre. Sin embargo, ese nombre no tiene
porque ser unico, por lo cual varios nodos diferentes podran
poseer un mismo nombre.
--> NODOS "HIJOS" ( "Child Nodes") - El VRML permite establecer una
jerarquia entre objetos, permitiendo que los nodos "padres" puedan
recorrer a sus hijos orden durante la ejecucion de un proceso de
representacion ("rendering"). Aquellos nombres facultados para
tener "hijos" reciben el nombre de Nodos de "Grupo". Los nodos de
grupo pueden poseer cero o mas hijos.
El VRML utiliza nodos de FORMA, PROPIEDAD o GRUPO para erigir mundos
tridimensionales. Los nodos de Forma se refieren a la geometria del de la
escena. los nodos de propiedad afectan directamente el modo en la cual se
dibujan las formas. Los nodos de agrupacion permiten almacenar una gran
cantidad de instancias de formas. Los nodos de agrupacion no son
responsables del movimiento llevado a cabo en el mundo virtual.
El efecto acumulativo de nodos en un grafo-escena se denomina ESTADO.
Para la mayoria de los propositos, el mas importante nodo de AGRUPACION
se denomina nodo SEPARADOR, cuyo uso es:
Separator {
otros nodos incluidos
}
El nodo SEPARADOR delimita y contiene dentro de el a los aspectos corres-
ppondientes a aquellos nodos de propiedad que aloja. Dicho en otra forma,
los nodos de propiedad solamente pueden afectar a aquellos otros nodos
que se alojan dentro del nodo Separador.
El nodo SEPARADOR es un nodo de grupo ("group node"); aisla o separa los
nodos ubicados dentro del separador del resto de los objetos en escena.
La segunda linea de codigo en todo fichero de mundo VRML es siempre un
nodo separador, que tiene como mision agrupar la totalidad del "mundo").
--> SINTAXIS GENERAL
La sintaxis elegida por el VRML para representar nodos es muy franca:
DEF objectname objecttype { fields children }
(nombre) (tipo) (campos) (hijos)
Reduciendolo a su esencia tendremos que solo resultan indispensables para
su manejo el Tipo de objeto y las llaves. Es decir que los nodos pueden
o no poseer nombre, campos e hijos.
Los nombres de los nodos do deben comenzar con numero y no deben contener
espacios en blanco o caracteres de control, ni comillas, ni "/" ni { o }
ni puntos, ni signo "+".
-------------------------------------------------------------------------
5.5- CAMPOS ("Fields")
-------------------------------------------------------------------------
CAMPOS son aquellos atributos que los distintos caracteres poseen. Por
ejemplo, para definir un cubo (en realidad un paralelepipedo rectangular)
el usuario debera especificar ancho, alto y profundidad del mismo. A
estas dimensiones se las considera CAMPOS del cubo.
Existen dos tipos de campos en VRML:
--> campos que contienen un solo valor (donde ese valor puede ser un
numero, un vector o hasta una imagen.Su nombre comienza con SF.
--> campos que alojan valores multiples. Su nombre comienza con MF.
Cada tipo de campo define el formato de los valores que escribe.
Los campos de valores multiples se escriben como una serie de valores
separados por comas, todos ellos encerrados por corchetes. Si el campo
tiene cero valores entonces solo se escribira "[]". El ultimo valor puede
ser seguido, opcionalmente de una coma. Si el campo posee un solo valor,
entonces pueden omitirse los corchetes, escribiendose solo el valor.
3
[3,]
[ 3 ]
Algunos de estos campos multi-valores son:
MFColor
Es un campo multi-valor que puede contener cualquier numero de valores
de colores RGB separados por comas en grupos de tres.. Por ejemplo:
[ 1.0 0.0 0.0, 0 1 0, 0 0 1 ]
Representa los tres colores: Rojo, Verde y Azul.
MFLong
Es un campo multi-valor que contiene cualquier cantidad de enteros de
gran tamano (32-bit). El programa esta hecho pora archivar uno o mas de
este tipo de valores. enteros en formatos decimal, hexadecimal u octal.
MFVec2f
Es un campo multivariable que contiene cualquier cantidad de vectores bi-
dimensionales. MFVec2f ha sido escrito para almacenar uno o mas pares de
valores de punto flotante separados por espacio en blanco. Cuando existe
mas de un par de valores, todos los valores deberan estar encerrados en
corchetes y separados mediante comas. Por ejemplo:
[ 0 0, 1.2 3.4, 98.6 -4e1 ]
MFVec3f
Aquel campo de valor multiple que puede alojar cualquier cantidad de
vextores tri-dimensionales. El MFVec3f esta concebido para archivar uno o
mas trios de valores de punto flotante separados entre si por espacio en
blanco. Cuando mas de un trio de valores esta presente todos los valores
deben ser encerrados en corchetes y separados mediante comas.
CAMPOS EN UN NODO
Un nodo puede contener cero o mas campos. Cada tipo de nodo define el
tipo, nombre y valor por defecto de cada uno de sus campos. El valor por
defecto del campo es utilizado si no se ha especificado su valor en el
programa (guion) VRML. El orden en que son leidos los campos de un guion
no reviste importancia. Por ejemplo:
"Cube { width 2 height 4 depth 6 }"
y
"Cube {height 4 depth 6 width 2 }"
son equivalentes.
-------------------------------------------------------------------------
5.6- COMENTARIOS ("Comments")
-------------------------------------------------------------------------
Los comentarios son utilizados para hacer que la codificacion del guion
sea mas facilmente comprensible en tiempos futuros. Cualquier texto en
una linea que comience con "#" es un comentario. Puede ser colocado al
comienzo de la linea o en cualquier otro lugar de ella.
-------------------------------------------------------------------------
5.7- VRML 1.0- GRUPOS DE NODOS
-------------------------------------------------------------------------
Existe en VRML 1.0 un total de 36 tipos de Nodos. Agrupandolos para su
mas facil interpretacion tendremos:
GRUPO A- NODOS DE FORMA ("Shape Nodes").
* AsciiText
* Cone
* Cube
* Cylinder
* IndexedFaceSet
* IndexedLineSet
* PointSet
* Sphere
GRUPO B- NODOS DE APARIENCIA ("Appearance Nodes")
* Coordinate3
* FontStyle
- Info
- LOD
* Material
- MaterialBinding
- Normal
- NormalBinding
- ShapeHints
* Texture2
- Texture2Transform
- TextureCoordinate2
GRUPO C- NODOS DE TRANSFORMACION ("Transformation Nodes")
- Sirven para mover, dar escala, y rotar objetos).
- MatrixTransform
* Rotation
* Scale
* Transform
* Translation
GRUPO D- NODOS DE CAMARA ("Camera Nodes")
- OrthographicCamera
- PerspectiveCamera
GRUPO E- NODOS DE ILUMINACION ("Light Nodes")
* DirectionalLight
- PointLight
* SpotLight
GRUPO F- NODOS DE AGRUPACION ("Grouping Nodes")
- Utilizados para agrupar informacion y tal vez para re-usarla
* Group.
* Separator.
- Switch.
- TransformSeparator.
* WWW Anchor.
GRUPO G- OTROS NODOS
- WWWInline
Dado el caracter introductorio de este Curso solo cubriremos, a traves de
ejemplos y ejercicios, aquellos nodos que resultan indispensables para un
manejo basico de situaciones espaciales (y que han sido señalados, en el
listado de nodos mediante un asterisco) dejando a la discrecion y al
interes del participante la tarea de participar en aquellos nodos no
tratados aqui.
Para un maximo aprovechamiento de lo transmitido en esta unidad se
recomienda al participante disponer de un VISUALIZADOR ("browser")
que le permita experimentar a medida que se desarrolla el resto de la
Unidad. Utilicese, por ejemplo el WorldView o el Cosmo Player
-------------------------------------------------------------------------
5.8- NODOS DE FORMA. Consideraciones.
Nodos: Cube, Cylinder, Cone, Sphere, PointSet, IndexedLineSet,
IndexedFaceSet, AsciiText
-------------------------------------------------------------------------
--> COSIDERACIONES INICIALES
Los Nodos de FORMA son aquellos destinados en VRML 1.0 a la descripcion
y construccion de los aspectos geometricos de la forma.
Los nodos de Forma definen la geometria en la Escena. Conceptualmente, son
los unicos nodos que permiten dibujar algo.
Identificaremos dos subdivisiones de nodos de Forma en VRML 1.0:
- Las formas Basicas o Primitivas.
- El trazado de Lineas y Superficies.
--> ESTABLECIENDO EL SISTEMA DE COORDENADAS TRIDIMENSIONALES
VRML utiliza un sistema de coordenadas tridimensionales de "mano derecha"
Esto se traduce como un sistema cuyos ejes crecen positivamente hacia
arriba, a la derecha y hacia adelante.
La unidad estandar utilizada para longitudes y distancias es el metro y
la utilizada para angulos es el radian.
Todas las coordenadas VRML se especifican en terminos de x, y, z. Donde
el eje positivo X crece horizontal hacia la DERECHA, analogo al ANCHO,
mientras que el eje vertical positivo crece vertical hacia ARRIBA,
analogo al ALTO y el Eje Z hacia ADELANTE, hacia el observador y es
analogo a la PROFUNDIDAD..
--> DEFINIENDO EL ESPACIO TRIDIMENSIONAL
Una vez que un objeto ha sido ubicado debidamente en relacion con el
centro absoluto del sistema de coordenadas en 0,0,0 sera necesario
orientarlo segun una (o mas) de tres formas. Ellas son:
YAW ("guiñada")....Rotacion en torno al eje Y
PITCH ("paso").......Rotacion en torno al eje X
ROLL ("volteo") Rotacion en torno al eje Z
El potencial de desplazarse segun una combinacion de los tres ejes y las
tres modalidades de rotacion es lo que se ha dado en denominar "seis
grados de libertad" donde la ubicacion y orientacion de objetos en el
ambito tridimensional queda determinada por estas seis piezas de
informacion.
--> FORMAS BASICAS O PRIMITIVAS
Para facilitar la tarea de programar y construir formas, el VRML predefine
cuatro de ellas en condicion de primitivas. Ellas son: Cubo, Cilindro, Cono
y Esfera. En terminos de la sintaxis del VRML 1.0 y en su forma mas
elemental se los conoce como:
#VRML V1.0 ascii
Separator {Cube {}}
#VRML V1.0 ascii
Separator {Cylinder {}}
#VRML V1.0 ascii
Separator {Cone {}}
#VRML V1.0 ascii
Separator {Sphere {}}
Es conveniente ser lo mas ortodoxo posible en cuanto a la ubicacion del
encabezado. Este debe ubicarse en la primera linea del programa y a
partir de la primera casilla. Si no se respeta esta indicacion, el
browser podria mostrarse incapaz de reconocer el modelo y arrojaria, como
consecuencia error de encabezado.
Otro punto importante a señalar es que el VRML diferencia entre letras
mayusculas y letras minusculas ("case sensitive"), motivo por el cual es
indispensable atender a la sintaxis con la cual han sido especificados
los ejemplos en este y otros documentos relacionados con el tema.
Cada una de las tres primeras formas primitivas arriba descritas posee
PARTES cuya manipulacion y control contribuyen a enriquecer sus posibili-
dades de representacion. La esfera, por el contrario, solo depende de su
radio como recurso para cambiar su tamaño.
Adicionalmente, cada forma puede variar su tamaño
Asi tendremos:
Forma P a r t e s Tamano
CUBE........................................................w,h,d.
CYLINDER.......ALL, SIDES, BOTTOM.............................r,h.
CONE...........ALL, SIDES, BOTTOM.............................bR,h
SPHERE........................................................r
w --> width h --> height d --> depth r --> radius bR --> bottomRadius
Cuando se dibuja una Forma Basica se lo hace con centro en el origen y
no posee color. Este y otros atributos deberan ser definidos previamente
para poder ser utilizados.
Las Formas Basicas son huecas. Esto resulta de utilidad cuando se desea
representar habitaciones. Ademas, las formas basicas son oscuras
interiormente a menos que el diseñador especifique una luz dentro de la
forma ("PointLight").
Cualquier geometria en un grafo-escena puede ser considerada una Forma.
Observese que cada uno de estos pequeños programas puede ser escrito por
el participante en un procesador de palabras, luego almacenado como Text
Only, es decir sin terminaciones de fin de linea, con terminacion .wrl
(por ejemplo cubo.wrl) y luego accedido desde el plug-in de VRML que se
haya conectado al Netscape o al Explorer (por ejemplo el WorldView),
desde el Menu File, opcion Open Page... Como resultado, debe obtenerse
un cubo blanco que podra ser manipulado a voluntad con las herramientas
del plug-in.
Tambien es importante destacar que no es necesario hallarse "en linea"
(en Red, en la WWW) para utilizar el plug-in. Basta con activar
inicialmente el Netscape fuera de linea y cuando intente ponerse en
linea, interrumpir el proceso, obteniendose como resultado un Netscape o
Explorer incompleto para efectos de navegacion de la Red pero suficiente-
mente para ser utilizado por el plug-in de VRML (WorldView u otro).
Por supuesto que estos "primitivos" aceptan grados progresivos de
sofisticacion. Por ejemplo, en el caso del cubo, pudieramos tener:
#VRML V1.0 ascii
Separator {
Material {
diffuseColor 1 0 1
shininess 0.2
transparency 0
} #Material
Separator {
Transform {
rotation .7 1 0 .7
} #Transform
Translation {
translation -45 30 0
} #Translation
Cube {
width 30
height 30
depth 30
} #Cube
} #Separator
} #Separator
Incorporando una muestra de color, translacion, rotacion, dimensiones.
Cosas que se trataran en detalle en paginas subsiguientes.
--> TRAZADO DE LINEAS Y SUPERFICIES
( Nodos: Coordinate3, IndexedFaceSet, IndexedLineSet )
Ocurre que muchas veces no nos interesa construir formas con base a
la yuxtaposicion de volumenes primitivos sino que quisieramos hacerlo con
base a caras, lineas y coordenadas. En arquitectura esto resulta
particularmente importante porque permite al diseñador explorar otros
tipos de formas o utilizar partes de las ya existentes.
Los tres NODOS que nos serviran de utilidad para este fin son:
-------------------------------------------------------------------------
Coordinate3 - Que sirve para especificar el conjunto de puntos 3-D a
ser unidos. Cada punto se describe mediante tres coorde-
nadas enteras separadas por comas.
-------------------------------------------------------------------------
Ejemplo 1: Indicar seis puntos en el espacio 3-D
Coordinate3 {
point [
0 75 25, #0
12.5 62.5 12.5, #1
12.5 62.5 37.5, #2
-12.5 62.5 37.5, #3
-12.5 62.5 12.5, #4
0 50 25, #5
]
} #Coordinate3
-------------------------------------------------------------------------
IndexedFaceSet - Que establece cuales puntos conforman una cara
-------------------------------------------------------------------------
Ejemplo 2: Construir ocho caras triangulares en el espacio
IndexedFaceSet {
coordIndex [
0, 1, 2, -1, #A
0, 1, 4, -1, #B
0, 4, 3, -1, #C
0, 2, 3, -1, #D
5, 1, 2, -1, #E
5, 1, 4, -1, #G
5, 3, 4, -1, #H
5, 2, 3, -1, #I
]
} #IndexedFaceSet
Observese que el -1 se utiliza para indicar el fin de cada cara
geometrica en lo concerniente a su numero de bordes.De esta forma, se
pueden describir caras con cualquier numero de bordes. Cada uno de los
valores separados por comas que describen una cara debe haber sido
registrado previamente en el nodo Coordinate3. Resulta indispensable para
caras de mas de tres bordes que los puntos se registren en orden segun la
secuencia en que se dibuja la cara.
-------------------------------------------------------------------------
IndexedLineSet - Que especifica los juegos de dos puntos que se unen
mediante lineas.
-------------------------------------------------------------------------
Ejemplo 3: Construir 12 lineas en el espacio
IndexedLineSet {
coordIndex [
0, 1, -1,
0, 2, -1,
0, 3, -1,
0, 4, -1,
1, 4, -1,
1, 2, -1,
2, 3, -1,
3, 4, -1,
1, 5, -1,
2, 5, -1,
3, 5, -1,
4, 5, -1
]
} #IndexedLineSet
Donde cada uno de los dos primeros datos de una linea corresponde a un
punto en el espacio cuyas coordenadas han sido almacenadas previamente
mediante el nodo Coordinate3. Por ejemplo, si nos refirieramos al ejemplo
anterior, cada uno de los puntos de las lineas especificadas en el nodo
IndexedLineSet referiria a sus coordenadas registradas en Coordinate3.
Observese que el -1 se utiliza para indicar el fin de cada linea
geometrica. Si una linea se trazara a traves de mas de dos puntos
entonces corresponderia a una poligonal. En ese caso resultaria
indispensable que los puntos se suministraran segun la secuencia de su
trazado.
*********************************************************************
EJERCICIO INTEGRADOR 1- Construir un octaedro en 3-D mediante lineas.
*********************************************************************
Incorporando los ejemplos 1 y 3 anteriormente mencionados tendremos:
#VRML V1.0 ascii
Separator {
Material {
ambientColor 0.2 0.2 0.2
diffuseColor 0.8 0.8 0.8
specularColor 0 0 0
emissiveColor 0 0 0
shininess 0.2
transparency 0
} #Material
Separator {
Coordinate3 {
point [
0 75 25, #0
12.5 62.5 12.5, #1
12.5 62.5 37.5, #2
-12.5 62.5 37.5, #3
-12.5 62.5 12.5, #4
0 50 25, #5
]
} #Coordinate3
IndexedLineSet {
coordIndex [
0, 1, -1,
0, 2, -1,
0, 3, -1,
0, 4, -1,
1, 4, -1,
1, 2, -1,
2, 3, -1,
3, 4, -1,
1, 5, -1,
2, 5, -1,
3, 5, -1,
4, 5, -1
]
} #IndexedLineSet
} #Separator
} #Separator
*********************************************************************
EJERCICIO INTEGRADOR 2- Construir un octaedro en 3-D mediante CARAS
y LINEAS. ( A ser desarrollado por el o la
participante en este Curso.)
*********************************************************************
Nota: En algunos browsers las limitaciones impuestas por la fuente
de iluminacion dificultaran la visibilidad de la totalidad de
las caras del octaedro.
--> INCORPORACION DE TEXTO. EL NODO ASCIITEXT.
Ademas de los nodos para la descripcion y manipulacion de formas graficas
que integran este grupo, existe un nodo llamado AsciiText que nos permite
crear texto plano para la elaboracion de letreros. Su sintaxis VRML es:
AsciiText {
string
spacing
justification
width
Los cuatro CAMPOS que permiten precisar el uso del nodo son:
- CADENA ("STRING")
El campo de string aloja el titulo del letrero o letreros que se va(n) a
presentar. Su contenido debe hallarse entre comillas. Pueden incluirse
multiples cadenas separadas por comas y encerradas en su conjunto por
corchetes. Por ejemplo:
string ["CURSO INTRODUCTORIO AL VRML", "Caracas - Venezuela", "1998"]
- ESPACIAMIENTO ("SPACING")
El parametro de espaciamiento ("spacing", se refiere a la altura de
la separacion vertical entre las lineas del texto utilizado, cuya opcion
de defecto es de 1 unidad, lo que significa que existira una separacion
vertical entre lineas de texto equivalente al alto de una linea. Ese alto
puede ser duplicado, triplicado etc. si se emplea el valor 2, 3 etc.
- JUSTIFICACION ("JUSTIFICATION")
El campo de justificacion determina la ubicacion de las cadenas de texto
en la dimension x con base a:
LEFT Alinea el borde izquierdo de texto al origen.
CENTER Alinea el centro del texto al origen.
RIGHT Alinea el borde derecho de texto al origen.
- ANCHURA ("WIDTH")
El campo de anchura ("width") es utilizado para delimitar el ancho
del texto y lo veremos con mayor detalle bajo el nodo FontStyle del
grupo de nodos de APARIENCIA, que sigue a continuacion de este. Incluye
aspectos relativos a altura, tipo y estilo de letras a ser utilizadas.
El nodo AsciiText representa cadenas de caracteres de texto basado en
ASCII. Permite incorporar mensajes en las escenas graficas a medida
que estas se van construyendo. La primera cadena ubica su base
("baseline") en (0,0.0). Todas las cadenas subsiguientes avanzan por:
-(size * spacing)
- FORMATOS/OPCIONES DE DEFECTO ("FILE FORMAT/DEFFECT")
AsciiText {
string ""
spacing 1
justification LEFT
width 0
-------------------------------------------------------------------------
Ejemplo de publicacion de texto utilizando el nodo AsciiText.
-------------------------------------------------------------------------
#VRML V1.0 ascii
Separator {
AsciiText {
string "CURSO INTRODUCTORIO AL VRML"
spacing 1
justification CENTER
width 0
} #AsciiText
} #Separator
--> TEXTURAS ("Textures").
Las texturas son aplicadas al texto tridimensional de la siguiente forma:
- El origen de la textura se fija en el origen de la primera cadena,
segun lo determine la justificacion. La textura se escala por igual
tanto en la dimension S como en la T, con la altura de las letras
establecida en una unidad. S crece hacia la derecha. El origen de T
puede ocurrir en cualquier punto a lo largo de cada caracter,
dependiendo de como este definida la silueta de ese caracter.
...sigue
|
|