Você está na página 1de 25

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

QUINTA UNIDAD

EVENTOS
RUTAS, INTERPOLADORES, SENSORES
OBJETIVOS

Describir la forma de envi de mensajes a los objetos

Describir la definicin de los conceptos matemticos que van a permitir


interpolar los tiempos.

Explicar la forma como se asigna el tiempo para cada accin o


desarrollado por los objetos.

Describir los conceptos de los diferentes sensores

Lograr que el alumno estn en la capacidad de construir un mundo


virtual complejo y dinmico

128

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

LECCIN VIII

RUTAS, INTERPOLADORES, SENSORES

8.1 Cmo podemos enviarle un mensaje a un objeto?

Hasta el momento se ha visto la creacin de objetos estticos, ahora


aprenderemos a darle movimiento, es decir lo volveremos dinmicos y cmo
lo hacemos? a travs de rdenes que son enviadas por un mensaje ms
conocido como un evento que puede ser enviado por un objeto y capturado por
otro. Adems, puede haber eventos indicando que un nodo ha cambiado de
posicin, o que ha pasado de un estado inactivo a uno activo, o que ha pasado
una fraccin de tiempo, etc.

Si bien es cierto, en teora, los browsers tienen un reloj interno que va


marcando en tiempo real, es decir el paso del tiempo. Cada unos de estos
eventos se van produciendo y recibiendo a cada intervalo de tiempo del reloj
(en teora de forma continua), hay que tener en cuenta que en la prctica,
normalmente podemos asumir que los browsers marcan el paso del tiempo a
cada frame (cuadro o imagen) generado grficamente. Entonces, cada evento
tiene una especie de sello de tiempo, del instante en que se ha generado
(emitido, enviado).

Es cierto que un evento es emitido por un campo llamado eventOut y debe ser
recibido por un campo llamado eventIn. Pero tambin puede ocurrir que un
evento sea emitido o recibido por un exposedField que son campos de entrada
y salida.

Entonces, es de suponer, que tanto el evento que enva como el evento que
recibe, tienen que ser del mismo tipo. Por lo tanto, un evento enviado por un
eventOut de tipo SFInt32 (entero 32 bits univaluado) slo puede ser recibido
por un eventIn (o exposedField) de tipo SFInt32.

129

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

En la figura siguiente, mostramos el diagrama de flujo del sistema que hemos


descrito.

Ahora, es importante entender qu puede ocurrir que un objeto (nodo) reciba


un evento el cual le fuerce a enviar uno l mismo. Si sucediera ello se genera lo
que se conoce por cascada de eventos. En una cascada de eventos, todos los
eventos implicados tienen el mismo sello de tiempo.

Entonces Pero qu sucede si se genera un "loop" (lazo o bucle)? Lo que


sucedera es que nunca se acabase de enviar eventos y en consecuencia no
avanzase el tiempo. En VRML no puede ocurrir este problema, ya que no se
permite que un nodo reciba en un eventIn un evento proveniente de un mismo
sitio con el mismo sello temporal. Si se detectase un loop, entonces el VRML
se encarga de convertir el sello temporal del instante ti al ti+1 y retardar su
emisin.

En VRML se permite que un eventOut pueda ser encaminado hacia mltiples


eventIns, y lo que se conoce como Fan Out ("abanico de apertura"). Por el
contario no es legal encaminar mltiples eventOuts a un solo eventIn, donde
esto es conocido como Fan In ("abanico de entrada"). Si se da un Fan In, se
pueden obtener resultados no esperados e indefinidos.

130

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

8.2 Pero cmo podemos decir que un cierto eventOut debe estar
enlazado a un cierto eventIn?
En VRML se proporciona un mecanismo llamado rutas, el cual se determina a
travs del comando ROUTE. (Debe resaltarse que no es un nodo, si no tan
solo un comando que aporta un mecanismo).

