Realidad Virtual
información adicional
jaume ferrer i rosera
13. Scripting: Cómo conseguir que el punto de vista siga a un objeto en movimiento
Consulta:
¿Cómo conseguir que cuando tenemos
un objeto en movimiento podamos situar un punto de vista en el propio objeto
o cerca de él para que siga su trayectoria?
Respuesta:
A continuación se muestra un ejemplo de uso de PROTO y scripting basado
en el ejemplo de la FAQ 12. Tres cajas empiezan a girar al clicar sobre una
esfera y una de ellas además se desplaza en los tres ejes del espacio.
Cuando supera una cierta posición que coincide con los límites
de una caja (mostrada en modo alámbrico) invierte el sentido de la marcha
y sigue avanzando hasta que encuentra otro límite y así indefinidamente.
Todo se detine si clicamos de nuevo sobre la esfera. Las tres cajas son instancias
'hijas' de un prototipo de caja genérica.
Se han añadido cilindros alrededor de la caja en alámbrico sólo como referencia para apreciar mejor los desplazamientos del punto de vista. Se han definido 4 puntos de vista distintos (pueden escogerse desde la opción de cambio de vista del visualizador de VRML):
vistaExterior: corresponde al punto de vista inicial, desde lejos para apreciar todo el conjunto. Es fijo.
vCajaSinGiro: su posición coincide con la de la caja en movimiento, por lo que se traslada cuando ésta se pone en marcha.
vCajaDetras: ídem que la anterior pero situada a cierta distancia de la caja, por lo que la va siguiendo.
vCajaConGiro: ídem que vCajaSinGiro pero cambiando también de orientación según va girando la caja.
En todos los casos el sistema se basa en enrutar el mismo vector que servirá para desplazar o girar la caja a el punto de vista que nos interesa animar. En vCajaDetras, como nos interesa que la posición del punto de vista no coincida exactamente con la de la caja para poder mantenerla a la vista, dentro del script se efectua un pequeño cálculo que se envía fuera a través del eventOut SFVec3f 'mueveCajaDetras'.
Ver código fuente [si lo guardáis en vuestro disco duro y lo editáis con VrmlPad podréis ver el código coloreado]