unidad_v

25
Computación Gráfica - Unidad V Jessica Delgado F. / Pedro Carpio F. 128 Sistema a Distancia QUINTA UNIDAD EVENTOS RUTAS, INTERPOLADORES, SENSORES OBJETIVOS Describir la forma de envió de mensajes a los objetos Describir la definición de los conceptos matemáticos que van a permitir interpolar los tiempos. Explicar la forma como se asigna el tiempo para cada acción o desarrollado por los objetos. Describir los conceptos de los diferentes sensores Lograr que el alumno estén en la capacidad de construir un mundo virtual complejo y dinámico

Upload: yohan-yangales

Post on 21-Nov-2015

18 views

Category:

Documents


5 download

DESCRIPTION

grafica computing

TRANSCRIPT

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    128 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    129 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    130 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    131 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    132 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    133 Sistema a Distancia

    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 {

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    134 Sistema a Distancia

    key [ 0, 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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    135 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    136 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    137 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    138 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    139 Sistema a Distancia

    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 1 0 } } } 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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    140 Sistema a Distancia

    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 }

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    141 Sistema a Distancia

    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 }

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    142 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    143 Sistema a Distancia

    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 } } }

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    144 Sistema a Distancia

    } 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 [

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    145 Sistema a Distancia

    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).

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    146 Sistema a Distancia

    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).

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    147 Sistema a Distancia

    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.

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    148 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    149 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    150 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    151 Sistema a Distancia

    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

  • Computacin Grfica - Unidad V Jessica Delgado F. / Pedro Carpio F.

    152 Sistema a Distancia

    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