Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
78 Sistema a Distancia
CUARTA UNIDAD
NODOS AVANZADOS
EXTRUIR, ILUMINACION
OBJETIVOS
• Enseñar 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
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
79 Sistema a Distancia
LECCIÓN VI
NODOS AVANZADOS: EXTRUIR, ILUMINACIÓN
6.1. ¿Qué entendemos por Extruir?
Definición 1: En VRML extruir, es obtener un objeto 3D, al desplazar el
dibujo de un polígono 2D normalmente cerrado (sección) en una dirección
determinada en el espacio (dirección).
Definición 2: Es obtener una figura 3D a partir de una figura 2D, teniendo una
dirección en el espacio.
6.2. ¿Cómo podemos extruir en VRML?
Para poder realizar una extrusión en VRML se tiene que utilizar el nodo
Extrusión. 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 polígono cerrado: la sección transversal o crossSection .
Esta área es, por tanto, plana. A través 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 sección transversal a lo
largo de la espina dorsal. A lo largo de este desplazamiento, la sección
transversal puede ser invariable, o bien se pueden ir modificando tanto su
escala (tamaño), como su orientación. Este nodo permite definir un objeto al
desplazar su sección por una trayectoria.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
80 Sistema a Distancia
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 sección transversal. Estos puntos están 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 están definido por tres coordenadas, como no podía ser menos,
puesto que la espina dorsal es un recorrido en el espacio tridimensional .
• solid , Es un campo tiene dos opciones: TRUE (la opción por defecto) con la
que se ven sólo un lado de las caras. Si colocamos el campo FALSE: se
verán ambos lados.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
81 Sistema a Distancia
Ejemplo 6.2.1
Ahora vamos a cambiar la dirección (espina). Se observa a continuación con
más detalle cómo se hará la definición de la sección 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.
La sección transversal es una superficie plana , definida en el el plano XZ. Por
tanto, se van a utilizar sólo dos coordenadas (x,z).
Para comprender mejor este concepto veamos un ejemplo: un cubo.
(Recuérdese que existe el nodo Box para conseguirlo directamente)
Figura 23. Cubo
Entonces lo que se debe definir la sección transversal, para ello se tiene que
señalar un polígono cerrado , es decir, se comienza desde un vértice
cualquiera (p. ej. 20,20), y se sigue el sentido de las agujas del reloj, el
siguiente será:
(-20,20), luego (-20,-20), a continuación (20,-20) y finalmente (20,20) de
nuevo , con lo que el polígono se ha cerrado .
X
Z
(20,-20) (-20,-20)
(20,20) (-20,20)
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
82 Sistema a Distancia
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 sección transversal deberá efectuar para crear le forma
extruida.
Lo que vamos a hacer que la sección transversal comience en el punto (0,-
20,0) y se mueva hasta el punto (0,20,0).
A continuación en las siguientes figuras se muestra la espina dorsal para el
cubo y el camino recorrido por la sección transversal a lo largo de ella (negro
mas remarcado):
Figura 24. Espina Dorsal
Z
(0,20,0)
(0,-20,0)
X
(0,-20,0)
(0, 20,0)
X
Z
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
83 Sistema a Distancia
Figura 25. Espina Dorsal(camino recorrido por la sección 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 Extrusión ) es decir que sea visible , lo que se debe
hacer es incluir el código 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
}
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
84 Sistema a Distancia
Figura 26. Cubo
En la figura puede observarse que se han añadido 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. También Cambiar el valor a
TRUE y vera la diferencia
6.3 ¿Cómo 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 sección
transversal inicial (en el ejemplo del cubo, la cara inferior).
endCap : En este campo si se establece como FALSE , no existirá la sección
transversal final (en el ejemplo del cubo, la cara superior).
El resultado al aplicar estos campos es:
Solo se obtiene, añadiendo estos dos campos al nodo Extrusión, al ejemplo
anterior:
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
86 Sistema a Distancia
Ejemplo 6.3.1
VRML V2.0 utf8
#Ejemplo de extrusión: 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
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
87 Sistema a Distancia
Existen otras maneras para obtener un objeto sin cerrar, se puede dejar
deliberadamente sin cerrar el polígono que determina la superficie transversal.
Por ejemplo de la sección transversal del cubo, si se comienza por el vértice
inferior izquierdo (-20,10), y siguiendo según 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.
x
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
88 Sistema a Distancia
Ejemplo 6.3.2
VRML V2.0 utf8
#Ejemplo de extrusión: 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
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
89 Sistema a Distancia
6.4 Vamos a complicar la espina dorsal
Se puede entender que después de revisar los ejemplos vistos anteriormente,
la espina dorsal siempre es perpendicular a la sección transversal y además
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 más 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 sección transversal. Se ha representado en el ejemplo a la espina
dorsal en negro remarcado y la sección transversal es la sección 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,
2 2
]
spine [
-10 0 0,
10 20 0
]
solid FALSE
}
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
90 Sistema a Distancia
Figura 29. Cubo inclinado en el plano
Figura 30. Cubo inclinado
Ejemplo 6.4.2 : Uve invertida: espina dorsal de tre s puntos.
Shape { appearance Appearance { material Material {} } geometry Extrusion { crossSection [ 2 2, -2 2, -2 -2, 2 -2, 2 2 ] spine [ -20 0 0, 0 20 0, 20 0 0 ] solid FALSE }
}
Y
X
Z
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
91 Sistema a Distancia
Figura 31. Uve invertida
Figura 32. Uve invertida.wrl
6.5 Vamos a complicar más: veamos si la espina dors al es un círculo
Tomando en cuenta construir una espina dorsal en forma de un círculo ,
entonces el cuerpo engendrado es una superficie de revolución. Entonces
Veamos un ejemplo: un dona definida por 8 puntos.
En el lado derecho podemos ver la imagen que representa la sección
transversal (círculo central pequeño) y que está situada, como debe ser, en
plano horizontal XZ. Como podemos darnos cuenta esta sección transversal es
un círculo de radio 5 y está representada por 8 puntos.
También podemos observar que está representada (en blanco) una espina
dorsal formada por otros ocho puntos que forman un círculo de radio 10, y que
Z
Y
X
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
92 Sistema a Distancia
también 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,
5 0
]
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 sección transversal.
X
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
93 Sistema a Distancia
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
también tenemos que repitir el último para cerrar la dona.
Figura 34. Dona.wrl
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
94 Sistema a Distancia
Ejemplo 6.5.1
Background {skyColor 1 1 1}
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,
5 0
]
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
]
solid FALSE
}
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
95 Sistema a Distancia
Es obvio que los ocho puntos que se han trazado para definir los dos círculos
(el de la sección transversal y el de la espina dorsal) no son suficientes, pues
más que círculos son octógonos. Se tiene que considerar que harían falta
muchos más puntos para conseguir una dona mas real.
6.6 Vamos a variar la escala de la sección transve rsal
Hasta el momento lo que hemos hecho hasta ahora, en todos los ejemplos, la
sección transversal permanecía inalterable en su forma y tamaño a lo largo de
la espina dorsal.
Hay un el campo que es el scale que permite modificar la escala de la sección
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 sección
transversal sea la mitad, con lo que lograríamos una figura resultante que sería
una estructura de un prisma. Solo hay que añadir el campo scale de la
siguiente forma:
scale [
1 1,
0.5 0.5
]
Los valores del campo scale hay par de parámetros (que varían de 0 a 1) y
que son la variación 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 podía haber
modificado sólo uno, pasando en vez de a un cuadrado menor, a un rectángulo.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
96 Sistema a Distancia
Ejemplo 6.6.1
Background {skyColor 1 1 1}
#Ejemplo de extrusión: 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
}
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
97 Sistema a Distancia
Figura 35. Cubo escalado.wrl
6.7 Vamos a variar la orientación de la sección tr ansversal
Lo que se ha hecho en los todos los casos vistos es considerar que la sección
transversal se traslade paralelamente a sí misma (variando o no su tamaño).
Hay un campo orientation que hace que gire la sección 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 sección transversal gire 45º
en el segundo punto de la espina dorsal, con lo que tendremos un cubo
"retorcido". Para lograrlo, vamos a añadir 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
parámetros. Entonces logramos que los tres primeros indiquen el eje alrededor
del cual se va a girar la sección transversal. Finalmente el cuarto parámetro
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 rotación alrededor del eje Y (parámetros 0 1
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
98 Sistema a Distancia
0) sea nula (cuarto parámetro 0). En el caso del segundo punto de la espina
dorsal, se quiere que la rotación alrededor del eje Y (parámetros 0 1 0) sea de
45º (cuarto parámetro, 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
]
}
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
99 Sistema a Distancia
Figura 36. Cubo girado.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 [
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,
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
100 Sistema a Distancia
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 práctico mostramos un espiral de sección
transversal cuadrada.
Hay que considerar las dimensiones de la sección transversal deben ser 2x2.
En tonces , los cuatro puntos que definen a la sección transversal en el plano
XZ serán (1,1), (-1,1), (-1,-1) y (1,-1).
Ahora la espina dorsal va a estar definida por 17 puntos.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
101 Sistema a Distancia
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,
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
102 Sistema a Distancia
-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 través de su dirección 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 páginas 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 llevaría a otro objeto que esta en otro fichero a través del URL.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
103 Sistema a Distancia
El nodo Anchor posee un campo denominado description en el que mediante
una cadena de texto se describe brevemente el objeto.
Sintaxis:
Anchor{
url"dirección_URL"
description "descripción_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 página de la UIGV
Group {
children [
# escalones
DEF escalon Shape {
appearance Appearance {
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
104 Sistema a Distancia
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
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
105 Sistema a Distancia
}
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
}
}
]
}
]
}
]
}
]
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
106 Sistema a Distancia
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 automáticamente nos llevara al otro fichero (cilindro), considerando
que ambos fichero deberán estar en una misma carpeta.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
107 Sistema a Distancia
LECCIÓN VII
CONSTRUCCIONES BÁSICAS: CONCEPTOS
7.1 ¿Es posible iluminar nuestro escenario virtua l?
Cuando se crea una escena virtual hay que considerar la colocación de luces
en un mundo para permitir obtener un mayor grado de realismo, pudiendo
convertir una misma escena virtual en un lugar cálido, en un lugar tenebroso y
sombrío, en un paisaje, poder darle efectos de la caída de los rayos del sol etc.
A si como también hay que tomar en cuenta la ambientación, que juega un
importante papel a la hora de determinar que objetos visualizará el visitante con
mayor claridad.
Hay tres clases de fuentes de iluminación, a cada una de las cuales se les
asocia un nodo:
7.1.1. Vamos a definir la posición exacta de la luz
El nodo pointlight es el nodo que define la posición de una luz que ilumina por
igual en todas direcciones.
Sintaxis:
PointLight{
color color_RGB
location Eje_X Eje_Y Eje_Z
radius valor_real
attenuation coeficiente1 coeficiente2 coeficiente3
on valor_lógico
intensity valor_real
ambientIntensity valor_real
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
108 Sistema a Distancia
Descripción de los campos y argumentos:
• Color: Indica el color de luz.
• Location: Determina la posición 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
atenuación de la luz conforme nos alejamos del foco. El factor de
atenuación viene dado por la siguiente ecuación:
1/(coef1+(coef2*radio)+ (coef3*radio*radio))
• On: Indica si los campos intensity y ambientIntensity están activos
(TRUE) o no (FALSE).
• Intensity: Establece la intensidad con la que la luz brilla, siendo el valor 1
la máxima intensidad y 0 la mínima.
• ambientIntensity: Determina la luminosidad del entorno del foco.
Ejemplo 7.7.1: Luz Azul Sin Atenuación
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 } }
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
109 Sistema a Distancia
Figura 41. Enlace luz sin atenuación
Ejemplo 7.1.2: Luz Azul Con Atenuación
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 }
}
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
110 Sistema a Distancia
Figura 12. Enlace luz con atenuación
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 polígono 2D normalmente cerrado en una
dirección determinada en el espacio.
Sintaxis:
DirectionalLight{
color color_RGB
on valor_lógico
intensity valor_real
ambientIntensity valor_real
direction Eje_X Eje_Y Eje_Z
}
Descripción de los campos:
Tenemos el campo direction contiene el vector que determina la orientación de
la luz emitida dentro del espacio virtual. El resto de campos tienen la misma
misión que en el nodo PointLight.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
111 Sistema a Distancia
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 2 5 -5
children [
Shape {
appearance Appearance {
material Material {
ambientIntensity 1
diffuseColor 1 1 0
}
}
geometry Cone {bottomRadius 2 height 3 }
}
]
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
112 Sistema a Distancia
Figura 43. DirectionalLight
Ejemplo 7.1.2.2
Definición de tres luces paralelas con tres colores diferentes sobre una esfera
blanca
DirectionalLight { # luz roja
ambientIntensity 0.5
color 1 0 0
intensity 1
direction -0.5 -0.5 -0.1
}
DirectionalLight { # luz azul
ambientIntensity 0.5
color 0 0 1
intensity 1
direction 0 -0.5 -0.1
}
DirectionalLight { # luz roja
ambientIntensity 0.5
color 1 0 0
intensity 1
direction 0 0.5 -0.1
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
113 Sistema a Distancia
}
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 posición fija del
espacio tridimensional e ilumina en forma de cono a lo largo de una dirección
determinada. Así mismo, la intensidad de la iluminación desciende de forma
exponencial según diverge el rayo de luz desde esa dirección hacia los bordes
del cono.Ahora el régimen de descenso y el ángulo del cono se controlan
mediante los campos beamWidth y cutOffAngle. Podemos lograrlo con el
Nodo SpotLight.
Descripción 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 máxima intensidad. Este cono
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
114 Sistema a Distancia
tendría como base este campo, como altura el campo radius (orientado según
el campo direction) y como vértice 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. Además pose las mismas características a
excepción 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
Definición de un spot de luz sin atenuación sobre u na 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 combinación no presenta atenuación
direction 0 -1 0 # punta hacia abajo
cutOffAngle 1.0472 #60 grados
beamWidth 0.785398 # 45 grados
}
Transform {
translation -10 -4 -15
children Shape {appearance Appearance {
material Material{
ambientIntensity 1
diffuseColor 1 1 1
}}
geometry ElevationGrid {
colorPerVertex FALSE
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
115 Sistema a Distancia
xDimension 20
zDimension 10
xSpacing 1
zSpacing 1
height [
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
]
}
}
}
Figura 45. Spot de luz sin atenuación sobre una superficie blanca.
7.2 ¿Es posible crear puntos y líneas en el mundo v irtual?
Hemos visto ya en las unidades anteriores como mediante la superposición y
unión de diferentes nodos geométricos básicos es posible construir objetos
más complejos. Así mismo, si la única manera de generar formas complejas
fuese ésta, entonces la construcción de mundos virtuales será bastante ardua.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
116 Sistema a Distancia
Entonces e s por ello por lo que aparecen una serie de nuevos nodos, los
cuales, poseen la facilidad del diseño (al tener más control sobre ellos y al ser
más flexibles), generan mundos VRML de una forma más eficiente.
Lo que se debe hacer a la hora de diseñar un objeto es describir su geometría
en dos pasos aislados:
Especificación de las coordenadas:
Aquí vamos el indicar mediante el nodo Coordinate la posición 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 están
separadas por comas.
Coordinate {
point [
12.0 11.0 17.1,
20.5 13.8 5.3,
14.0 6.1 22.9
]
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
117 Sistema a Distancia
7.3 Vamos a crear una forma geométrica:
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 [
1 1 1
-1 -1 -1
1 -1 1
]
Descripción 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
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
118 Sistema a Distancia
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 #3º punto
]
}
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
]
}
Además, si se incluyese este código, tal como está, en un documento VRML,
no podríamos 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.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
119 Sistema a Distancia
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 #3º punto
]
}
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
]
}
}
Nodo IndexedLineSet:
Este nodo permite unir los diferentes puntos especificados en su campo coord
mediante líneas poligonales.
Sintaxis:
IndexedLineSet{
coord Coordinate {
point [ . . . ]
}
coordIndex [...]
colorPerVertex valor_lógico
color Color {
color [ . . . ]
}
colorIndex [...]
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
120 Sistema a Distancia
Descripción 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
líneas. Asimismo si desea una línea puede ser trazada utilizando más de dos
puntos, de forma que se dibuja una línea 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 línea 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 líneas:
Nodo IndexedFaceSet:
Permite unir los diferentes puntos especificados en su campo coord mediante
caras poligonales.
Sintaxis:
IndexedFaceSet{
coord Coordinate {
point [ . . . ]
}
coordIndex [...]
colorPerVertex valor_lógico
color Color {
color [ . . . ]
}
colorIndex [...]
}
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
121 Sistema a Distancia
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:
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
122 Sistema a Distancia
EJERCICIOS PROPUESTOS
Como ejercicio práctico se propone crear una espiral de sección transversal
circular.
Las dimensiones de la sección transversal deben ser 2x2. Por tanto, los
cuatro puntos que definen a la sección transversal en el plano XZ serán (1,1), (-
1,1), (-1,-1) y (1,-1).
La espina dorsal va a estar definida por 17 puntos, que se pueden obtener en
el
Ejemplo anterior del espiral cuadrado, hay que tomar en cuenta los cantidad de
puntos que se le tiene que añadir para logre ser circular el espiral
Guardar el fichero resultante con el nombre de espiral1.wrl
RESUMEN
En la presente unidad se ha visto el desarrollo de objetos más complejos, lo
que implica el uso del nodo extrusión que nos ha permitido quitarle caras a un
objeto, dando un aspecto de huecos, de torcidos y altorrelieve acercándonos
más a la realidad.
Por ejemplo, hicimos una dona en la que se aprendió a determinar la cantidad
de puntos que permite darle forma.
Así como también hemos aprendido a diferenciar cómo se aplica una
determinada luz a la escena, dependiendo de donde se origina, de un punto o
de una determinada dirección, lo que nos enseña darle efectos de los rayos de
sol o mejor aún darle la apariencia de una foco de luz que emite luces de un
punto en especial, lo que nos permitirá más adelante crear lámparas o
cualquier objeto que emita luz. Finalmente, no solo se puede armar escenas
con objetos sino también con puntos y líneas.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
123 Sistema a Distancia
AUTOEVALUACIÓN
1. Permite desplazar el dibujo de un polígono 2D no rmalmente cerrado en
una dirección determinada en el espacio.
a. Directionlight
b. Poincet
c. Extrusion
d. crossection
e. spine
2. Es un argumento que está formado por una serie d e puntos que
definen.
a. Espina dorsal
b. Sección Transversal
c. Spine
d. Crossection
e. a y b
3. Determina si la forma extruida está abierta o ce rrada en los extremos.
a. Extrusion-Crossection-Spine
b. Extrusion- beginCap- endCap
c. EndCap
d. BeginCap
e. EndCap-Extrusion
4. Hay un campo que hace que gire la sección transv ersal en cada punto
de la espina dorsal un ángulo determinado.
a. Orientation -Type
b. Orientation-scale
c. Orientation
d. Anchor
e. Type
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
124 Sistema a Distancia
5. Define la posición de una luz que ilumina por ig ual en todas direcciones.
a. Pointlight
b. DirectionalLight
c. Location
d. Spotlight
e. ambientIntensity
CLAVES:
1A. 2D. 3B. 4C. 5A.
GLOSARIO
• Solid : Campo que tiene dos opciones: TRUE (la opción por defecto) con
la que se ven sólo un lado de las caras. FALSE: se verán ambos lados.
• beginCap : Campo que si se establece como FALSE , no existirá la
sección transversal inicial (en el ejemplo del cubo, la cara inferior).
• endCap : Campo que si se establece como FALSE , no existirá la sección
transversal final (en el ejemplo del cubo, la cara superior).
• PointLight: Define la posición de una luz que ilumina por igual en todas
direcciones.
• Ambientintensity: Determina la luminosidad del entorno del foco.
• Attenuation: Almacena tres valores que se utilizan para calcular la
atenuación de la luz conforme nos alejamos del foco.
• SpotLight: Define una fuente de luz de tipo foco, que se coloca en una
posición fija del espacio tridimensional e ilumina en forma de cono a lo
largo de una dirección determinada
• Coordinate: El cual define los puntos que sirven como esqueleto de la
figura.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
125 Sistema a Distancia
LECTURA
VRLM Mundos Virtuales en Internet
El paradigma de Internet permite adentrarse en uno de los puntos de discusión
que más se acercan a la ciencia-ficción a través de los mundos virtuales .
Navegar e interactuar a través de una red que no conoce límites .No hay que
estar muy familiarizado con las nuevas tecnologías para haber oído hablar de
la Realidad Virtual (VR: Virtual Reality ) . De hecho, sólo tiene que darse una
vuelta por una sala de juegos recreativos de un centro comercial para encontrar
una máquina con un casco algo extraño que, tras introducir las monedas
correspondientes, le permitirá adentrarse en un nuevo mundo . Quizá ya ha
experimentado la realidad virtual a través de estas máquinas, aunque lo que
realmente importa son las nuevas posibilidades que ofrece esta tecnología en
relación con la vida cotidiana. Obviamente desde casa y conectado a la Red, la
experiencia no va a ser la misma que en la máquina recreativa, pero sí más
enriquecedora.
En el mundo de la informática y más aún en el campo tecnológico, todo avanza
demasiado rápido . En el caso de VRML, el hardware ha mejorado tanto que
los programas desarrollados no utilizan todas las posibilidades que ofrecen los
nuevos periféricos . Ahora podrá disfrutar desde el hogar de un “nuevo mundo”
con un ordenador a 200 MHz, mucha memoria RAM y una aceleradora 3-D .
Aunque esto no quiera decir que con un Pentium/100, o Mac equivalente, no se
pueda andar por un espacio virtual . Los requisitos indispensables son disponer
de una cantidad generosa de RAM y una aceleradora 2D/3D . Lógicamente,
para navegar en Internet por los mundos virtuales, deberá añadir el navegador
preferido, un módulo de mundos virtuales como Cosmo Player ( otro estándar
de facto creado por Silicom Graphics ) y agradecer el esfuerzo de muchos
individuos que han hecho posible un estándar para la creación de mundos
virtuales en Internet. Un pilar que ha derivado en el lenguaje VRML ( Virtual
Reality Model Language, Modelo de Lenguaje para Realidad Virtual ) ya en su
versión 2.0.
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
126 Sistema a Distancia
Conceptos básicos
Los archivos de VRML son archivos de texto interpretados por el módulo de
realidad virtual que se tenga instalado en el navegador . Los archivos VRML
contienen nodos que describen formas geométricas y sus propiedades (
aspecto, colores, luces, animaciones y otras ) .
Las primitivas son formas geométricas básicas y tridimensionales que sirven
para construir cajas, conos, cilindros y esferas. Todas ellas deben ir asociadas
al nodo que indica la construcción de formas ( shape ) .
Cada uno de los nodos de primitivas básicas tiene sus propias características,
dadas por su estructura geométrica ( altura, anchura, radio ) . Así, partiendo de
la primitiva box (caja ) se puede construir un cubo o un rectángulo perfecto; y a
partir de la primitiva Cylinder ( cilindro ) se puede obtener un bonito cilindro, un
disco, o una tubería ( simplemente quitando la parte superior e inferior ) .
Las formas básicas se pueden agrupar para formar estructuras más complejas
. De esta manera surgen los conceptos de grupo ( group) y los hijos ( children )
. Los hijos conforman una estructura compleja, el grupo, de tal manera que
pueda modificarse su posición, tamaño y otros atributos, como si se tratara de
un único objeto.
Otra de las formas consideradas como básicas son los textos ( text ) . En ellos
se definen las familias ( arial, courier ) , los estilos ( cursiva, negrita ) ,
espaciados, justificación, orientación, longitud del texto, etc .
Formas y Texturas
Obtener formas complejas como caras o cuerpos es una tarea imposible
cuando se trata de combinar primitivas . Esta es la razón por la que en VRML
se dispone además de puntos (PointSet) , líneas (IndexedLineSet) y caras
Computación Gráfica - Unidad IV Jessica Delgado F. / Pedro Carpio F.
127 Sistema a Distancia
(IndexedFaceSet). Las caras (faces) requieren una mención especial, ya que
son formas planas (cuadrados, círculos, etc.) y que, por poner ejemplos
sencillos, les falta esa tercera dimensión para convertirse en un cubo o una
esfera . Mediante la inclusión de múltiples caras en el nodo (IndexedFaceSet)
se puede recrear un objeto lo más realista posible . Las caras son áreas
poligonales cerradas, que el navegador oscurece por omisión para ofrecer una
apariencia de solidez.
También es posible mejorar el aspecto de una cara y, por tanto, ofrecer una
mayor sensación de realidad mediante el empleo de técnicas de sombreado y
construcción de caras cóncavas o convexas. Con la técnica del sombreado se
elimina la necesidad de dibujar muchas líneas, dejando que las sombras
suavicen las formas y aportando continuidad. De esta manera se obtienen unos
mejores resultados estéticos, un archivo de menor tamaño y, en consecuencia,
un menor tiempo de redibujado.
Tanto los puntos, como las líneas y las caras, se construyen respecto a un eje
imaginario que representa las tres coordenadas espaciales: ancho, alto y
profundidad (x,y,z) y dentro de un centro imaginario (0,0,0).
http://www.idg.es/iworld/impart.asp?id=60699
BIBLIOGRAFÍA
• http://wwwdi.ujaen.es/~rsegura/igai/web3d/web3d/docs/apend-c.html