Está en la página 1de 44

CUARTA UNIDAD

NODOS AVANZADOS EXTRUIR, ILUMINACION


OBJETIVOS Ensear conceptos generales del nodo extruir Aplicar deformaciones a los objetos que forman parte del mundo virtual Describir el uso de luces a los objetos virtuales

LECCIN VI

NODOS AVANZADOS: EXTRUIR, ILUMINACIN

6.1. Qu entendemos por Extruir?

Definicin 1: En VRML extruir, es obtener un objeto 3D, al desplazar el dibujo de un polgono 2D normalmente cerrado (seccin) en una direccin determinada en el espacio (direccin).

Definicin 2: Es obtener una figura 3D a partir de una figura 2D, teniendo una direccin en el espacio.

6.2. Cmo podemos extruir en VRML?

Para poder realizar una extrusin en VRML se tiene que utilizar el nodo Extrusin. En una forma extruida se obtiene de la siguiente manera:

Se visualiza el plano XZ (horizontal) y se define, mediante un conjunto de puntos, un polgono cerrado: la seccin transversal o crossSection.

Esta rea es, por tanto, plana. A travs de otra serie de puntos, se define un recorrido en el espacio tridimensional: Que se define como la espina dorsal o spine.

Luego el objeto extruido se obtiene desplazando la seccin transversal a lo largo de la espina dorsal. A lo largo de este desplazamiento, la seccin transversal puede ser invariable, o bien se pueden ir modificando tanto su escala (tamao), como su orientacin. Este nodo permite definir un objeto al desplazar su seccin por una trayectoria. Extrusion { crossSection [ 1 0, 0 6.5, ....... ] spine [ 10 0 3, 15 1 5, ............ ] solid FALSE } Si el observador desea mostrar el modelo como una caja, debe desactivar la tapa, con el campo endCap y activar el valor FALSE (la que corresponda a la segunda coordenada del campo spine), y si desea colocar las dos tapas, entonces tanto endCap como beginCap, en FALSE.

Se pueden observar los campos:

crossSection, Es un argumento que est formado por una serie de puntos que definen la seccin transversal. Estos puntos estn definidos por dos coordenadas, y no por tres, que es lo habitual.

spine, Es un argumento que est formado por una serie de puntos que definen la espina dorsal del objeto extruido. En donde cada uno de estos puntos estn definido por tres coordenadas, como no poda ser menos,

puesto que la espina dorsal es un recorrido en el espacio tridimensional.

solid, Es un campo tiene dos opciones: TRUE (la opcin por defecto) con la que se ven slo un lado de las caras. Si colocamos el campo FALSE: se vern lados. Ejemplo 6.2.1 Ahora vamos a cambiar la direccin (espina). Se observa a continuacin con ms detalle cmo se har la definicin de la seccin transversal. Como se ha mencionado antes, se encuentra en el plano XZ, es decir, en el plano horizontal formado por los ejes coordenados X y Z. ambos

La seccin transversal es una superficie plana, definida en el el plano XZ. Por tanto, se van a utilizar slo dos coordenadas (x,z).

Para comprender mejor este concepto veamos un ejemplo: un cubo. (Recurdese que existe el nodo Box para conseguirlo directamente)

(-20,-20)

(20,-20)

(-20,20) Z Figura 23. Cubo

(20,20)

Entonces lo que se debe definir la seccin transversal, para ello se tiene que sealar un polgono cerrado, es decir, se comienza desde un vrtice cualquiera (p. ej. 20,20), y se sigue el sentido de las agujas del reloj, el siguiente ser:

(-20,20), luego (-20,-20), a continuacin (20,-20) y finalmente (20,20) de nuevo, con lo que el polgono se ha cerrado.

crossSection [ 20 20, -20 20, -20 -20, 20 -20, 20 20 ]

Ahora se tiene que definir la espina dorsal. La espina dorsal define el recorrido que la seccin transversal deber efectuar para crear le forma extruida. Lo que vamos a hacer que la seccin transversal comience en el punto (0,20,0) y se mueva hasta el punto (0,20,0).

A continuacin en las siguientes figuras se muestra la espina dorsal para el cubo y el camino recorrido por la seccin transversal a lo largo de ella (negro mas remarcado):

(0,20,0) X

(0,-20,0) Z

Figura 24. Espina Dorsal

(0, 20,0)

(0,-20,0)

Figura 25. Espina Dorsal(camino recorrido por la seccin transversal) El campo spine queda de la siguiente manera: spine [ 0 -10 0, 0 10 0 ] Nota :

Como ya se ha mencionado varias veces, para que un nodo defina una forma (como es el caso del nodo Extrusin) es decir que sea visible, lo que se debe hacer es incluir el cdigo dentro del nodo Shape.

Por tanto, el documento VRML de este ejemplo quedar de esta forma: Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 20 20, -20 20, -20 -20, 20 -20, 20 20 ] spine [ 0 -20 0, 0 20 0 ] solid FALSE } }

Figura 26. Cubo

En la figura puede observarse que se han aadido unos ejes coordenados y modificado el punto de vista inicial.

Nota: Hay que Verificar que el campo solid debe estar en FALSE para que se pueda ver las caras del volumen sin problemas. Tambin Cambiar el valor a TRUE y vera la diferencia

6.3 Cmo podemos lograr aberturas en la superficie extruida?

Para poder tener un cubo por ejemplo sin caras, hay que usar dos campos que determinan si la forma extruida est abierta o cerrada en los extremos:

beginCap: En este campo, si se establece como FALSE, no existir la seccin transversal inicial (en el ejemplo del cubo, la cara inferior).

endCap: En este campo si se establece como FALSE, no existir la seccin transversal final (en el ejemplo del cubo, la cara superior). El resultado al aplicar estos campos es: Solo se obtiene, aadiendo estos dos campos al nodo Extrusin, al ejemplo anterior:

Ejemplo 6.3.1

VRML V2.0 utf8 #Ejemplo de extrusin: cubo Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 20 20, -20 20, -20 -20, 20 -20, 20 20 ] spine [ 0 -20 0, 0 20 0 ] beginCap FALSE endCap FALSE solid FALSE } }

Figura 27. Cubo sin caras

Existen otras maneras para obtener un objeto sin cerrar, se puede dejar deliberadamente sin cerrar el polgono que determina la superficie transversal. Por ejemplo de la seccin transversal del cubo, si se comienza por el vrtice inferior izquierdo (-20,10), y siguiendo segn el sentido de las agujas del reloj obtenemos:

Figura 28. Cubo sin cerrar crossSection [ -20 10, -20 -10, 20 -10, 20 20 ]

Entonces, revisemos el resultado:

El cubo queda sin cerrar, con lo que el cubo se ha extruido carece de la cara frontal, como se puede ver en la imagen.

Ejemplo 6.3.2 VRML V2.0 utf8 #Ejemplo de extrusin: cubo Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 20 20, -20 20, -20 -20, 20 -20, ] spine [ 0 -20 0, 0 20 0 ]

solid FALSE } }

Figura 28. Cubo sin cerrar en VRML

6.4 Vamos a complicar la espina dorsal Se puede entender que despus de revisar los ejemplos vistos anteriormente, la espina dorsal siempre es perpendicular a la seccin transversal y adems justa en su centro. Pero esto no quiere decir que siempre tiene qu ser as necesariamente. Al crear la espina dorsal se le puede situar en cualquier sitio, formar una recta inclinada, o estar formada por ms de dos puntos o tener cualquier forma espacial que el observador desee.

Entonces ahora veamos una espina dorsal que sea una recta inclinada con respecto a la seccin transversal. Se ha representado en el ejemplo a la espina dorsal en negro remarcado y la seccin transversal es la seccin plana ubicada en el centro de los ejes xz.

Ejemplo 6.4.1 Cubo inclinado Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 2 2, -2 2, -2 -2, 2 -2, 22 ] spine [ -10 0 0, 10 20 0 ] solid FALSE } }

Figura 29. Cubo inclinado en el plano


Y

X Z

Figura 30. Cubo inclinado

Ejemplo 6.4.2 : Uve invertida: espina dorsal de tres puntos. Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 2 2, -2 2, -2 -2, 2 -2, 22 ] spine [ -20 0 0, 0 20 0, 20 0 0 ] solid FALSE
} }

Figura 31. Uve invertida

X Z Y

Figura 32. Uve invertida.wrl

6.5 Vamos a complicar ms: veamos si la espina dorsal es un crculo

Tomando en cuenta construir una espina dorsal en forma de un crculo, entonces el cuerpo engendrado es una superficie de revolucin. Entonces Veamos un ejemplo: un dona definida por 8 puntos.

En el lado derecho podemos ver la imagen que representa la seccin transversal (crculo central pequeo) y que est situada, como debe ser, en plano horizontal XZ. Como podemos darnos cuenta esta seccin transversal es un crculo de radio 5 y est representada por 8 puntos.

Tambin podemos observar que est representada (en blanco) una espina dorsal formada por otros ocho puntos que forman un crculo de radio 10, y que

tambin est situada en el plano XZ, porque as lo hemos lo estamos planteando. El campo crossSection es el siguiente: crossSection [

5 0, 3.53 3.53, 0 5, -3.53 3.53, -5 0, -3.53 -3.53, 0 -5,

3.53 -3.53, 50 ]

Figura. 33. Dona de 8 puntos

Hay que tomar en cuenta que en el campo crossSection los puntos se expresan con dos coordenadas (xz), y que hay que repetir al final el primer punto, para cerrar la seccin transversal.

El campo spine es el siguiente:

spine [ 10 0 0, 7.07 0 7.07, 0 0 10, -7.07 0 7.07, -10 0 0, -7.07 0 -7.07, 0 0 -10, 7.07 0 -7.07, 10 0 0 ]

Entonces, los puntos vienen expresados por tres coordenadas (x,y,z). Y tambin tenemos que repitir el ltimo para cerrar la dona.

Figura 34. Dona.wrl

Ejemplo 6.5.1 Background Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 5 0, 3.53 3.53, 0 5, -3.53 3.53, -5 0, -3.53 -3.53, 0 -5, 3.53 -3.53, 50 ] spine [ {skyColor 1 1 1}

10 0 0, 7.07 0 7.07, 0 0 10, -7.07 0 7.07, -10 0 0, -7.07 0 -7.07, 0 0 -10, 7.07 0 -7.07, 10 0 0 ]

solid FALSE } }

Es obvio que los ocho puntos que se han trazado para definir los dos crculos (el de la seccin transversal y el de la espina dorsal) no son suficientes, pues ms que crculos son octgonos. Se tiene que considerar que haran falta muchos ms puntos para conseguir una dona mas real.

6.6 Vamos a variar la escala de la seccin transversal

Hasta el momento lo que hemos hecho hasta ahora, en todos los ejemplos, la seccin transversal permaneca inalterable en su forma y tamao a lo largo de la espina dorsal.

Hay un el campo que es el scale que permite modificar la escala de la seccin transversal en cada uno de los puntos a lo largo de toda la espina dorsal.

En el caso del primer ejemplo del cubo, la espina dorsal estaba formada por dos puntos. Se puede hacer que en el segundo punto, la escala de la seccin transversal sea la mitad, con lo que lograramos una figura resultante que sera una estructura de un prisma. Solo hay que aadir el campo scale de la siguiente forma:

scale [

] 1 1, 0.5 0.5