Para entenderlo mejor, por ejemplo, imaginemos que, de alguna forma, el color
de un material cambia y queremos que el evento (que es de tipo SFColor)
reciba una luz direccional, modificando as el color de la luz. Entonces los
nodos y la ruta en cuestin seran:

Ejemplo 8.2.1 ROUTE para modificar el color de una luz direccional en


funcin del cambio del color de un material.
Shape {
geometry Sphere { radius 2 }
appearance Appearance {
material DEF MaterialEsfera Material { diffuseColor 1 0 0 }
}
}
DEF Luz DirectionalLight {
color 1 1 1
direction 0.5 0.5 0
intensity 1
}
ROUTE MaterialEsfera.diffuseColor TO Luz.color

Si vemos en el ejemplo tenemos que asignar un nombre a los nodos que


queremos enlazar para poderlos referenciar. Entonces, una vez que se defina
nombres, podemos establecer el enlace con el ROUTE.

Este mecanismo ROUTE nos muestra que los eventos emitidos por el
exposedField diffuseColor del Material MaterialEsfera han de ser encaminados
a (TO) el exposedField color del DirectionalLight Luz.

131

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Ahora, como se puede ver la forma de decir que eventIn, eventOut o


exposedField es el que nos interesa tratar de un cierto modo, tiene que ser a
travs de un punto (.) que une el nombre del nodo al del campo (field)
seleccionado.

NOTA: El observador tiene que entender que este ejemplo, tal y como est, no
tendra ningn efecto, ya que no hay nada que pueda hacer que el material
enve un evento a la luz.

8.3 Cmo se controla el tiempo para poder mover o cambiar detalles en


una escena?

Sensor de Tiempo (timesensor) es travs del mismo que contamos con un reloj
que se puede utilizar a nuestro gusto para poder medir el paso del tiempo
como motor para mover objetos de lugar, cambiar color a las cosas, variar
orientaciones, etc. que si queremos que un objeto gire alrededor de uno de sus
ejes al ir pasando el tiempo. Entonces tenemos un reloj que en cada "tic-tac"
podemos definir que nos ayude a variar en algo nuestro entorno con cierta
frecuencia un TimeSensor se basa en el reloj.
TimeSensor que hacen diferentes algunas cosas:

Ejemplo 5.3.1. Se pone en marcha y hace un ciclo de 5 segundos:


DEF Infinit TimeSensor{
startTime 0
cycleInterval 5
}

Este sensor del tiempo (TimeSensor) se pone en marcha al en cargarse el


entorno en el visor y se detiene al cabo de 5 segundos. TimeSensor
constantemente da como evento de salida (eventos), la fraccin de ciclo que
lleva transcurrido. Entonces el TimeSensor tardar 5 segundos al pasar de 0.0
a 1.0 el valor de fraction_changed. Al haber pasado los 5 segundos y, por
tanto, haber llegado a 1.0 el valor de fraction_changed, el TimeSensor dejar
de modificar el fraction_changed y por tanto se detendr.
132

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Ejemplo 5.3.2 Se inicia y va realizando ciclos de 5 segundos sin parar.


Entonces al haber transcurrido los 5 segundos y haber llegado a 1.0 el valor de
fraction_changed, como hemos dicho que haga bucles con el loop TRUE,
volver a comenzar otro ciclo. Lo ir haciendo sin detenerse hasta que
cargamos otra cosa en el visor.

DEF Infinit TimeSensor{


startTime 0
cycleInterval 5
loop TRUE
}

8.4 Cmo aprovechamos el tiempo que nos da el Time sensor?

El tiempo que tenemos se aprovecha a travs del la interpolacin lineal pero


hay que entender que es un concepto matemtico que permite definir dos
puntos (en cualquier dimensin) y calcular un punto intermedio sobre la recta
que los une, a partir de decir qu tanto por ciento del recorrido entre los dos
puntos queremos hacer.
Hayvarios tipos de interpoladores, entre los ms utilizados:

Interpolar colores.

OrientationInterpolator : Interpola ngulos de rotacin


PositionInterpolator : Interpola posiciones de objetos
Para ver cmo funciona, empezaremos por el interpolador de colores. Lo que
se quiere hacer es que un objeto vaya cambiando de color de forma gradual,
empezando por el rojo y terminando en el verde. Tenemos que segn la forma
de definir colores en RGB (valores entre 0 y 1), el rojo es el (1 0 0) y el verde es
(0 1 0).

Ejemplo 8.4.1 Interpolador de colores:


DEF Rojo_a_Verde ColorInterpolator {
133

Sistema a Distancia

Computacin Grfica - Unidad V

key

0,

Jessica Delgado F. / Pedro Carpio F.

1]

keyValue [ 1 0 0, 0 1 0 ]
}

Al interpretar esta definicin, estamos diciendo que queremos que cuando el


interpolador empiece (0% del trayecto, key = 0) nos d color rojo, KeyValue =
(1 0 0) y cuando acabe (100% del trayecto, key = 1) nos d color verde,
KeyValue = (0 1 0).

El interpolador lo que tendr que ir haciendo es ir cambiando el valor de key


poquito a poco y en funcin de este valor ir calculando el valor del color de
KeyValue. Por ejemplo, cuando key = 0.5, el valor de KeyValue = (0.5 0.5 0)
que es una especie de amarillo, no slo se puede dar un tramo de
interpolacin. Podramos decirle queremos que empiece por rojo, que luego
pase por verde, tras el azul y finalmente vuelva al rojo.

Ejemplo 8.4.2 Ahora tenemos tres tramos de cambio de color y por lo


tanto definimos nuestro interpolador de colores de la siguiente manera:
DEF Arcoiris ColorInterpolator {
key

0, 0.3, 0.6,

1]

keyValue [ 1 0 0, 0 1 0, 0 0 1, 1 0 0]
}

Estamos diciendo que queremos que cuando el interpolador empiece (0% del
trayecto, key = 0) nos d color rojo, KeyValue = (1 0 0). Cuando est a key =
0.3 (aproximadamente un tercio del trayecto) nos d color verde, KeyValue =
(0 1 0). Cuando est a key = 0.6 (aprox. dos tercios) nos d color azul,
KeyValue = (0 0 1) y cuando acabe (100% del trayecto, key = 1) nos d color
rojo de nuevo, KeyValue = (1 0 0). Definido un material que aplicamos a un
objeto, se puede hacer que el interpolador vaya modificando el diffuseColor,
de este material y por tanto nos vaya cambiando el color del objeto al que la
aplicamos De alguna manera tenemos que conectar el cambio de color del
interpolador al color del material.

134

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Qu es lo que hace que el interpolador vaya pasando del valor inicial al final,
poco a poco?. Pues, el paso del tiempo del TimeSensor que ya se ha visto.
De alguna manera, debemos conectar el cambio de tiempo del TimeSensor al
cambio de tanto por uno del interpolador (es decir, el key).

Entonces, la herramienta que necesitamos es la de conectar que la conocida


como "rutas".

Ejemplo 8.4.3. Cubo cambiando de color


DEF motorColor TimeSensor (
loop TRUE
cycleInterval 5
)

DEF Arc_Sant_Marti ColorInterpolator (


key [0, 0.3, 0.6, 1]
KeyValue [1 0 0, 0 1 0, 0 0 1, 1 0 0]
)

DEF CubColorCanviant Shape (


geometry Box (size 2 2 2)
appearance

Appearance

(material

DEF

materialColorCanviant

Material ())
)

ROUTE motorColor.fraction_changed TO Arc_Sant_Marti.set_fraction


ROUTE Arc_Sant_Marti.value_changed TO materialColorCanviant.diffuseColor

Primero se defini un TimeSensor que le decimos motorColor. Este


TimeSensor arrancar en cargar el entorno e ir haciendo ciclos de 5
segundos sin detenerse nunca.

