Meilleur moyen / efficace pour implémenter une collision 3D

16

J'ai déjà programmé un système de collision basé sur 2d pour un jeu précédent. C'était mon premier système de collision et c'était moche. Je cherchais une collision entre les objets en vérifiant tous les objets avec tous les objets. J'ai déjà entendu parler d'un système de grille avec des cellules où un objet ne regardera que la collision avec d'autres objets de ses cellules actuelles. Est-ce vraiment un bon moyen de vérifier la collision?

J'aimerais avoir une bonne technique pour boucler tous mes articles dans un monde en 3D.

Jean-Philippe Leclerc
la source

Réponses:

11

Vous allez avoir besoin d' un bon algorithme de partitionnement espace, couramment utilisé en 3D sont octree .

Après cela, vous pouvez entourer les modèles, etc. de sphères de délimitation dans lesquelles ils s'intègrent parfaitement, car une collision entre les sphères de délimitation est très facile à calculer. Une fois que vous savez que deux sphères englobantes entrent en collision, vous pouvez soit réduire les sphères englobantes de manière itérative et ajouter des sphères englobantes pour garder l'objet couvert en elles, soit utiliser un autre algorithme intelligent pour calculer les collisions entre deux objets complexes.

Voir cette image: plusieurs sphères englobantes

Roy T.
la source
12

En fin de compte, je pense que la réponse à votre question dépendra des besoins de votre application particulière, car il n'y a pas de solution universelle. Bien qu'il existe un certain nombre de ressources décentes sur le Web, vous vous épargnerez beaucoup de temps et de frustration en choisissant la détection de collision en temps réel de Christer Ericson , qui présente en détail une grande variété de techniques et d'algorithmes, par exemple Code C ++.

Cela m'a aidé à faire des pas de bébé avant de me lancer dans la construction d'un grand système. Écriture d'une fonction pour déterminer si un point est dans un plan, puis si un point est dans un triangle, si un rayon est dans un triangle, etc. les choses qui semblaient impénétrables (pardonnez le jeu de mots) sont devenues moins intimidantes au début. Voici une liste d'un bon nombre de tests, avec un exemple de code:

http://www.realtimerendering.com/intersections.html

En attendant, comme je sais que tout le monde ne peut pas débourser 70-80 $ pour un livre à volonté, voici quelques termes que vous voudrez peut-être examiner:

  • Cloisonnement spatial, Octrees, Quadtrees, arbres BSP
  • BIH Trees
  • Volumes limites et hiérarchies de volumes limites
  • Détection de collision discrète ou continue
  • Théorème d'axe de séparation
  • Algorithme GJK
user_123abc
la source