Algoritmos Basicos de Colisiones Para Videojuegos

Post on 24-Jan-2016

213 views 0 download

description

graficación

Transcript of Algoritmos Basicos de Colisiones Para Videojuegos

Algoritmos Basicos de Colisiones para VideojuegosEn el mundo real todas los objetos al ponerse en “contacto” reaccionan: chocan,se deslizan, rebotan, se rompen y todas los otros comportamientos queobservamos a diario. En el caso de los videojuegos es muy importante tener unmétodo (o varios) para saber cuando ocurre esto y actuar de manera adecuada,puesto que como se trata de una aplicación en tiempo real, no podemosprecalcular en la mayoría de casos dichos eventos. Cuando estemosimplementando propiamente un método es importante tener en cuenta lossiguientes factores:

Uso de recursos: Se refiere a cuanta memoria y uso de procesadorrequieren las operaciones que estamos realizando para calcular si existe ono la colisión.

Colisiones falsas: Cuando utilizamos aproximaciones a las colisionespuede que estas no sean correctas gráficamente, aún cuando el algoritmoreporte una colisión.

Colisiones faltantes: El algoritmo fallará al intentar hallar estas colisiones(no las reporta).

Escalabilidad: Qué numero de objetos puede llegar a abarcar el algoritmosin que falle en alguno de los casos anteriores.

Este tutorial muestra algunos de los test geométrico mas sencillos para empezar atrabajar colisiones, los de punto adentro, que tienen como objetivo mostrar si unpunto se encuentra dentro de cierta figura geométrica. Para cada caso se muestrala descripción del algoritmo, un código estructurado muy sencillo y un ejemplo enc++ – OpenGL.

Circulo: Este es el test mas sencillo de realizar, basta comprobar si la distanciadesde el centro del círculo al punto en cuestión es menor al radio del círculo así:

Con ayuda de un poco de matemática milenaria (Pitágoras para ser mas exacto),se encuentra la distancia desde el punto en duda y el centro del círculo, los casosson:

La distancia es menor o igual: El punto esta adentro. La distancia es mayor: El punto esta afuera.

Bastante fácil. Hay que observar que este algoritmo es fácilmente extensible alcaso de tres dimensiones (punto dentro de una esfera), basta incluir la distancia zdentro de la raíz del calculo de la distancia punto – centro esfera.Para el caso 2d el algoritmo en c++ sería algo así :

struct Punto2d{

float x;

float y;};

struct Circulo

{Punto2d centro;float radio;

};

float distanciaPuntos(Punto2d *puntoA,Punto2d *puntoB){

float distancia_x = puntoB->x - puntoA->x;

float distancia_y = puntoB->y - puntoA->y;

return (float)

sqrt((distancia_x*distancia_x)+(distancia_y*distancia_y));}

bool esPuntoAdentro(Circulo *circulo, Punto2d *punto)

{if ( distanciaPuntos(&(circulo->centro) , punto)

<= circulo->radio){

return true;}return false;

}

...

Referencia: http://black-byte.com/tutorial/algoritmos-basicos-de-colisiones-para-videojuegos/