Luego definimos un ColorInterpolator de tres tramos (rojo-verde,


verde-azul, Balu-rojo) de la misma longitud, aproximadamente un tercio
cada uno.
135

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Finalmente, definimos nuestro objeto, el CubColorCanviant, que como


su nombre indica, es un cubo que va cambiando de color. Este objeto se
define como una geometra que es una caja (Box) que forma un cubo, y
por una apariencia con un material. Ahora el material tiene asignado un
nombre, materialColorCanviant pero no tiene ningn parmetro
definido: Material (). Esto es para que el campo diffuseColor ser
tratado como evento de entrada (eventos).

Para enlazar todo usamos las rutas:


 La primera ruta define que el paso del tiempo del TimeSensor
vaya haciendo avanzar el trayecto recorrido por el interpolador de
color.

Esto

se

consigue

enlazando

el

evento

de

salida

fraction_changed del TimeSensor motorColor con el evento de


entrada set_fraction del ColorInterpolator. Con este enlace cada
"tic-tac" del TimeSensor hace increment en un poco el avance del
ColorInterpolator.
 La segunda ruta enlaza el nuevo color que da el ColorInterpolator
despus de haber avanzado (debido a la accin del TimeSensor)
con el color del objeto. Esto se logra enlazando el eventos
value_changed del ColorInterpolator con el evento diffuseColor
del material materialColorCanviant del cubo que hemos definido.

De la misma forma que hemos enlazado un TimeSensor un


ColorInterpolator, lo podemos hacer a cualquier otro interpolador.

136

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

8.5. Cmo hacemos un seguimiento de los movimientos en una zona de


la escena?

En VRML se usa para realizar estos movimientos, el sensor de proximidad es


una herramienta muy interesante que puede hacer un seguimiento de los
movimientos del observador en una zona concreta del entorno. Se le define
como el node ProximitySensor nos permite definir una zona en forma de caja
centrada en una cierta posicin del espacio, la cual detecte si el observador
est dentro o fuera, en que instante entra o sale, etc.
Ahora veremos un ejemplo donde un TimeSensor se enciende o se apaga en
funcin de si el observador est dentro o fuera de una zona cbica del espacio.
Para observar cmo se enciende y se apaga el TimeSensor, enlazaremos
nuestro ejemplo del Cubo Cambiante de Color del mdulo anterior a un
ProximitySensor que definiremos.

Ejemplo 8.5.1 Sensor de proximidad enciende y apaga el cambio de color


del cubo.
DEF motorColor TimeSensor{
loop TRUE
cycleInterval 5
}
DEF Arcoiris ColorInterpolator {
key
[ 0, 0.3, 0.6,

1]

keyValue [ 1 0 0, 0 1 0, 0 0 1, 1 0 0]
}
DEF CuboColorCambiante Shape {
geometry Box { size 2 2 2 }
appearance Appearance { material DEF materialColorCambiante
Material {} }
}
DEF ZonaActiva ProximitySensor {
center 0 0 0
size 8 8 8
}
Los elementos nuevos (respecto al ejemplo del mdulo anterior) son el sensor

137

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Encontramos elementos nuevos (respecto al ejemplo del mdulo anterior) son


el sensor de proximidad ZonaActiva que define una zona de 8x8x8 unidades
centrada en el origen (0,0,0), y el ltimo ROUTE que conecta el eventOut
isActive del sensor de proximidad con el exposedField enabled del sensor de
tiempo.
Todo esto detecta si el observador est fuera o dentro de la zona comprendida
entre los planos X = 4 y X = -4, Y = 4 y Y = -4 y Z = 4 y Z = -4. Si el observador
est fuera, el sensor de proximidad emite un evento de isActive = FALSE y por
lo tanto el ROUTE lo canaliza hacia desactivar el sensor de tiempo a travs del
exposedField enabled (donde enabled significa activado en ingls).

Entonces, decimos si el observador est dentro, el sensor de proximidad emite


