Mais comment faire la détection de collision sur des formes faites de petits triangles?
En ne le faisant pas.
La détection des collisions contre une collection de triangles arbitraires (ou pire, entre deux collections de triangles arbitraires) est d'un coût prohibitif.
Au lieu de cela, nous effectuons généralement la détection de collection de manière hiérarchique, en commençant d'abord par des formes simples et extrêmement grossières (comme des boîtes ou des sphères) qui se rapprochent (mal) de l'objet sous-jacent.
Cela nous permet de rejeter rapidement la majorité des collisions potentielles comme «ne se produisant pas», ce qui est le cas habituel. Dans le cas où une telle vérification brute passe, cela indique une collision réelle potentielle, et nous procédons à la vérification par rapport à une approximation plus détaillée de la forme sous-jacente (telle que celle faite de plusieurs formes de capsules étroitement ajustées, ou de nombreuses boîtes de délimitation alignées).
Essentiellement, la détection des collisions commence par des tests bruts et, au fur et à mesure que ces tests réussissent, se poursuit vers une représentation de plus en plus détaillée. Cette image, fournie par Shiro dans un commentaire à la réponse d' Alexandre , illustre comment un modèle complexe (un humain) peut être représenté par une série de formes plus simples:
Rarement avons-nous réellement besoin d'effectuer une collision au niveau d'un triangle individuel, et lorsque nous le faisons, nous avons généralement utilisé les méthodes les plus grossières pour explorer un très petit ensemble de triangles potentiels à tester. À ce stade, des algorithmes spécifiques sont utilisés pour effectuer les tests, tout comme vous testeriez si deux rectangles se chevauchent. Par exemple, vous pouvez déterminer si et où un rayon frappe un triangle .