Como verificar se houve colisão AABB [RESOLVIDO]

1. Como verificar se houve colisão AABB [RESOLVIDO]

Pedro Souza Pereira
UmCaraAToa

(usa )

Enviado em 13/01/2016 - 13:51h

Oi.

Gostaria de saber como posso programar um sistema de colisão entre a Câmera e Cubos utilizando AABB. [Estou usando o OpenGL]

Eu pesquisei muito sobre como posso fazer, mas não sei como posso verificar, pois para desenhar o cubo eu faço algo assim:


glTranslatef(0,0,0);
glBegin(GL_QUADS);
glVertex3f( s, s,-s);
[...]
glEnd();


E para câmera eu utilizo um Vetor. Porém, eu já verifiquei que para verificar a colisão mais simples precisa saber o ponto mínimo e o ponto máximo do cubo. Mas a colisão funcionaria se eu fizesse a verificação direta da posição da Câmera com o cubo ou preciso transformar a câmera em um "cubo" para fazer a verificação?

Toda ajuda será bem vinda.

PS: Não coloquei na comunidade OpenGL porque isto é mais relacionado a como fazer a colisão e não como desenhar.


  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 13/01/2016 - 15:49h

Deixa eu explicar melhor como é:
Suponha que sua camera esteja no ponto x1,y1,z1, e tenha tamanho camSize (aqui camera é um cubo de tamanho camSize) e seu cubo tenha um tamanho de lado igual a s (supondo s ser metade do tamanho), o cubo está na posição x2,y2,z2, sendo esse seu centro de massa.
Daí você faz verificação em relativa ao lado de cima, latera esquerda e lateral direita:
SE fabs(x1 - x2) > (camSize + s) return "não colisão"
SE fabs(y1 - y2) > (camSize + s) return "não colisão"
SE fabs(z1 - z2) > (camSize + s) return "não colisão"

Se tudo mais falhar significa que está colidindo:
Então, return "colisão"

Tudo isso fica numa função que testa por AABB.
Recomendo que procure o livro Real Time Collision Detection, é ótimo.

3. Re: Como verificar se houve colisão AABB [RESOLVIDO]

Pedro Souza Pereira
UmCaraAToa

(usa )

Enviado em 13/01/2016 - 18:34h

Oi.

Fiz uma pequena implementação aqui e aparentemente funcionou. Agora só tenho que fazer a câmera não poder passar por ela, isso acho que será difícil, mas mesmo assim, muito obrigado.