un evento de isActive = TRUE y por lo tanto el ROUTE lo canaliza hacia activar
el sensor de tiempo. De tal manera, el cambio de color queda congelado
mientras el observador est fuera de la zona y vuelve a variar cuando el
observador entra.

8.6 Cmo detectamos si realmente se apunta al objeto?

En VRML se define un nodo llamado TouchSensor (Sensor del tacto). Lo que


este sensor hace en realidad es permitir detectar cuando el observador apunta
a un objeto con el cursor y cuando oprime el botn del ratn. Por lo tanto,
permite definir "botones 3D".

Entonces veremos cmo funciona, modificaremos el ejemplo anterior y ahora


el cambio de color del cubo comenzar cuando se de "clic" sobre el cilindro rojo
en primer plano.

138

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Ejemplo 8.6.1 Sensor de tacto enciende el cambio de color del cubo.


DEF motorColor TimeSensor{
loop TRUE
cycleInterval 5
enabled FALSE
}
DEF Arcoiris ColorInterpolator {
key

0, 0.3, 0.6,

1]

keyValue [ 1 0 0, 0 1 0, 0 0 1, 1 0 0]
}
DEF CuboColorCambiante Shape {
geometry Box { size 2 2 2 }
appearance Appearance { material DEF materialColorCambiante
Material {} }
}
DEF BotonVerde Transform {
translation 0 -1 7
children [
Shape { geometry Cylinder { height 0.1 radius 1 }
appearance Appearance { material Material { diffuseColor 0
10}}
}
DEF SensorBotonVerde TouchSensor { }
]
}
ROUTE motorColor.fraction_changed TO Arcoiris.set_fraction
ROUTE Arcoiris.value_changed TO materialColorCambiante .diffuseColor
ROUTE SensorBotonVerde.isActive TO motorColor.enabled

Si mantenemos presionado el "botn verde", el sensor de tacto va emitiendo


eventos de que est activo y se encaminan hacia el sensor de tiempo que
activa el cambio de color. Y si dejamos de apretar, el sensor de tacto enva
eventos de inactividad y para el sensor de tiempo, parndose as el cambio de
color.
139

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

El observador ha de notar que el sensor de tacto ha de ser agrupado


juntamente con los objetos que servirn de botn, dentro de algn nodo de
agrupacin, para que el VRML sepa que objetos estarn activos al apretar el
botn el usuario. Por eso se ha definido el sensor de tacto SensorBotonVerde
como "hermano" del cilindro que define la geometra del botn dentro del nodo
agrupador BotonVerde Transform.

8.7 Como mejoramos el rendimiento cuando tenemos varios objetos en


nuestra escena?

En principio, este sensor sirve solo sirve para cuestiones de optimizacin. As,
por ejemplo, si tenemos muchos elementos en movimiento en nuestro entorno,
el rendimiento de navegacin puede ser bastante bajo. Pero si hacemos que
los objetos solo se muevan cuando entren en nuestro campo de visin,
mejoraremos el rendimiento por que solo se mover aquello que realmente es
necesario.

Lo podemos lograr definiendo una zona en forma de caja alrededor de los


objetos. El sensor de visibilidad node Visibility. Sensor nos permite definir esta
caja invisible, centrada en un cierto punto. Cuando esta caja entra en nuestro
rango de visin, entonces el sensor de visibilidad se activa y emite un evento

Ejemplo 8.7.1 Sensor de visibilidad.


Transform {
translation -5 8 3
children Shape {
geometry Sphere { radius 2 }
appearance Appearance { ... }
}
}
VisibilitySensor {
center -5 8 3
size 4 4 4
}

140

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

Aunque este ejemplo no es funcional, nos muestra cmo definir la caja de


visibilidad alrededor de un objeto. Como la esfera est centrada en el punto (-5
8).
Si bien es cierto este ejemplo no es funcional, nos muestra cmo definir la caja
de visibilidad alrededor de un objeto. Como la esfera est centrada en el punto
(-5 8 3) y tiene un radio de 2 unidades, entonces hemos de centrar la caja de
visibilidad en el mismo punto y darle unas medidas de 4x4x4 para que englobe
toda la esfera.

