Blog post technique du moteur physique pour le module GPR4400
Remise en contexte du projet
Le jeu a été créé dans le cadre du module GPR4400.1, le module moteur physique de la première année de Games Programming à l’école SAE Institute Genève.
Le moteur doit pouvoir générer de la physique rigide en 2D. Il doit y avoir différents type de body (statique, dynamique et cinématique), des collision et des trigger pour différentes formes (box, cercle et polygone), une implémentation de bounding volume (AABB), du space partitioning (QuadTree) et des corrections de de position et vélocités après collision.
Développement
Détection de collision entre AABB
Il a d’abord fallu faire une fonction qui regarde si deux AABB se superposent:
Il a ensuite fallu faire des fonctions pour créer les AABB pour les 3 formes différentes (Box, cercle et polygone):
Ensuite il a fallu regarder le type de forme entre les deux objets pour ensuite voire si leurs AABB se superposent:
Pour finir il a fallu changer la couleur des colliders des objets dont leurs AABB se superposent:
Voici un aperçu du résultat :
Ce qu’il reste à faire
SAT
Il faut faire les SAT entre les différentes formes pour qu’une fois la collision entre deux AABB est confirmée on puisse vérifier s’il y a collision entre les colliders des deux objets et également obtenir le MTV.
QuadTree
Il faut faire un QuadTree pour pouvoir séparer en plusieurs parties les objets pour pouvoir gérer les collisions quand il y a beaucoup d’objets en même temps.
Restitution
Il faut pour finir, en fonction du MTV reçu, recalculer la position, la direction et la vélocité des objets après collision.
Conclusion
Pour conclure, ce projet a été le plus dur de l’année, je suis content d’avoir réussi à faire un début de détection de collision mais il reste encore une grosse partie à faire.
Liens
https://box2d.org/documentation/index.html https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection