CURSO VRML |
|
entrega 12
-------------------------------------------------------------------------
5.9- Grupo B- NODOS DE APARIENCIA O PROPIEDAD. ("Property Nodes")..
Nodos: Coordinate3, Material, MaterialBinding, Texture2, FontStyle
-------------------------------------------------------------------------
Los Nodos de APARIENCIA o nodos de PROPIEDAD afectan la manera en la que
se representan las formas.
--> El nodo COORDINATE3
Segun las especificaciones del VRML 1.0, el nodo Coordinate3 define el
conjunto de coordenadas que seran utilizadas para la descripcion de una
forma geometrica por los nodos IndexedFaceSet, IndexedLineSet o PointSet.
De por si, el nodo Coordinate3 no tiene la capacidad de describir formas.
Simplemente especifica coordenadas de puntos que podran ser despues com-
binadas de cualquier manera por los citados nodos de Forma. Su sintaxis
general es, como ya se utilizo anteriormente:
Coordinate3 {
point 0 0 0
}
Por ejemplo, cuatro coordenadas de puntos tridimensionales podrian espe-
cificarse asi:
Coordinate3 {
point [ -1 0 -1, 1 0 -1, 1 0 1, -1 0 1 ]
}
--> El nodo MATERIAL.
El proposito del nodo Material es el de especificar las propiedades
materiales de las superficies de las formas. Como el nodo Material
acompaña siempre al primer nodo Separador, sus propiedades aplican a
todas las formas de la Escena. Sin embargo, diferentes formas pueden
interpretar aquellos materiales que poseen valores multiples de manera
diferente. Si se desea establecer un lazo mas estrecho entre formas y
materiales, debera recurrirse entonces al nodo MaterialBinding, el cual
trataremos subsecuentemente.
--> ESTABLECIENDO EL MANEJO DE LA ILUMINACION
Los campos en el nodo Material determinan la forma en que la luz se
refleja sobre un objeto para crear COLOR.
- El campo ambientColor refleja la luz ambiental en forma pareja a
todas las partes del objeto cualquiera sean los angulos de
observacion y de iluminacion.
- El campo diffuseColor refleja todas las fuentes de luz en VRML
dependiendo del angulo en que incide la luz sobre la superficie del
objeto. Mientras mas directa sea la incidencia de luz sobre la
superficie del objeto, mayor sera la reflexion de luz difusa.
- El campo specularColor y el brillo ("shininess") determinan los
resaltes especulares ("specular highlights"), por ejemplo, las
manchas de brillo enn la superficie de una manzana. Cuando el angulo
que la luz hace con la superficie es cercano al angulo que la
superficie hace con respecto al angulo visual del participante. El
color especular se incorpora a los calculos del color difuso y del
color ambiental.Mientras los valores bajos de luz especular originan
brillos suaves los altos valores producen efectos mas fuertes y
concentrados.
- El color emisivo ("emissive color") permite modelar objetos que
resplandecen ("glowing objects"). Esto puede resultar de utilidad
para mostrar modelos basados en RADIOSIDAD ( donde la energia
luminica del cuarto es computada explicitamente), o para la
exhibicion de datos cientificos.
- La condicion de Transparencia ("Transparency") establece un espectro
que va desde 0.0 (totalmente opaco) hasta 1.0 (totalmente transpa-
rente). En el peor de los casos el browser debera ser capaz de
identificar solo esas condiciones extremas.
Dado que los parametros de luz descritos proceden del modelo luminico
OpenGL se sugiere a los participantes interesados en profundizar acerca
del tema el referirse a las especificaciones de dicho modelo. Sin embargo
se advierte que no todos los sistemas de representacion ("rendering") se
encuentran en capacidad de soportar las especificaciones de dicho modelo.
Se asume que existira un valor de intensidad de 0.2 de luz blanco
implicito en cualquier escena de VRML.
--> SISTEMAS DE REPRESENTACION A BAJO COSTO ("low-end rendering systems")
Muchos de los sistemas de representacion de bajo costo no resultan
capaces de soportar el rango total de especificaciones materiales del
VRML.Por ejemplo,muchos sistemas no incorporan para su representacion
los valores individuales rojo, verde y azul de luz reflejada tal y
como lo especifica el campo SpecularField. La siguiente tabla busca
describir cuales campos del nodo Material son tipicamente soportados
por sistemas de bajo costo, y en el caso de que no sea asi, sugiere
pautas a ser adoptadas por los participantes.
Campo Soportado? Accion sugerida
ambientColor No Ignorarlo.
diffuseColor Si Utilizarlo como color base.
specularColor Si Ignorarlo.
emissiveColor No Ignorarlo, a menos de que todos
los demas se hallen vacios.
shininess Si Utilizarlo.
transparency No Ignorarlo.
Se asume que los sistemas de representacion ("rendering") sencillos no
seran capaces de soportar ambos, objetos iluminados y no iluminados en
un mismo "mundo".
Por otra parte, muchas implementaciones de VRML soportaran, solamente, o
miltiples colores difusos con un solo valor para todos los otros campos,
o multiples colores emisivos con un solo valor de transparencia y NINGUN,
"NO (empty, '[]') valores para todos los demas campos. En general, usos
mas complicados del nodo Material deberan ser evitados.
Las opciones de defecto son las siguientes:
FILE FORMAT/DEFAULTS
Material {
ambientColor 0.2 0.2 0.2 # MFColor
diffuseColor 0.8 0.8 0.8 # MFColor
specularColor 0 0 0 # MFColor
emissiveColor 0 0 0 # MFColor
shininess 0.2 # MFFloat
transparency 0 # MFFloat
}
Lo cual, traducido a la sintaxis del VRML 1.0 puede expresarse asi:
#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
}
}
Cada uno de los campos de Color del nodo Material posee en teoria
tres columnas de numeros que se identifican, cada una de ellas, de
izquierda a derecha con uno de los colores de la clave RGB: Rojo ("Red"),
Verde ("Green") y Azul ("Blue"). En teoria, cualquier color (intensidad,
saturacion y valor) puede sre representado mediante una combinacion de
estos tres colores en variados grados de intensidad. Si se quisiera crear
por ejemlo un morado profundo se utilizaria la mezcla 1 0 1 combinando
el rojo y el azul.
En la practica, el campo diffuseColor pareciera ser el unico que responde
a las especificaciones de color vinculadas al objeto, pero ello pudiera
deberse a las restricciones impuestas por el "browser" utilizado o a las
limitaciones del equipamiento utilizado.
Las combinaciones de color mas comunmente utilizadas en el campo
diffuseColor son:
000 --> Blanco
001 --> Azul
010 --> Verde Claro
011 --> Azul Claro
100 --> Rojo
101 --> Morado
110 --> Amarillo
111 --> Negro
Ejercicio- Crear un "Mundo" que contenga Esfera Azul.
#VRML V1.0 ascii
Separator {
Material {
diffuseColor 1 0 1
} #Material
Sphere {}
}
Observese que al no ser suministrado el radio de la esfera, se adopta
la opcion de defecto.
--> Concepto de NORMAL
Aun cuando una discusion detallada sobre el tema trasciende el alcance de
este Curso Introductorio, es necesario senalar que para poder computar
de manera precisa y confiable la iluminacion para un objeto se requiere
tomar en cuenta, ademas de fuentes de luz y materiales, el conocimiento
de los denominados VECTORES NORMALES, que pueden ser visualizados como
flechas imaginarias que surgen en angulo recto (perpendicular) a la
superficie de un objeto. La NORMAL permite determinar la mayor intensidad
con que la luz incide sobre la superficie de un objeto. A tal fin existe,
para aplicaciones mas avanzadas de iluminacion un nodo denominado NORMAL,
cuya sintaxis es :
Normal {
vector [ x y z ]
}
el cual observa un comportamiento similar al del nodo Coordinate3,
excepto por el hecho de que en vez de suministrar coordenadas de vertices
suministra vectores normales.
Computar manualmente los vectores normales implica una labor muy tediosa.
Afortunadamente el VRML asume que todos los objetos poseen vectores
normales razonables, aun cuando no se le suministre su especificacion y
operara, en ese caso, sobre base de promedios.
Pese a todos los beneficios de iluminacion derivados del nodo Material,
existe un problema: no todas las formas que el usuario decida emplear
estaran en condiciones de entender las especificaciones aqui planteadas.
La solucion radica en el nodo MaterialBinding el cual para efectos del
presente curso introductorio utilizaremos con opciones de defecto.
--> NODO MATERIALBINDING
CONSIDERACIONES INICIALES
El nodo MaterialBinding especifica como los materiales se vinculan a
las formas existentes en la Escena. Su sintaxis en VRML es:
MaterialBinding {
DEFAULT
} #MaterialBinding
El valor asignado por el nodo puede ser cualquiera de estos:
{DEFAULT, OVERALL, PER_PART, PER_PART_INDEXED, PER_FACE,
PER_FACE_INDEXED, PER_VERTEX, PER_VERTEX_INDEXED}
Es necesario esta seleccion debido a que el nodo Material puede alojar
multiples materiales. Dichas opciones significan:
DEFAULT --> Utiliza lo que esta pre-estipulado para una
determinada forma.
OVERALL, --> Utliza el primer material para la totalidad de la
forma.
PER_PART, --> Emplea un material para cada "parte" de un objeto.
PER_PART_INDEXED, --> Utiliza el campo materialIndex para hallar que
material debe aplicar en cada "parte" del objeto.
PER_FACE, --> Emplea un material para cada "cara" de un objeto.
PER_FACE_INDEXED, --> Utiliza el campo materialIndex para hallar que
material debe aplicar en cada "cara" del objeto.
PER_VERTEX, --> Emplea un material determinado para cada vertice.
PER_VERTEX_INDEXED --> Utiliza el campo materialIndex para hallar que
material debe aplicar en la esquina de cada cara.
Cuando un objeto geometrico, digamos por ejemplo un cilindro, esta sujeto
a iluminacion diferente por cada una de sus partes (LADO, TOPE y FONDO)
ello se especifica de la siguiente manera:
#VRML 1.0 ascii
Separator {
Material {
diffuseColor [ 0 0 1, 1 1 0, 1 0 0 ]
specularColor [ 0 0 0, 0 0 0, .75 .75 .75 ]
}
MaterialBinding { value PER_PART }
Cylinder { }
}
Esto significa que el primer parametro de diffuseColor (0 0 1) sera
aplicado a los lados --> los componentes rojo y verde son cero y el
componente azul es 1 de modo que los lados seran azules. el segundo
diffuseColor (110) es una mezcla de rojo y verde que produce amarillo
y sera aplicado al TOPE. El tercer diffuseColor, aplicado al FONDO, sera
rojo.
Por su parte, el campo specularColor sera (0,0,0) para ambos, los LADOS
y el TOPE pero el FONDO revestira un alto valor especular. Y como sus
valores (.75, .75, .75) son todos iguales, la luz especular sera entonces
del color de la fuente de luz.
Para poder lograr que estas condiciones se respeten, aplicamos el nodo
MaterialBinding con base a una especificacion PER_PART, esto es, la
primera parte (los LADOS) recibe el primer material, la segunda parte
(el TOPE) recibe el segundo material mientras que la tercera parte (el
FONDO) recibe el tercer material. Si la especificacion hubiera sido
basada sobre el criterio OVERALL, entonces todas las partes del cilindro
hubieran recibido solo el primer material.
--> Nodo TEXTURE2
Este nodo define un MAPA DE TEXTURAS y parametros para este Mapa. Dicho
mapa sirve para aplicar textura a las formas subsiguientes a medida que
ellas van siendo representadas.La sintaxis VRML aplicada en este caso es:
Separator {
Texture2 {
filename ""
image 0 0 0
wrapS REPEAT
wrapT REPEAT
}
}
Cualquier forma VRML puede poseer una textura en su superficie. Esta
textura puede provenir de un fichero externo o bien puede ser
especificado internamente mediante una serie de coordenadas. Dado que
resulta mas sencillo aplicar texturas desde un archivo externo nos cir-
cunscribiremos a ello dentro del presente Curso. Y, apoyandonos en las
opciones de defecto arriba especificadas, solo utilizaremos el nombre del
archivo referido.
Por ejemplo, el aplicar una textura de piedra a un cubo tendria como
expresion el siguiente listado:
#VRML V1.0 ascii
Separator {
Texture2 {
filename "piedra.jpg"
}
Cube {
width 1
height 2
depth 0.15
}
}
Claro esta que esto supone de que existe un archivo de imagen denominado
"piedra.jpg". Igual, si quisieramos dar al cubo un efecto de madera
podriamos emplear el archivo grafico "madera.jpg", dado que este exista.
Esto se traduce en una herramienta poderosa para enriquecer la apariencia
de los mundos virtuales a ser creados.
--> Nodo FONTSTYLE
Si el participante desea incorporar texto en su "mundo" podra recurrir a
dos nodos. Uno, el AsciiText, ya descrito anteriormente maneja la cadena
de caracteres, su espaciamiento, su justificacion y anchura. El otro,
delo cual nos ocuparemos en este punto es el FontStyle.
El nodo FontStyle cubre los aspectos de : tamaño de letra ("font size"),
familia ("family") y estilo ("style"). Su sintaxis VRML es:
FontStyle {
Size 15
Family TYPEWRITER
Style NONE
}#FontStyle
Aonde SIZE indica el tamaño de la letra.
Por su parte, FAMILY ofrece las siguientes posibilidades:
SERIF Estilo Serif (equivale a TimesRoman)
SANS Estilo Sans (equivale a Helvetica)
TYPEWRITER Estilo Typewriter (equivale a Courier).
Mientras que STYLE ofrece las opciones:
NONE Escritura normal.
BOLD Letra resaltada (negrita).
ITALIC Estilo Italico (inclinado).
OPCIONES DE DEFECTO
Las opciones de defecto para FontStyle son:
size 10
family SERIF
style NONE
El nodo FontStyle permite cambiar la apariencia de letreros especificados
segun el nodo AsciiText.
Ejemplo de aplicacion:
#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
FontStyle {
size 15
family TYPEWRITER
style NONE
} #FontStyle
AsciiText {
string "Este es un MUNDO chevere"
spacing 1
justification CENTER
width 0
} #AsciiText
} #Separator
...sigue
|
|