8.8 Cmo incidimos sobre las rotaciones y rotaciones de los objetos?

Para ello tenemos el sensor de movimiento que permiten incidir sobre las
traslaciones y rotaciones de objetos directamente e individualmente, sin tener
que modificar toda la escena con las interfaces del browser.
Son tres tipos de sensores de movimiento (o "drag sensors " en Ingls):

NODE PLANESENSOR
Modifica la posicin del objeto, como si se moviese en un plano.

Ejemplo 5.8.1 Sensor de Movimiento en un Plano.


Transform { # Cubo de referencia
translation -3 0 0
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0.7 0.3 0 }
}
}
}
Group {
children [
DEF Cubo Transform {
children Shape {
geometry Box { size 2 2 2 }
141

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

appearance Appearance {
material Material { diffuseColor 0 0.7 0.3
}
}
}
DEF PS PlaneSensor { }
]
}
ROUTE PS.translation_changed TO Cubo.translation

Observemos cmo este sensor se define de forma parecida al sensor de tacto


visto en el mdulo anterior, es decir, debe definirse como "hermano" de los
objetos que han de ser activos. Ahora veremos un ejemplo donde el cubo
naranja es el activo, pero el que se mueve es el verde.

Ejemplo 8.8.2 Sensor de Movimiento en un Plano, donde el objeto activo


es diferente al que se mueve.
Group {
children [
Transform { # Cubo activo
translation -3 0 0
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0.7 0.3 0 }
}
}
}
DEF PS PlaneSensor { }
]
}
]
}
DEF Cubo Transform { # Cubo que se mueve
142

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0 0.7 0.3 }
}
}
}
ROUTE PS.translation_changed TO Cubo.translation

Como ve en el ejemplo el mapeo hecho con el ROUTE no ha variado, pero


hemos puesto el sensor de movimiento en el plano, agrupado con el otro cubo
(el naranja).

NODE CYLINDERSENSOR
Para ello usamos el sensor que permite mapear los movimientos 2D del cursor
de pantalla, en rotaciones alrededor del eje Y del sistema de coordenadas del
sensor. Este sensor se activa cuando se oprime sobre el objeto activo y sin
soltar el botn del ratn, se mueve el cursor. Los movimientos del cursor se
pueden reflejar sobre el objeto mediante un ROUTE. Veamos el ejemplo del
cubo verde modificado.

Veamos que este sensor se define de forma parecida al sensor de tacto visto
en el mdulo anterior, es decir, debemos definirlo como "hermano" de los
objetos que han de ser activos.

Ejemplo 8.8.3. Sensor de Movimiento Cilndrico.


Transform { # Cubo de referencia
translation -3 0 0
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0.7 0.3 0 }
}
}
143

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

}
Group {
children [
DEF Cubo Transform {
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0 0.7 0.3 }
}
}
}
DEF CS CylinderSensor { }]
}
ROUTE CS.rotation_changed TO Cubo.rotation

NODE SPHERESENSOR
Nos permite mapear los movimientos 2D del cursor de pantalla, en rotaciones
alrededor del origen de coordenadas. El sensor se activa cuando se oprime
sobre el objeto activo y sin soltar el botn del ratn, se mueve el cursor.
Entonces, los movimientos del cursor se pueden reflejar sobre el objeto
mediante un ROUTE. Veamos el ejemplo del cubo verde modificado.

Ejemplo 8.8.3 Sensor de Movimiento Esfrico.


Transform { # Cubo de referencia
translation -3 0 0
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0.7 0.3 0 }
}
}
}
Group {
children [
144

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

DEF Cubo Transform {


children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0 0.7 0.3 }
}
}
}
DEF SS SphereSensor { }
]
}
ROUTE SS.rotation_changed TO Cubo.rotation
Observemos cmo este sensor se define de forma parecida al sensor de tacto
visto en el mdulo anterior, es decir, debemos definirlo como "hermano" de los
objetos que han de ser activos.

Ejercicios propuestos: Touchsensor


Apretar un botn UNA sola vez.
Modificar el ejemplo citado anteriormente de manera que una vez apretado el
botn, el cambio de color ya no se pare.

Comentarios
Utilitzar el exposedField SFTime touchTime del sensor de tacto.
Utilitzar el exposedField SFTime startTime del sensor de tiempo.
Solucin propuesta: boton.wrl
Ascensor.
Implementar un ascensor utilizando sensores de proximidad y de tacto.
Comentarios.
Utilizar tan solo primitivas para modelar los objetos.
Implementar dos botones dentro del ascensor (uno para subir y el otro
para bajar).

145

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

No hace falta que implementes botones exteriores para llamar al


ascensor (supondremos que siempre estamos en el piso donde est el
ascensor).
Es importante no permitir la accin de subir cuando ya se est arriba ni
bajar cuando se est abajo.
El observador (es decir, el punto de vista) debe subir y bajar con el
ascensor.
El ascensor no debe poder ser activado desde afuera.
Se recomienda hacer ms de dos pisos para dar la sensacin de
movimiento arriba y abajo, pero el ascensor siempre ir del piso inferior
al superior y viceversa (nunca se parar en los pisos intermedios).

146

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

EJERCICIOS PROPUESTOS: SPHERESENSOR

Control de un Objeto
Definir tres objetos que sirvan de conos y de sensores de movimiento en el
plano, rotacin cilndrica y rotacin esfrica para mover otro objeto que escoja.
Comentarios: Utiliza solo primitivas para modelar los objetos.

RESUMEN

En la presente unidad hemos visto un tema bastante interesante que son los
eventos y las rutas. En realidad los dos estn muy relacionados ya que para
que un objeto de la escena sufra algn cambio tiene que recibir una orden, que
es lo mismo que un mensaje que sigue una ruta especifica, por ejemplo si
deseamos que una esfera se encienda y apague tendramos que enviarle una
orden a travs de un enrutamiento con el mensaje dado indicando el sensor
que se requiera segn lo que desee que cambie.

As como tambin se ha mencionado a los interpoladores que los indicados


para determinar el paso a paso el momento en que se dar el cambio, por
ejemplo el cambio de luz, el cambio de posicin u orientacin.

147

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

AUTOEVALUACIN

1. Puede ser enviado por un objeto y capturado por otro?


a. Mensaje
b. Evento
c. Events-Mensaje
d. Ruta
e. Routing

2. Cmo podemos decir que un cierto eventOut debe estar enlazado a un


cierto eventIn?
a. Ruta
b. Conectores
c. Route
d. crossection
e. a y b

3. Cmo podemos aprovechar el tiempo para mover, girar y rotar


objetos?e, Sensor
a. Sensor de proximidad
b. Sensor del tacto
c. Interpoladores
d. a y b
e. N.A

4. Para poder hacer un seguimiento de los movimientos del observador


en una zona concreta del entorno.
a. Touchsensor
b. ProximitySensor
c. ColorInterpolator
d. a y b
e. Timesensor

148

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

5. Permiten incidir sobre las traslaciones y rotaciones de objetos


directamente e individualmente.
a. Sensores del movimiento
b. Sensor del tiempo
c. Sensor del tacto
d. Interpoladores
e. Sensor de plano. cilndrico, esfrico

CLAVES:
1B, 2C, 3A ,4B 5E

GLOSARIO
Planesensor: Sensor aplicado en un plano
Cylindersensor: Sensor cilndrico
Spheresensor: Sensor esferico
Route: Define una Ruta
Proximitysensor: Sensor de proximidad
Colorinterpolator: Interpolador de colores
Directionallight: Luz que solo emite rayos paralelos
Loop: Bucles repetitivos
Fan out: Abanico de apertura
Fan in: Abanico de entrada
Eventout: Mensaje o evento de salida
Eventins: Mensaje o evento de entrada
Sfcolor: Tipo de dato que emite color