Los valores del campo scale hay par de parmetros (que varan de 0 a 1) y que son la variacin de las coordenadas x z. Hay que mencionarlo por cada punto que hay en la espina dorsal. Quiere decir que en el ejemplo anterior en el primer punto de la espina dorsal, se quiere que permanezcan inalterables las medidas de las x (factor 1), as como de las z (factor 1). En el caso del segundo punto de la espina dorsal, se quiere que las x se reduzcan a la mitad (factor 0.5), as como las z (factor 0.5). Entonces lo que se poda haber modificado slo uno, pasando en vez de a un cuadrado menor, a un rectngulo.

Ejemplo 6.6.1

Background

{skyColor 1 1 1}

#Ejemplo de extrusin: cubo Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 20 20, -20 20, -20 -20, 20 -20, 20 20 ] spine [ 0 -20 0, 0 20 0 ] scale [ 1 1, 0.5 0.5 ]

solid FALSE } }

Figura 35. Cubo escalado.wrl

6.7 Vamos a variar la orientacin de la seccin transversal

Lo que se ha hecho en los todos los casos vistos es considerar que la seccin transversal se traslade paralelamente a s misma (variando o no su tamao).

Hay un campo orientation que hace que gire la seccin transversal en cada punto de la espina dorsal un ngulo determinado. Entonces ahora veamos un ejemplo: en el caso del cubo vamos a hacer que la seccin transversal gire 45 en el segundo punto de la espina dorsal, con lo que tendremos un cubo "retorcido". Para lograrlo, vamos a aadir el campo orientation de la siguiente manera:

orientation [ 0 1 0 0, 0 1 0 0.875 ]

En los valores del campo orientation se est formando un grupo de 4 parmetros. Entonces logramos que los tres primeros indiquen el eje alrededor del cual se va a girar la seccin transversal. Finalmente el cuarto parmetro indica el ngulo girado, expresado en radianes hay que especificarlo por cada punto de la espina dorsal. En el caso del ejemplo anterior en el primer punto de la espina dorsal se hizo que la rotacin alrededor del eje Y (parmetros 0 1

0) sea nula (cuarto parmetro 0). En el caso del segundo punto de la espina dorsal, se quiere que la rotacin alrededor del eje Y (parmetros 0 1 0) sea de 45 (cuarto parmetro, que es 3.14/4=0.875)

Ejemplo 6.7.1 [Background {skyColor 1 1 1} Viewpoint { position 20 10 50 orientation 0 1 0 0.35 } Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 10.0 10.0, -10.0 10.0, -10.0 -10.0, 10.0 -10.0, 10.0 10.0 ] spine [ 0.0 -10.0 0.0, 0.0 10.0 0.0 ] solid FALSE orientation [ 0.0 1.0 0.0 0.0, 0.0 1.0 0.0 0.875 ] } }

98

Sistema a Distancia

Figura 36. Cubo girado.wrl

Background Viewpoint {

{skyColor 1 1 1}

position 20 10 50 orientation 0 1 0 0.35 } Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 10.0 10.0, -10.0 10.0, -10.0 -10.0, 10.0 -10.0, 10.0 10.0 ] spine [ 0.0 -10.0 0.0, 0.0 10.0 0.0 ] solid FALSE scale [ 1.0 1.0,

0.5 0.5

] orientation [ 0.0 1.0 0.0 0.0, 0.0 1.0 0.0 0.875 ] } }

Figura 37. Cubo girado y escalado.wrl

Ejercicio 6.7.2 En este ejercicio prctico mostramos un espiral de seccin transversal cuadrada.

Hay que considerar las dimensiones de la seccin transversal deben ser 2x2. En tonces , los cuatro puntos que definen a la seccin transversal en el plano XZ sern (1,1), (-1,1), (-1,-1) y (1,-1).

Ahora la espina dorsal va a estar definida por 17 puntos.

Figura 38. Espiral.wrl

Background

{skyColor 1 1 1}

