J'ai implémenté un moteur physique de jeu 3D simple. J'ai déjà une détection de collision décente en place, maintenant j'essaie de comprendre la partie réponse à la collision. J'utilise une méthode basée sur les impulsions pour calculer les vitesses post-collision. Cela fonctionne assez bien, cependant, cela n'empêche pas complètement les corps de continuer à s'interpénétrer. J'ai donc un morceau de code supplémentaire pour résoudre la pénétration. Actuellement, je déplace simplement les corps le long de la normale de contact de la moitié de la profondeur de pénétration - premier corps dans la direction de la normale de contact, deuxième corps dans la direction opposée.
C'est ok la plupart du temps, mais il y a des effets indésirables. Par exemple, imaginez un couloir étroit et un objet qui le traverse. Si l'objet frappe l'un des murs du couloir, la résolution de pénétration le déplace vers le mur opposé, puis dans le cadre suivant vers le premier mur, etc. L'effet est que l'objet vibre en quelque sorte très vite entre les murs ce qui n'est pas joli.
Ma question est donc de savoir s'il existe un meilleur moyen de résoudre la pénétration? Peut-être ne déplacez-vous pas les corps, ajustez simplement leur vitesse (en plus du calcul des impulsions) pour qu'ils arrêtent de se rapprocher et que la pénétration se résout dans les deux images suivantes. Je devine juste ici. Des idées?
Consultez cet article - qui a été publié ici plusieurs fois auparavant, recherchez simplement dans les questions et réponses marquées par détection de collision - il vous montre comment faire la résolution de collision "continue" dont parlait stephelton:
http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3
Fondamentalement, vous résolvez des équations cinématiques de base pour le point temporel exact lorsque vos deux boîtes englobantes ont commencé à se croiser. Vous résolvez vos collisions à ce moment précis, puis procédez au temps restant dans votre image. Vous devrez peut-être simuler à nouveau ce qui se passe après le moment de la collision, car les vitesses / accélérations de vos objets auront changé. Mais il y a quand même votre point de départ ... bravo!
la source