El sensor de proximidad es una herramienta muy interesante para poder hacer un seguimiento de los movimientos del observador en una zona concreta del entorno. El node ProximitySensor nos permite definir una zona en forma de caja centrada en una cierta posición del espacio, la cual detecte si el observador está dentro o fuera, en que instante entra o sale, etc.
A continuación damos un ejemplo donde un TimeSensor se
enciende o se apaga en función de si el observador está dentro
o fuera de una zona cúbica del espacio. Para ver como se enciende y se
apaga el TimeSensor, enlazaremos nuestro ejemplo del Cubo Cambiante
de Color del módulo anterior a un ProximitySensor que
definiremos.
|
Ejemplo1: Sensor de proximidad
enciende y apaga el cambio de color del cubo.
|
Los elementos nuevos (respecto al ejemplo del módulo 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 connecta el eventOut isActive del sensor de proximidad con el exposedField enabled del sensor de tiempo.
Este conjunto, 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 través del exposedField enabled (donde enabled significa activado en inglés). 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 esta manera, el cambio de color queda congelado mientras el observador está
fuera de la zona y vuelve a variar cuando el observador entra.
Ejercicios propuestos:
|
Antes que nada, es importante aclarar que el nombre de "tacto" es del todo inapropiado para este sensor. En inglés se define como node TouchSensor que es el que realmente resulta desafortunado, la traducción sencillamente sufre del original.
Lo que este sensor hace en realidad es permitir detectar cuando el observador apunta a un objeto con el cursor y cuando oprime el botón del raton. Por lo tanto permite definir "botones 3D".
Para ver como funciona, modificaremos el ejemplo anterior y ahora el cambio
de color del cubo comenzará cuando se "clique" sobre el cilindro
rojo en primer plano.
|
Ejemplo2: Sensor de tacto
enciende el cambio de color del cubo.
|
Mientras se esté apretando el "botón 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. Al dejar de apretar, el sensor de tacto envía eventos de inactividad y para el sensor de tiempo, parándose así el cambio de color.
Es curioso notar que el sensor de tacto ha de ser agrupado júntamente
con los objetos que servirán de botón, dentro de algún
node de agrupación , para que el VRML sepa que objetos
estarán activos al apretar el botón el usuario. Por esta razón
hemos definido el sensor de tacto SensorBotonVerde como "hermano"
del cilindro que define la geometría del botón dentro del node
agrupador BotonVerde Transform.
Exercicios propuestos:
|