J'ai un moteur de physique 2D de base en marche. C'est à peu près un moteur de particules, utilise simplement des formes de base comme les AABB et les cercles, donc aucune rotation n'est possible. J'ai implémenté CCD qui peut donner un TOI précis pour deux objets en mouvement rapide et tout fonctionne sans problème.
Mon problème est maintenant que je ne peux pas comprendre comment déterminer si deux objets en mouvement rapide doivent même être vérifiés l'un contre l'autre en premier lieu. J'utilise un arbre quadruple pour le partitionnement spatial et pour chaque objet en mouvement rapide, je le compare aux objets dans chaque cellule qu'il passe. Cela fonctionne très bien pour déterminer la collision avec la géométrie statique, mais cela signifie que tout autre objet en mouvement rapide qui pourrait entrer en collision avec lui, mais qui n'est dans aucune des cellules qui sont vérifiées, n'est jamais pris en compte.
La seule solution à laquelle je puisse penser est soit d'avoir les cellules suffisamment grandes et de croiser les doigts pour que cela soit suffisant, soit d'implémenter une sorte d'algorithme de force brute. Existe-t-il une façon appropriée de régler ce problème, peut-être que quelqu'un a résolu ce problème de manière efficace. Ou peut-être existe-t-il une meilleure façon de partitionner l'espace qui en tient compte?
Voici un schéma:
Les "zones d'effet" des objets A et B se croisent, elles doivent être vérifiées l'une par rapport à l'autre. Mais avec la façon dont je vérifie actuellement les collisions, cela ne tient pas compte de cela. Encore une fois, je peux penser à quelques solutions à cela, comme vérifier réellement si les chemins des objets se croisent une fois que leur vitesse est supérieure à x, ou quelque chose, mais cela ressemble à un hack et c'est un gâchis à essayer d'implémenter.
Réponses:
Le problème dont vous parlez est souvent appelé `` détection de collision à large phase '' et votre solution est un `` volume balayé '', pas vraiment un hack, juste comment il est fait (prenez simplement l'AABB de l'objet, y compris le début et la fin du mouvement et utilisez-le pour la collision - bien que les choses deviennent un peu délicates avec les rotations).
Ensuite, l'algorithme de détection des collisions à large bande qui accélère ce processus est appelé «balayage et élagage».
la source