Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Seguimiento de paredes

Iniciado por Licantropo23, 06 de Marzo de 2007, 08:19:05 PM

« anterior - próximo »

Licantropo23

Hola, estoy programando un juego. Lo que os quiero preguntar es si sabeis como hacer para que un personaje (envuelto en un cilindro) al colisionar siga la direccion de la pared. Hay que tener en cuenta que puede colisionar con varias paredes a la vez y que las paredes pueden tener cualquier rotacion. El juego es en 3D, la deteccion de la colision con las paredes ya la tengo hecha. A la hora de calcular la direccion que debe seguir se puede simplificar a 2D, mirando desde arriba. Os pongo una imagen de ejemplo:



d es la direccion que lleva el personaje y d' la direccion que en realidad seguirá.

Llevo pensándolo unos cuantos días pero no se me ocurre como hacerlo, muchas gracias por todo. Hasta luego.

Pogacha

Es un metodo recursivo.
Tienes que calcular la proyeccion en el sentido de la pared de la velocidad y luego recursar.

La proyeccion se obtiene de multiplicar (en cruz) la normal a la pared con la velocidad. Luego recursar con cuantas paredes colisiones.

Saludos.

Licantropo23

Hola, muchas gracias por contestar. No he llegado a entenderlo del todo. Según dices, proyectaria d sobre una de las paredes y obtendria un vector. Ese vector lo proyectaria sobre otra de las paredes y asi sucesivamente hasta recorrer todas las pardes, no?. Supongo que lo he entendido mal, porque de esta forma el orden de recorrido de las paredes influye en la direccion final obtenida. Si me lo puedes explicar con un poco mas de detalle te estaría muy agradecido. Hasta luego y muchas gracias.

Pogacha

En verdad que te conteste muy mal ... pido disculpas.

Si, la idea es parecida:


Paso 1: te mueves linealmente mientras no haya colision

Paso 2: Si te desplazas a trabes de todo el tiempo sales.

Si los delta tiempo son pequeños entonces el orden de las paredes no importara, pero si no tendras que ordenar segun cual colisionara primero.

Paso 3: Tomas esta primera pared y la velocidad, la nueva velocidad sera la proyeccion de la velocidad en la pared (puedes agregarle una friccion si te apetece).

Paso 4: ir a 1

Te dije mal como se calculaba la proyeccion:

Proyeccion = Velocidad + Normal (producto escalar) ( Normal (producto punto) Velocidad );

Espero haya quedado mas claro.

Saludos!

Licantropo23

Hola de nuevo, ahora si me ha quedado más claro. Me pondré a hacerlo y ya os cuento que tal. Muchas gracias. Hasta luego.

BeRSeRKeR

También puedes echarle un vistazo al tutorial "Improved Collision Detection & Response" de Kasper Fauerby. Utiliza elipsoides como primitiva de colisión, pero a la hora de calcular el nuevo vector velocidad (calcular el sliding plane) al colisionar es lo mismo.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Pogacha

Muy bueno ese link, ya me lo habia olvidado.

Tambien esta este que es bastante simplificado:
http://www.gamasutra.com/features/19991018/Gomez_1.htm

Hay bastante sobre deteccion de colisiones y mas importante su interpretación.

Saludos!

Licantropo23

Gracias a los dos. Ya casi lo tengo funcionando, aunque para algunos casos me da problemas. A ver si lo soluciono. Cuando lo tenga si a alguien le interesa dejo el código por aquí. Un saludo y hasta luego.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.