Novedades del Blog

jueves, 8 de enero de 2009

Subcolisiones de Colisiones

Después de implementar las colisiones AABB, me surgió un pequeño problema, y era como hacer para que Batman pudiera pasar por el hueco de la puerta, si toda la puerta era un cubo contra el que colisionaba. Al final lo he conseguido como se muestra en la imagen:


Para conseguir esto pensé varias opciones:

La primera opción (fue la que use en la versión C++ hace 2 años) era crear un cubo dentro del bounding box llamado 'área no colisionable', en el cual, como su nombre indica, no colisionaría otra Entidad. El proceso seria mirar si se colisiona con el Bounding Box y en caso afirmativo, mirar que no se colisione con ese área dentro del Bounding Box. Para las puertas era suficiente pero no me acababa de convencer.

La caja roja seria el Bounding Box de la Entidad y la caja verde el 'área no colisionable' del Bounding Box.


La segunda opción (la que he implementado ahora) es crear varios Bounding Box dentro del Bounding Box genérico que contiene toda la entidad. Primero hago las comparaciones con los Bounding Box genéricos y si se produce alguna colisión (Colision) , miro uno a uno sus Bounding Box de dentro (Subcolisión), lo que me permite hacer el hueco de la puerta y mas precisión en las colisiones.

La caja roja seria el Bounding Box genérico que contiene todo la entidad, después en azul claro hay 2 Bounding Box mas pequeños que serian las columnas de la puerta y de color azul oscuro el tercer Bounding Box para la parte superior de la puerta.

Estos Bounding Box se especifican en el fichero de configuracion de la malla, mediante coordenadas y mediante el ancho, alto y profundidad de cada uno de ellos.

No hay comentarios:

Publicar un comentario