Computación Gráfica -Unidad IV

50
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

Transcript of Computación Gráfica -Unidad IV

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.

85 Sistema a Distancia

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