Como executar a detecção de colisão no espaço 3D?

8

Eu tenho que escrever, o que pode ser resumido como, um jogo 3D completo do zero neste semestre. Até agora, eu só programava jogos 2D no meu tempo livre, a transição não parece difícil, o jogo é simples. O único problema que tenho é a detecção de colisões. A única coisa que encontrei foi a AABB, esferas delimitadoras ou recomendações de vários mecanismos de física. Eu tenho que programar um submarino que se moverá livremente dentro de um sistema de cavernas; AFAIK não posso usar bibliotecas de física; portanto, nenhuma das opções acima resolve meu problema.

Até agora eu estava usando o SAT para minha detecção de colisão. Existem algoritmos excelentes e similares, mas criados para colisão 3D? Não estou falando de octrees ou outras otimizações; estou falando de detecção direta de colisão de um conjunto de polígonos 3D com outro conjunto de polígonos 3D. Pensei em usar o SAT duas vezes, projetar a malha da parte superior e lateral, mas parece tão difícil até dividir o espaço 3D em formas convexas. Também isso parece computação demais, mesmo com octrees.

Como os profissionais fazem isso? Alguém poderia lançar alguma luz.

dreta
fonte
11
Não é tão difícil dividir o espaço 3D em geometria convexa. Por exemplo, usando uma árvore BSP (particionamento de espaço binário).
Maik Semder 08/03/12

Respostas:

5

GJK funciona em formas convexas, eu também poderia usar SAT. Eu encontrei as informações que eu já queria. aqui estão alguns exemplos:

Para resumir, farei verificações de colisão de uma esfera ou um elipsóide contra vários triângulos que formam uma malha de colisão. Parece que é assim que se faz e essa era a informação que eu estava pedindo, a menos que alguém pudesse me dizer diferente.

dreta
fonte
1

Ei, eu escrevi sobre GJK em 3D aqui. O SAT é mais lento que o GJK http://in2gpu.com/2014/05/18/gjk-algorithm-3d/

Sergiu Craitoiu
fonte
As respostas somente de link tendem a ser bastante ruins, pois se tornam inválidas assim que as mudanças e não são bem pesquisadas. Considere expandir esta resposta para incluir algumas informações sobre os detalhes da solução que você está tentando apresentar.
ah, ok, eu pensei que estava tudo bem #
Sergiu Craitoiu
0

Bem, se não é algo muito exigente e avançado, você pode começar implementando o algoritmo de detecção de colisão de Gilbert . Pode ser feito para ser bastante rápido e rápido, desde que sua geometria de colisão não seja tão detalhada (e não precisa ser!). É assim que até alguns simuladores fazem o truque. Qualquer coisa mais elaborada provavelmente levará mais esforço em consideração.

teodron
fonte