149

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

LECTURA
Metodologa de desarrollo VRML

Hasta el momento se ha considerado a los objetos en el mundo VRML como


entes ensamblados y organizados jerrquicamente. Sin embargo tambin se
puede enfrentar la posibilidad de dinamismo existente en estos objetos, vale
decir, el hecho que stos pueden interactuar, por medio del envo de mensajes
y tambin efectuar movimiento sin que medie alguna accin externa por parte
del usuario.
Por otro lado, como se ha dicho, los objetos interactan entre ellos, por medio
del envo de mensajes (o eventos) a travs de rutas, por lo que es importante,
tambin, tener un diagrama de interacciones del mundo VRML, que permita
modelar esto adecuadamente.

Construccin
Se puede construir de cuatro maneras:

Digitando el cdigo completo

Usar una herramienta de desarrollo

Transformando un archivo de un formato adecuado a VRML en forma


directa

Combinar todas las anteriores

A continuacin se comentarn cada una de stas formas:

Digitacin de cdigo completo


El digitar el cdigo completo puede resultar una buena o mala idea
dependiendo del tipo de objeto a modelar y de los requerimientos previamente
establecidos: Si se trata de un proyecto en el que se busca ms que nada un
nfasis pedaggico hacia VRML, sin importar lo que represente la aplicacin
final, queda claro que aprender el cdigo es importante; si se trata de un
proyecto profesional en el que los plazos de entrega son importantes y en
donde hay formas muy complejas, que con la digitacin completa del cdigo
pueden llegar a ser inmanejables, la idea anterior no es la mejor. En realidad
un fin mucho ms til para un profesional de la informtica en el sentido de
conocer la especificacin VRML es lograr que se pueda crear SW modelador
150

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

de VRML en base a la especificacin entregada, y tambin el poder ser capaz


de comprender y modelar los fenmenos de dependencia de movimientos y
organizacin de componentes en forma jerrquica presentes en un desarrollo
de proyectos de realidad virtual, ya sea usando VRML o no.

Consideraciones adicionales
Espacios reales
Es importante recalcar que al disear un mundo virtual se debe efectivamente
cumplir con lo que se espera, o lo que es lo mismo, crear un espacio que se
comporte como si fuera real, es importante no perder el sentido de la frase
realidad virtual.

Techos y pisos
En la gran mayora de los mundos VRML que estn poblando la red se puede
apreciar el entrar a un universo aparentemente ingrvido, en donde un mundo
est flotando. Un piso, por muy humilde que sea, ayuda grandemente a lograr
una referencia natural para una exploracin ms elegante del mundo virtual.

Cmaras
Como ya se ha sealado, es importante el uso de cmaras para guiar al
usuario hacia los puntos de inters, o ayudarlo a encontrarse cuando se
encuentre perdido.

Compresin de archivos
Una ventaja clara de VRML es que son archivos escritos en formato de texto,
por lo que al comprimirlos se pueden reducir hasta en un 80% del original, en
general para archivos de ms de 50 Kbyte conviene realizar esta compresin la
cual se realiza por medio del formato gzip, que es el que reconocen los
browsers VRML.

http://www.jose-emilio.com/estudios/m1metodologia.htm

BIBLIOGRAFA
151

Sistema a Distancia

Computacin Grfica - Unidad V

Jessica Delgado F. / Pedro Carpio F.

NARCIS PREZ DE ALARCN LVAREZ, Enrique (2000) Manual


Prctico de VRML. Espaa, Eurocolor S.A. Distribucin.

CAREY, Rikk; BELL, Gavin (1997) The annotated VRML 97. Reference
Manual.

FOLEY, Van Dam, Feiner and Hughes (1990) Computer Graphics


Principles and Practice. Addison Wesley, Reading, MA.

http://www.bonsurf.net/chats.htm

152

Sistema a Distancia

Você também pode gostar