Viewpoint { position 20 10 50 orientation 0 1 0 0.35 } Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 1.0 1.0, -1.0 1.0, -1.0 -1.0, 1.0 -1.0, 1.0 1.0 ] spine [ 10.0 0.0 0.0, 7.07 1.0 7.07, 0.0 2.0 10.0,

-7.07 3.0 7.07, -10.0 4.0 0.0, -7.07 5.0 -7.07, 0.0 6.0 -10.0,

7.07 7.0 -7.07, 10.0 8.0 0.0, 7.07 9.0 7.07, 0.0 10.0 10.0, -7.07 11.0 7.07, -10.0 12.0 0.0, -7.07 13.0 -7.07, 0.0 14.0 -10.0, 7.07 15.0 -7.07, 10.0 16.0 0.0 ] solid FALSE } }

6.8 Es posible saltar a otro lugar en un escenario virtual o hacia otro mundo virtual almacenado en otro archivo?

En VRML hay nodo llamado Anchor que sirve para crear un grupo ya que si se selecciona cualquier objeto que pertenece a dicho grupo se salta hacia otro lugar del escenario virtual o hacia otro mundo virtual almacenado en un fichero VRML (al cual accedemos a travs de su direccin URL). Existe la posibilidad de que cualquier objeto o grupo de objetos se puede convertir en un enlace.

As mismo estos enlaces son los equivalentes en el mundo tridimensional a los enlaces existentes en las pginas Web realizadas mediante HTML.Es decir para entenede mejor este nodo nos permite establecer un nexo o link para acceder a otro fichero por ejemplo si tenemos una puerta al darle clic a la manija nos llevara a otro objeto que esta en otro fichero a travs del URL.

El nodo Anchor posee un campo denominado description en el que mediante una cadena de texto se describe brevemente el objeto.

Sintaxis:

Anchor{ url"direccin_URL" description "descripcin_del_enlace" children[...] }

Ejemplo 6.8.1

