Meilleure / efficace façon dimplémenter une collision 3D

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

Je « voudrais avoir une bonne technique pour parcourir tous mes éléments dans un monde en 3D.

Réponse

Vous allez avoir besoin dun bon algorithme de partitionnement despace, couramment utilisé en 3D sont les octrees .

Après cela, vous pouvez entourer les modèles, etc. avec des sphères de délimitation dans lesquelles ils sintègrent parfaitement car une collision entre des sphères de délimitation est très facile à calculer. Une fois que vous savez que deux sphères de délimitation se heurtent, vous pouvez soit réduire itérativement les sphères de délimitation et ajouter des sphères de délimitation pour garder lobjet couvert en elles, soit utiliser un autre algorithme intelligent pour calculer les collisions entre deux objets complexes. cette image: plusieurs sphères de délimitation

Answer

En fin de compte, je pense que la réponse votre question dépendra des besoins de votre application particulière, car il n’existe pas de solution universelle. Bien qu’il existe un certain nombre de ressources décentes sur le Web, vous économiserez beaucoup de temps et la frustration en prenant Christer Ericson « s Détection de collisions en temps réel , qui présente en détail une grande variété de techniques et dalgorithmes, avec des exemples de code C ++.

Cela ma aidé à faire des petits pas avant de me lancer dans la construction dun grand système. En écrivant une fonction pour déterminer si un point est dans un avion, le n si un point est dans un triangle, si un rayon est dans un triangle, etc. Puis passer aux tests statiques de divers solides convexes: AABB vs Triangle, etc. Avec le temps, des choses qui semblaient impénétrables (pardonner le jeu de mots) sont devenues moins intimidant. Voici une liste dun bon nombre de tests, avec un exemple de code:

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

En attendant, puisque 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:

  • Partitionnement spatial, octrees, quadtrees, arborescences BSP
  • Arbres BIH
  • Bounding Volumes et Bounding Volume Hierarchies
  • Détection de collision discrète et continue
  • Théorème daxe de séparation
  • Algorithme GJK

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *