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 15


-------------------------------------------------------------------------

5.13- NODOS DE  ILUMINACION. CONSIDERACIONES.
        Nodos: DirectionalLight, PointLight, SpotLight.
-------------------------------------------------------------------------

FUENTES DE LUZ

Hasta los momentos hemos creado y posicionado objetos en mundos VRML,les
hemos dado propiedades materiales y hasta aplicado  texturas.  Pero solo
los hemos visualizado en funcion de una iluminacion aplicada por defecto
en funcion del  browser  VRML 1.0.  Si  deseamos  aplicar  otro  tipo de
iluminacion debemos recurrir para ello a los nodos de ILUMINACION o nodos
de LUZ.

El VRML 1.0 utiliza nodos de  luz  para  crear  fuentes  de iluminacion.
Dependiendo de su ubicacion en el grafo escena asi como de su  tipo, los
nodos de luz pueden afectar las formas existentes en la escena  y pueden
ser afectados por los nodos de transformacion. Al igual que  otros nodos
de Apariencia, o Propiedad,  si un nodo de Luz se encuentra dentro de un
Separador no afectara las formas exteriores a ese separador.

Se estima buena practica el incluir al menos una luz  en los mundos VRML,
dado que en algunos visualizadores,  o  browsers,  el  comportamiento de
representacion de formas, rendering, es optimizada por la presencia de un
nodo de luz en la escena que se esta representando. Y,  para  efectos de
optimizacion, no importa si la luz esta  encendida o  apagada  siempre y
cuando se encuentre presente en la escena.

COLOR DE LA LUZ

El color de la luz puede ser especificado en  cada  Nodo  de Iluminacion
utilizando para ello el campo :

             color r g b

segun el cual la primera  columna (r)  controla  el color  ROJO ("red"),
mientras que la segunda  columna (g) controla el color  VERDE ("green") y
la  tercera  columna (b)  controla  el  color  AZUL ("rojo"). El valor de
cada columna puede oscilar desde uno (maximo) hasta cero (minimo).

Los nodos  de   LUZ,  o  de  ILUMINACION,   son   tres DirectionalLight,
PointLight y SpotLight

--> El Nodo DIRECTIONALLIGHT ( "DirectionalLight" )

Este nodo define una luz direccional  que  ilumina  segun  una direccion
especifica de rayos paralelos a un vector tridimensional dado.

La sintaxis del nodo DirectionalLight es (ejemplo):

     DirectionalLight {
          on         TRUE
          intensity  1
          color      1 1 1
          direction  0 0 -1
        }#DirectionalLight

donde "on" indica si la luz esta encendida ("TRUE"),  "intensity" indica
el valor de la intensidad de la luz, "color", como  ya  se  ha  visto, el
color o combinacion de colores de  la  luz  y  "direction"  la direccion
tridimensional hacia  la  cual  apunta  la  luz  y  la  cual  sirve para
direccionar  un haz de rayos   paralelos  a  ella.  Por  ejemplo,  si la
direccion es 0 1 0 eso significa que toda la luz estara  brillando hacia
arriba, es decir, en el sentido positivo del eje Y, y que el haz de rayos
,lo hace desde una ubicacion infinitamente lejana en el sentido opuesto.
De alli la explicacion del porque del paralelismo  de rayos  en  el haz.


--> El Nodo POINTLIGHT ( "PointLight" )
         *( Bombilla, Foco de Luz )

Este nodo define una fuente de luz puntual,  que  alumbra  por  igual en
todas   direcciones ,   ubicandola   en    una   determinada coordenada
tridimensional, es decir, una fuente que emite luz uniformemente en todas
direcciones desde un  determinado  punto  matematico  en  el  espacio. La
sintaxis del nodo PointLight es (ejemplo):

     PointLight {
          on         TRUE
          intensity  1
          color      1 1 1
          Location  0 0 -1
        } #PointtLight

Observese que esta sintaxis es muy similar a la del nodo DirectionalLight
variando solo en el ultimo parametro,  que  en  el  presente caso  es de
UBICACION ("Location") mientras que en el caso anterior es  de DIRECCION
("Direction").

--> El Nodo SPOTLIGHT
       ( Reflector )

UN nodo REFLECTOR ("SpotLight") es equivalente, en cierto sentido, a una
combinacion de las caracteristicas del nodo DirectionalLight y  del nodo
PointLight, dado que posee ambas una UBICACION y una DIRECCION. Esto es,
el  nodo  SpotLight  genera  luz  que  parece  proceder  desde  un punto
especifico pero no la irradia por igual en todas direcciones.  De hecho,
irradia principalmente segun una determinada direccion,  constituida por
el eje de una suerte de  cono  de  iluminacion  emitida  por  la fuente.

