Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web








CURSO VRML
por el arquitecto y profesor
Gonzalo Vélez Jahn
(ARQUITECTURA-L)



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


Siguiente entrega.
Indice del CURSO VRML.