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.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts