Comment effectuer la détection de collision dans l'espace 3D?

8

Je dois écrire ce qui peut être résumé comme un jeu 3D complet à partir de zéro ce semestre. Jusqu'à présent, je n'ai programmé que des jeux 2D pendant mon temps libre, la transition ne semble pas difficile, le jeu est simple. Le seul problème que j'ai est la détection de collision. La seule chose que j'ai pu trouver était AABB, des sphères englobantes ou des recommandations de divers moteurs physiques. Je dois programmer un sous-marin qui va se déplacer librement à l'intérieur d'un système de grottes, AFAIK Je ne peux pas utiliser les bibliothèques de physique, donc rien de ce qui précède ne résout mon problème.

Jusqu'à présent, j'utilisais SAT pour ma détection de collision. Existe-t-il des algorithmes excellents similaires, mais conçus pour les collisions 3D? Je ne parle pas d'octrees ou d'autres optimisations, je parle de détection de collision directe d'un ensemble de polygones 3D avec un autre ensemble de polygones 3D. J'ai pensé à utiliser SAT deux fois, projeter le maillage du haut et du côté, mais il semble si difficile de diviser même l'espace 3D en formes convexes. Cela semble aussi beaucoup trop de calcul même avec des octets.

Comment font les professionnels? Quelqu'un pourrait-il faire la lumière?

dreta
la source
1
Ce n'est pas si difficile de diviser l'espace 3D en géométrie convexe. Par exemple en utilisant un arbre BSP (partitionnement d'espace binaire).
Maik Semder

Réponses:

5

GJK travaille sur les formes convexes, je pourrais aussi bien utiliser SAT. J'ai déjà trouvé les informations que je voulais. Voici quelques exemples:

Pour résumer, je vais faire des vérifications de collision d'une sphère ou d'un élipsoïde contre plusieurs triangles qui forment un maillage de collision. Cela semble être la façon dont cela se fait et c'est l'information que je demandais, à moins que quelqu'un ne puisse me dire le contraire.

dreta
la source
1

Hé, j'ai écrit sur GJK en 3D ici. SAT est plus lent que GJK http://in2gpu.com/2014/05/18/gjk-algorithm-3d/

Sergiu Craitoiu
la source
Les réponses de lien uniquement ont tendance à être plutôt médiocres, car elles deviennent invalides dès le déplacement et elles ne recherchent pas bien. Pensez à développer cette réponse pour inclure des informations sur les détails de la solution que vous essayez de présenter.
oh, ok je pensais que ça
allait
0

Eh bien, si ce n'est pas quelque chose de très exigeant et de l'état de l'art, vous pouvez commencer par implémenter l' algorithme de détection de collision Gilbert . Il peut être fait pour être assez rapide et il sera rapide, à condition que votre géométrie de collision ne soit pas aussi détaillée (et ce n'est pas nécessaire!). C'est ainsi que même certains simulateurs font l'affaire… tout ce qui est plus élaboré prendra probablement plus d'efforts en considération.

teodron
la source