Anchor { children Shape { geometry Sphere { radius 2 } appearance Appearance { material Material { diffuseColor 0.8 0.5 0}} } url "http://www.uigv.edu.pe }

Nota: Este enlace nos llevar hasta la pgina de la UIGV

Group { children [

# escalones

DEF escalon Shape { appearance Appearance {

material Material { diffuseColor 1.0 1.0 1.0 } } geometry Box { size 4.0 0.25 1.0 } }, Transform { translation 0.0 0.5 -1.0 children USE escalon }, Transform { translation 0.0 1.0 -2.0 children USE escalon },

Ejemplo 6.8.2 Puerta

Transform { translation 0.0 4.125 -2.6 children [ Anchor { url "cilindro.wrl"

description "cilindro" children [

# puerta Shape { appearance Appearance { material Material { diffuseColor 0.6 0.4 0.0 }

} geometry Box { size 3.0 6.0 0.2 } },

#manija de la puerta Transform { translation 1.18 -0.0 0.2 children [ Shape { appearance Appearance { material Material { diffuseColor 0.3 0.3 0.3 } } geometry Sphere { radius 0.15 } } ] } ] } ] } ]

Figura 40. Enlace cilindro.wrl

Figura 39. Enlace puerta.wrl

El ejemplo anterior, nos enlaza a un fichero llamado cilindro.wrl que ya sido creado antes, para que el enlace funcione se deber hacer clic en la manija de la puerta, y automticamente nos llevara al otro fichero (cilindro), considerando que ambos fichero debern estar en una misma carpeta.

LECCIN VII

CONSTRUCCIONES BSICAS: CONCEPTOS

7.1 Es posible iluminar nuestro escenario virtual?

Cuando se crea una escena virtual hay que considerar la colocacin de luces en un mundo para permitir obtener un mayor grado de realismo, pudiendo convertir una misma escena virtual en un lugar clido, en un lugar tenebroso y sombro, en un paisaje, poder darle efectos de la cada de los rayos del sol etc. A si como tambin hay que tomar en cuenta la ambientacin, que juega un importante papel a la hora de determinar que objetos visualizar el visitante con mayor claridad. Hay tres clases de fuentes de iluminacin, a cada una de las cuales se les asocia un nodo:

7.1.1. Vamos a definir la posicin exacta de la luz

El nodo pointlight es el nodo que define la posicin de una luz que ilumina por igual en todas direcciones.

Sintaxis:

PointLight{ color location radius attenuation on intensity ambientIntensity } color_RGB Eje_X Eje_Y Eje_Z valor_real coeficiente1 coeficiente2 coeficiente3 valor_lgico valor_real valor_real

Descripcin de los campos y argumentos: Color: Indica el color de luz. Location: Determina la posicin que va a ocupar el foco de luz dentro del escenario tridimensional. Radius: Limita la zona (en metros) que va a ser iluminada.

Attenuation: Almacena tres valores que se utilizan para calcular la atenuacin de la luz conforme nos alejamos del foco. El factor de atenuacin viene dado por la siguiente ecuacin: 1/(coef1+(coef2*radio)+ (coef3*radio*radio)) On: (TRUE) (FALSE). Intensity: Indica si los campos intensity y ambientIntensity estn activos o no

Establece la intensidad con la que la luz brilla, siendo el valor 1

la mxima intensidad y 0 la mnima. ambientIntensity: Determina la luminosidad del entorno del foco.

Ejemplo 7.7.1: Luz Azul Sin Atenuacin

PointLight { # luz azul sin atenuacion location 8 -3 -10 radius 15 ambientIntensity 0.5 color 0 0 1 intensity 1 attenuation 1 0 0 # sin atenuacin } Transform { translation 0 -5 -10 children Shape { appearance Appearance { material Material { ambientIntensity 1 diffuseColor 1 1 1 } } geometry Box { size 20 1 10 } } }

Figura 41. Enlace luz sin atenuacin

Ejemplo 7.1.2: Luz Azul Con Atenuacin

PointLight

# luz azul con atenuacion

location 8 -3 -10 radius 15 ambientIntensity 0.5 color 0 0 1 intensity 1 attenuation 1 0.5 0 # posee algo de atenuacion } Transform { translation 0 -5 -10 {

children Shape

appearance Appearance { material Material { ambientIntensity 1 diffuseColor 1 1 1 } } geometry Box { size 20 1 10 } } }

109

Sistema a Distancia

Figura 12. Enlace luz con atenuacin

7.1.2 Vamos a orientar nuestra luz ahora

El nodo DirectionalLight es el que hace posible definir una de luz orientable que ilumina con rayos paralelos a un determinado vector tridimensional. Permite desplazar el dibujo de un polgono 2D normalmente cerrado en una direccin determinada en el espacio.

Sintaxis: DirectionalLight{ color on intensity ambientIntensity direction } color_RGB valor_lgico valor_real valor_real Eje_X Eje_Y Eje_Z

Descripcin de los campos:

Tenemos el campo direction contiene el vector que determina la orientacin de la luz emitida dentro del espacio virtual. El resto de campos tienen la misma misin que en el nodo PointLight.

Ejemplo 7.1.2.1: DirectionalLight

Background {skyColor 1 1 1} DirectionalLight {

ambientIntensity 0.5 color 1 1 1 intensity 1 direction -0.5 -0.5 0 } Shape { appearance Appearance { material Material { ambientIntensity 1 diffuseColor 0 0 1 } } geometry Sphere } {radius 2}

Transform { translation children [ Shape { appearance Appearance { material Material { ambientIntensity 1 diffuseColor 1 1 0 } } geometry Cone {bottomRadius 2 height 3 } } ] } 2 5 -5

Figura 43. DirectionalLight

Ejemplo 7.1.2.2 Definicin de tres luces paralelas con tres colores diferentes sobre una esfera blanca DirectionalLight { # luz

roja ambientIntensity 0.5 color 1 00 intensit y1 direction -0.5 -0.5 -0.1 } DirectionalLight { # luz

azul ambientIntensity 0.5 color 0 01 intensit y1 direction 0 -0.5 -0.1 } DirectionalLight { # luz

roja ambientIntensity 0.5 color 1 00 intensit y1

direction 0 0.5 -0.1

} Shape { appearance Appearance { material Material { ambientIntensity 1 diffuseColor 1 1 1 } } geometry Sphere } {radius 2}

Figura 44. Tres luces paralelas con tres colores diferentes sobre una esfera blanca

7.1.3 Vamos a definir una fuente de luz tipo foco

Para definir una fuente de luz de tipo foco, se coloca en una posicin fija del espacio tridimensional e ilumina en forma de cono a lo largo de una direccin determinada. As mismo, la intensidad de la iluminacin desciende de forma exponencial segn diverge el rayo de luz desde esa direccin hacia los bordes del cono.Ahora el rgimen de descenso y el ngulo del cono se controlan mediante los campos beamWidth y cutOffAngle. Podemos lograrlo con el Nodo SpotLight.

Descripcin de los campos:

Campo: beamWidth almacena el radio (en radianes) de la base de un cono en donde la luz que emite es uniforme y tiene su mxima intensidad. Este cono

tendra como base este campo, como altura el campo radius (orientado segn el campo direction) y como vrtice el punto indicado en el campo location. Campo cutOffAngle almacena el radio (en radianes) de la base de un cono que contiene al cono mencionado arriba. Adems pose las mismas caractersticas a excepcin de su radio, el cual ha de ser mayor. Este radio determina el lugar donde la luminosidad es nula. Entre el radio almacenado en beamWidth y el almacenado en este campo, la intensidad de la luz va decreciendo conforme nos alejamos del primero de los conos.

Ejemplo 7.1.3.1 Definicin de un spot de luz sin atenuacin sobre una superficie blanca.

SpotLight { # Spot rojo location 0 0 -10 radius 3 ambientIntensity 0.5 color 1 0 0 intensity 1 attenuation 1 0 0 #esta combinacin no presenta atenuacin direction 0 -1 0 # punta hacia abajo cutOffAngle 1.0472 #60 grados beamWidth 0.785398 # 45 grados } Transform { translation -10 -4 -15 {appearance Appearance {

children Shape

material Material{ ambientIntensity 1 diffuseColor 1 1 1 }} geometry ElevationGrid { colorPerVertex FALSE

xDimension 20

zDimension 10 xSpacing 1 zSpacing 1 height [ 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 ] } } }

Figura 45. Spot de luz sin atenuacin sobre una superficie blanca.

7.2 Es posible crear puntos y lneas en el mundo virtual?

Hemos visto ya en las unidades anteriores como mediante la superposicin y unin de diferentes nodos geomtricos bsicos es posible construir objetos ms complejos. As mismo, si la nica manera de generar formas complejas fuese sta, entonces la construccin de mundos virtuales ser bastante ardua.

Entonces e s por ello por lo que aparecen una serie de nuevos nodos, los cuales, poseen la facilidad del diseo (al tener ms control sobre ellos y al ser ms flexibles), generan mundos VRML de una forma ms eficiente. Lo que se debe hacer a la hora de disear un objeto es describir su geometra

en dos pasos aislados:

Especificacin de las coordenadas: Aqu vamos el indicar mediante el nodo Coordinate la posicin de los puntos que se van a utilizar para construir el objeto. Es decir, estos puntos no son visibles en el escenario virtual.

Nodo Coordinate: Sintaxis: Coordinate { point [ Eje_x Eje_Y Eje_Z, Eje_x Eje_Y Eje_Z, ... Eje Eje_Y Eje_Z ] }

El campo point puede poseer varios puntos, cuyas coordenadas estn separadas por comas.

Coordinate { point [ 12.0 11.0 17.1, 20.5 13.8 5.3, 14.0 6.1 22.9 ] }

7.3 Vamos a crear una forma geomtrica:

Primero se define los puntos que forman el esqueleto del objeto, una vez que se haga ello se han de conectar. Existen tres maneras de unir estos puntos, cada una de las cuales est asociada a un nodo diferente:

Nodo PointSet

Nodo IndexedLineSet Nodo IndexedFaceSet

Los tres nodos poseen un campo denominado coord que acepta como valor un nodo Coordinate.

Nodo PointSet:

Este nodo representa un conjunto de puntos situados en las coordenadas indicadas dentro del sistema de coordenadas del nodo padre. PointSet { coord Coordinate { point [ 111 -1 -1 -1 1 -1 1 ]

Descripcin de campos:

Coord toma como valor un nodo de tipo Coordinate, el cual define los puntos que se desean representar.

El campo color sirve para definir el color de cada uno de los puntos. Este campo toma como valor un nodo Color, que a su vez contiene un campo de tipo color de nuevo. Este ltimo campo describe una lista de colores RGB, de forma que el primer color corresponde al primer punto descrito por el nodo

Coordinate del campo coord; el segundo color corresponde al segundo punto y as sucesivamente.

Ejemplo 7.3.1 PointSet:

PointSet { coord Coordinate { point [ 12.0 11.0 17.1, #1 punto

20.5 13.8 5.3, #2 punto 14.0 6.1 22.9 ] } color Color { color [ 1.0 0.0 0.0, # 1 punto rojo 0.0 1.0 1.0, # 2 punto verde 1.0 1.0 0.0 # 3 punto amarillo ] } #3 punto

Adems, si se incluyese este cdigo, tal como est, en un documento VRML, no podramos ver ninguno de estos puntos, ya que como se ha visto anteriormente, para crear un objeto visible se debe utilizar el nodo Shape.

El observador tiene tomar en cuenta que se ha prescindido del campo appearance del nodo Shape ya que no es necesario, pues los puntos no van a tener la apariencia por defecto, sino la que se determina en el campo color.

Ejemplo 7.3.2 PointSet: Ejemplo de un grupo de tres puntos con colores Shape { geometry PointSet { coord Coordinate { point [ 12.0 11.0 17.1, #1 punto 20.5 13.8 5.3, #2 punto 14.0 6.1 22.9 ] } color Color { color [ 1.0 0.0 0.0, # 1 punto rojo 0.0 1.0 1.0, # 2 punto verde 1.0 1.0 0.0 # 3 punto amarillo ] } } #3 punto

Nodo IndexedLineSet: Este nodo permite unir los diferentes puntos especificados en su campo coord mediante lneas poligonales. Sintaxis: IndexedLineSet{ coord Coordinate { point [ . . . ] } coordIndex [...] colorPerVertex color Color { color [ . . . ] } colorIndex [...] } valor_lgico

Descripcin de campos:

coord toma como valor un nodo de tipo Coordinate, el cual define los puntos que sirven como esqueleto de la figura.

coordIndex se utiliza para especificar entre qu puntos se han de trazar las lneas. Asimismo si desea una lnea puede ser trazada utilizando ms de dos puntos, de forma que se dibuja una lnea entre el primer y el segundo punto, otra entre el segundo y el tercer punto, y as sucesivamente.

Un ndice con valor -1 indica que ha finalizado la lnea actual y que comienza la siguiente. Para indicar el primer punto definido en el nodo Coordinate se utiliza el 0, para el segundo el 1 y as sucesivamente. El campo colorPerVertex indica como se han de aplicar los colores sobre las lneas:

Nodo IndexedFaceSet:

Permite unir los diferentes puntos especificados en su campo coord mediante caras poligonales.

Sintaxis: IndexedFaceSet{ coord Coordinate { point [ . . . ] } coordIndex [...] colorPerVertex color Color { color [ . . . ] } colorIndex [...] } valor_lgico

El campo coord toma como valor un nodo de tipo Coordinate, el cual define los puntos que sirven como esqueleto de la figura. Utiliza los ndices de su campo coorIndex para especificar las caras poligonales. Un ndice con valor -1 indica que ha finalizado la cara actual y comienza la siguiente. El campo colorPerVertex indica como se han de aplicar los colores: