Bueno, la caja de ejes de coordenadas, se genera el cualquier entidad generada en nuestro proyecto, podemos mostrarla para verla, con la propiedad showBoundingBox(true); del nodo asociado a esta entidad. En la sguiente imagen vemos como la caja de coordenadas envuelve a toda la entidad.
Para saber recoger esta caja, el mismo nodo que contiene la entidad nos ofrece un metodo llamado _getWorldAABB(), que nos devuelve un objeto de tipo: AxisAlignedBox, con algunos metodos interesantes
- getMaximun(), getMinimun() -> devuelve un Vector3 con los valores maximos y minimos de esta caja.
- getCenter() -> nos devuelve un Vector3 con el centro de la caja.
- intersection -> pide como parametro otro AABB, y devuelve el resultante, de dicha intersección o colisión.
Ogre::AxisAlignedBox aabResultado = mSceneMgr->getSceneNode("nodo1")->_getWorldAABB().intersection(mSceneMgr->getSceneNode("nodo2")->_getWorldAABB());
if(!aabResultado.isNull())
{
" Ha habido una colision ubicada en"+aabResultado->getMaximun()->getCenter();
}
Realizando calculos, respecto a un eje, podriamos saber donde ha colisionado, por ejemplo en el tenis podriamos saber si ha colisionado en la parte de arriba centro o abajo.
- contains -> Este metodo devuelve true o false para saber si un AABB contiene a otro.
Este metodo es muy util para saber si un objeto se encuentra o se ha encontrado alguna vez dentro de otro en su totalidad. Por ejemplo podriamos saber en el Juego del tenis si la pelota a traspasado la paleta.
En definitiva con el metodo _getWorldAABB() de los nodos, podremos saber de manera simple y facil si ha habido alguna colision entre objetos, para saber mas mirar el ejemplo creado de CuboLoco v2.
No hay comentarios:
Publicar un comentario
Gracias por tu comentario! :)