La sintaxis del nodo SpotLight es (ejemplo):

        SpotLight {
                on              TRUE
                intensity       .5
                color           1 1 1
                location        0 0 120
                direction       0 0 -1
        } #SpotLight

Aqui se crea un reflector  ("SpotLight")  a  mediana  intensidad  (0.5),

en  la ubicacion (0, 0, 120) y mirando hacia  la pantalla (direccion -Z)

Su color ha sido especificado, en este caso, como blanco.

Mediante este nodo podemos crear nuevas fuentes de luz en nuestro mundo.

-------------------------------------------------------------------------

5.14- EJERCICIOS DE INTEGRACION. GRUPOS C, D y E
      (Nodos de Transformacion, Camara e Iluminacion)
-------------------------------------------------------------------------

Seguidamente, y para terminar de fijar  los  conocimientos anteriormente
planteados, desarrollaremos un numero de  ejercicios  de  integracion de
conceptos.

************************************************************************

EJERCICIO INTEGRADOR 1 ILUMINACION DIRECCIONAL SOBRE CUBO Y ESFERA
************************************************************************

#VRML V1.0 ascii
Separator {
    DirectionalLight {
        direction 0 0 -1  # La luz ilumina desde el participante hacia
la escena.
    }
    PerspectiveCamera {
        position    -8.6 2.1 5.6
        orientation -0.1352 -0.9831 -0.1233  1.1417
        focalDistance       10.84
    }
    Separator {   # La esfera roja
        Material {
            diffuseColor 1 0 0   # Color rojo.
        }
        Translation { translation 3 0 1 }
        Sphere { radius 2.3 }
    }
    Separator {  # El cubo azul
        Material {
            diffuseColor 0 0 1  # Color Azul
        }
        Transform {
            translation -2.4 .2 1
            rotation 0 1 1  .9
        }
        Cube {}
    }
}

Es este uno de los mas interesantes ejercicios de este curso ya que  nos

permite experimentar con luz DIRIGIDA.  Se  recomienda  al  participante

experimentar con diferentes intensidades de luz, colores,  posiciones  y

orientaciones de camara. Por ultimo sustituir a la esfera y cubo  por el

espacio arquitectonico creado en el ejercicio integrador  #2  del  punto

5.10  /"Construccion de un ambiente").

************************************************************************

EJERCICIO INTEGRADOR 2 ILUMINACION DE BOMBILLO DENTRO DE UN CUBO
************************************************************************

Este ejercicio debra ser desarrollado por el participante utilizando para
ello la instruccion PointLight.

************************************************************************

EJERCICIO INTEGRADOR 33 ILUMINACION DE REFLECTOR SOBRE TRES OBJETOS
************************************************************************

Integrando la ultima especificacion de luz del capitulo anterior con  un

ejercicio anteriormente realizado tendremos:

#VRML V1.0 ascii

Separator {

        PerspectiveCamera {
                position        0 30 240
                orientation     0 0 -1 0
                focalDistance   5
                heightAngle     .785
        } #PerspectiveCamera

        SpotLight {
                on              TRUE
                intensity       .5
                color           1 1 1
                location        0 0 120
                direction       0 0 -1
        } #SpotLight

        Info {
                string "Este es un mundo chevere !!"
        } #Info

        Material {
                diffuseColor 1 0 1
                shininess 0.2
                transparency 0
        } #Material

        MaterialBinding {
                value   DEFAULT
        } #MaterialBinding

        FontStyle {
                size    15
                family  TYPEWRITER
                style   NONE
        } #FontStyle

        AsciiText {
                string  "Este es un mundo chevere !!"
                spacing 1
                justification CENTER
                width 0
        } #AsciiText

        DEF Cone1 Separator {

                Translation {
                        translation 0 30 0
                } #Translation

                Cone {
                        parts   ALL
                        bottomRadius    15
                        height          30
                } #Cone

        } #Cone1 Separator

        DEF Cube1 Separator {

                Transform {
                        rotation 0 1 0 .7
                } #Transform

                Translation {
                        translation -45 30 0
                } #Translation

                Cube {
                        width   30
                        height  30
                        depth   30
                } #Cube

        } #Cube1 Separator

        DEF Cylinder1 Separator {

                Translation {
                        translation 45 30 0
                } #Translation

                Cylinder {
                        parts ALL
                        radius 15
                        height 30
                } #Cylinder

        } #Cylinder1 Separator

        DEF Sphere1 Separator {

                Texture2 {
                        filename "wood4.jpg"
                }

                Translation {
                        translation 0 75 0
                } #Translation

                Sphere {
                        radius 15
                }#Sphere

        } #Sphere1 Separator

        DEF FaceDiamond Separator {

                DEF DiamondCoords Coordinate3 {
                        point [
                        0 75 25,
                        12.5 62.5 12.5,
                        12.5 62.5 37.5,
                        -12.5 62.5 37.5,
                        -12.5 62.5 12.5,
                        0 50 25,
                        ]
                } #DiamondCoords Coordinate3

                USE DiamondCoords

                IndexedFaceSet {
                        coordIndex [
                                0, 1, 2, -1,
                                0, 1, 4, -1,
                                0, 4, 3, -1,
                                0, 3, 2, -1,
                                5, 1, 2, -1,
                                5, 1, 4, -1,
                                5, 4, 3, -1,
                                5, 3, 2, -1,
                                ]

                } #IndexedFaceSet

        } #FaceDiamond Separator

        DEF LineDiamond Separator {

                Translation {
                        translation 0 75 0
                } #Translation
                USE DiamondCoords

                IndexedLineSet {
                        coordIndex [
                          0, 1, -1,
                          0, 2, -1,
                          0, 3, -1,
                          0, 4, -1,
                          4, 1, -1,
                          1, 2, -1,
                          2, 3, -1,
                          3, 4, -1,
                          5, 1, -1,
                          5, 2, -1,
                          5, 3, -1,
                          5, 4, -1
                        ]

                } #IndexedLineSet
        } #DiamondLine Separator
} #Separator

-------------------------------------------------------------------------

5.15- LOS NODOS WWWAnchor y WWWInline
-------------------------------------------------------------------------

Concluiremos la descripcion de nodos del  VRML 1.0  mencionando  dos que
resultan de gran  utilidad  para  el  constructor  de  mundos virtuales.

--> Nodo WWWAnchor

Este nodo nos permite incorporar  un  URL a  alguna  de  las  formas que
utilizamos. De esta forma, cuando un  o  una  participante  hagan "clic"
sobre esa dererminada forma el o  ella  se  veran  transportados  a ese
determinado mundo.

La sintaxis para el nodo es bastante clara y directa.   Supongamos como
ejemplo la existencia de una esfera de madera en nuestro mundo  la cual,
al ser activada mediante un clic refiere al  mundo Virtual  San Francisco
de Planet 5.(un archivo .wrl):

    WWWAnchor {
      name "http://www.planet5.com/worlds/vrsf.wrl"
      map NONE

Donde "name" señala la direccion a la cual refiere el objeto,  esto  es:

               "http://www.planet5.com/worlds/vrsf.wrl"

Mientras que "map" ofrece una de  dos  opciones:  NONE  o  POINT.  Si se
utiliza POINT, las coordenadas del  punto sobre  el  objeto  al  cual el
participante activa mediante clic sera añadido al URL en el campo "name".
La sintaxis para poder añadirlo es ?X, Y, Z.

--> Nodo WWWInline

Es importante destacar que el VRML provee dos formas de reducir el numero
de nodos utilizado en un  mundo  que  incorpora  una  gran  cantidad de
formas. el archivo que describe a estas. Una se  denomina  INLINES  y la
otra INSTANCING.  Inlines  se  obtiene  mediante  el  nodo  WWWline cuya
sintaxis es:

    #VRML V1.0 ascii

    Separator {
        WWWInline {
            name        ""
            bboxSize    0 0 0
            bboxCenter  0 0 0
        }
    }


Observese que el campo "nombre" adopta el nombre de ruta ("pathname") del
archivo del mundo que esta siendo "inlined". Por otra parte,  los campos
bboxSize  y bboxCenter  decriben  una  caja  semicerrada, lo que aportara
al participante una idea del tamaño y ubicacion del objeto  antes de que
haya sido representado. Este tipo de cajas resulta  especialmente comodo
de utilizar cuando se enfrenta la tarea de construir mundos complejos y/o
de gran tamaño.

El nodo WWWInline nos permite añadir otros archivos .wrl (es decir, otros
mundos virtuales al nuestro. De esta forma, si  de  pronto  uno descubre
en la Internet otro modelo a incorporar dentro del mundo que se encuentra
desarrollando en ese momento, debera especificar entonces el URL para el
archivo en el mismo nombre del campo.

-------------------------------------------------------------------------

5.17- Y, FINALMENTE, COSTOS....
-------------------------------------------------------------------------

Por ultimo, una breve mencion al  tan  importante  tema  de  costos. Tan
importante, que puede prevenir a otros participantes de visitar el mundo
que hemos creado. Por costo queremos decir la plataforma  requerida para
poder operar sin dificultad la escena a la cual debemos  conectarnos con
una determinada velocidad de nuestro modem. Asi como tambien la necesidad
de bajar ("download") el plug-in de "browser" apropiado para  visitar el
mundo virtual que ha construido. Si estos costos resultan taxativos para
el, el visitante potencial podra orientar su interes  hacia  las paginas
web bidimensionales, menos atractivas pero mas accesibles a sus medios.

                                                                ...sigue


Siguiente entrega.
Indice del CURSO VRML.