FORO
CONTACTO
anterior siguiente
QUEST 3D: RAYCHECK

DESCARGAR EL MATERIAL

¿Quereis hacer un videojuego 3D?
¿Y a que en ese juego hay que disparas a terribles monstruos?
¡Necesitareis saber a donde estas apuntando!
No solo eso, a veces tendreis que pulsar interruptores, abrir puertas...

A la hora de interaccionar con el entorno se hace imprescindible este tipo de objeto: Raycheck. La accion se trata de trazar una linea desde donde esta el usuario, en la direccion en la que mira, y el objeto raycheck, nos va a devolver con que objeto intersecciona esa linea (como disparar con una pistola, y que el sistema nos informe de a quien le ha dado la bala).
Abrir el proyecto de quest Raycheck que doy en el material:

Parece complejo, pero os prometo que lo es.

Esta construido sobre el proyecto "domeycamarawalk" que os di en el material del ejercicio 3 (paseos).
A dicha escena se le añaden cinco cubos (pueden ser teteras, coches...) y se distribuyen por el escenario.

Queremos que el sistema nos informa de a qué cubo estamos apuntando (mas tarde ya dispararemos) Para eso usamos el objeto DX8CollisionRaycheck al que tenemos que pasarle(en orden de izquierda a derecha):

1º La posicion de la camara (en este caso, quizá en un juego, la posicion del muñeco que va caminando por la escena). Es este ejemplo observar que le pasamos un shortcar del vector de posicion que se forma dentro de la camara walktrough que esta añadida a la cola de render normal.

2º Un vector direccion hacia donde apunta el rayo. Esta es la parte más trigonometrica del asunto. Pero si pensabais que ibais a hacer un juego 3D sin saber trigonometria, os habeis engañado.Queremos apuntar en la misma direccion que apunta la camara. Eso corresponde con el eje Z local de la camara(0,0,100) en el ejemplo. Pero el eje direccion hay que darlo en coordenadas del mundo. Asíque tenemos que aplicarle la orientacion de la camara. En el ejemplo, formamos una matriz de transformacion (value motion), con el vector de rotacion de la camara (en el ejemplo con shortcut). Estudiar bien mediante la ayuda el objeto "value motion". Es de tipo matriz de "motion". El primer hijo es el vector de posición, el segundo el vector de rotación, y el tercero el vector de escala. Mediante estos tres vectores forma una matriz 4x4 de transformación (repasar vuestros apuntes de algebra y geometría 3D), la cual es capaz de trasnformar cualquier vector 3D. Eso es lo que hacemos en el ejemplo. Al vector local (0,0,100), le aplicamos la matriz de transformación de la orientación de la cámara, lo que nos devuelve un vector orientado con el eje Z de la camara. Ya tenemos la direccion en la que tiene que salir nuestro rayo.

3º y siguientes: son los objectos Dx8 colisionObject. Son todos los objetos con lo que queremos comprobar si apuntamos hacia ellos (vamos, los malos!) El orden con que los añadimos al objecto raycheck es importante, ya que este devuelve un numero, que es si apuntamos al 1º, al 2º, etc... Observar que la forma a la que añadimos nuestros objetos, es analoga a la que usamos para la stencil shadows (ejercio anterior)

Ya ha pasado lo dificil.

Ahora, qué hacemos con el numero que nos devuelve el collision raycheck?

Observar que aparte del render normal de escena, es caller start scene, llama a un segundo render (tambien compuesto de camara, objeto), en el que el objeto es un Text Object, es decir, nos muestra en pantalla el texto que le pasemos como hijo. La camara de este render es una camara fija orientada de forma que el textoque perfectamente perpendicular a la camara. De este modo, podemos mostrar en pantalla el texto que queramos, sobreimpreso a la escena. Y el texto que le pasamos, es el valos que nos devuelve raycheck.

Si ejecutais el ejemplo, vereis como se nos indica cuando apuntamos a la primera, segunda , ... cajas.

 

Vamos a complicarlo aun más todavía. Pero es que de nada nos sirve que aparezca en pantalla que estamos apuntando a una caja (ya lo veo por mí mismo!), nos interesa que se produzca algun tipo de accion.
Si , del material cargais el ejemplo raycheck-conif en quest, vereis, que ademas de lo anterior, se llama tambien a una carpeta con logica:

Se trata de una larga expresion If que comprueba dos cosas:

1-Si raycheck confirma que apuntamos a la caja numero 1

2-Si la distancia entre la camara y la caja numero 1 es menos que un determinado valor (vamos, que estamos cerca de la caja numero 1

Si esto se cumple (el them del if), la caja se pone roja, si no, es normal.

Al ejecutarlo, vereis que al acercaros a la caja roja, esta se pone roja.

Este es el esqueme general para poder interacionar con objetos. Podeis hacer puertas que se abren cuando el protagonista se acerca a ellas. Interruptores que el usuario puede pulsar... etc

 

Autor: Javier Marco

anterior siguiente
 

Novedades

Realidad Virtual
Quest 3D
Modelado 3D
Iluminación Giles
Conway's Game of Life

Stereoscopía
Foto 3D

Internet
HTML
Dreamweaver
JavaScript
ASP

 

 
Hagaloustedmismo
Contacte en : hagaloustedmismo@wanadoo.es
Phohibida toda reproducción total o parcial sin permiso del autor