CURSO VRML |
|
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
|
|