Accueil

TODO section


U.W.R project

Download Section

ScreenShots

Contact Section

Member Section


Untitled Document
Moteur Physique
   
 

I Gestion des objets mobiles

II Gestion des Collisions

Gestion des objets mobiles
Les lois de la physique n’existe pas dans notre monde virtuel, c’est à nous de les créer. Il faudra donc doter nos objets d’une masse.
 
Gestion des véhicules : J'ai fait une page spéciale pour cette partie, cliquez ici pour y accéder.
Gestion des êtres humains : en cours d'élaboration.
 
Gestion des Collisions

Space partitioning : Comme son nom l’identique, c’est une étape de division de l’espace. A chaque itération de la boucle de jeu il sera inutile de faire un teste de collision avec tous les objets du jeu, car bien souvent certain d’entre seront trop loin. Par exemple il est inutile de tester une collision entre la voiture et l’Ecole si on est devant la gare de Saint Etienne Collision. Il est facile de déterminer la distance entre la voiture et n’importe quel objet, car on a accès à tout moment à la position de tous les objets du jeu, on pourrait donc déterminer à chaque itération les distances entre l’objet et l’ensemble des objets du monde et lancer un teste de collision uniquement pour les objets dits « proches ». Mais dans ce cas on testerait tout de même tous les objets du jeu, il faut donc trouver une façon de pré-macher le travail. Pour cela on va diviser l’espace, au moment de charger la map (voir même avant, pourquoi pas), et on ne testera que les objets qui ce situe dans une certaine région de l’espace. On aura par exemple un tableau qui contiendrait la liste des objets situés dans chacune de ces régions.
Cette méthode est parfaite pour des objets immobiles, mais si les objets ce déplace il risque de sortir de leur région initiale, on pourra donc faire une fonction qui mettrait à jour le tableau initial en fonction du déplacement des objets mobiles.

Collision Detection : Lorsque l’on connaît la liste des objets qui sont dans la même région de l’espace où l’on se trouve, il faut lancer un test de détection de collision. Mais qu’allons nous tester ? Voici plusieurs méthodes :
  • Polygonal Test : comme nous l’avons vue précédemment les objets 3d sont uniquement constitués de triangle, donc pour tester de manière exacte si deux objets entre en collision, il suffit de tester entre eux tous les triangles constituant nos objets. Le problème est qu’une voiture peut contenir plus de 3000 polygones, il serait donc inimaginable et stupide de tous les tester à chaque itération. On doit trouver une méthode pour optimiser ces testes, mais en dernier on doit être capable de tester deux triangles entre eux.
  • Bounding Sphere Test : ici on considère que nos objets sont contenus dans des sphères englobantes, dont on connaît le rayon (dans le pire des cas on pourrait le calculer, en temps réel). Ensuite on détermine la distance entre les deux objets testés, et si cette distance est plus petite que la somme des rayons des deux sphères, il y a collision entre les sphères, sinon on passe à l’objet suivant. Ce test est assez rapide, mais pas très précis (Quick and Dirty). Car si un objet remplit mal la sphère, on risque de détecter une collision alors que les objets ne se touchent pas. Il faudra donc faire un autre test après celui-ci. [Ajouter un dessin ?]
  • Oriented Bounding Box Test : ici on considère que nos objets sont contenus dans des boites englobantes et orientées. Largeur, longueur et hauteur des boites seront chargées lors du chargement de la map, l’orientation de celles-ci sont identiques à celles de l’objet. A partir de là, on teste si l’une des extrémités de chacune des boites pénètre dans l’autre boite. Si c’est le cas il y a collision. Ce modèle est très intéressant pour notre jeu, car une voiture rempli presque entièrement ce genre de boite.
 

Pour l’instant je fait un Bounding Sphere Test puis un Oriented Bounding Box Test. On n’anticipe pas les collisions, on ne fait que les détecter et réagir en fonction de celles-ci. Pourquoi cela pourrait poser problème ? Car si on va très vite et que l’on est très proche d’un objet fin, on risquerait de le traverser sans avoir effectuer de test, c'est-à-dire si au temps t (instant du premier test) on n’est pas en collision et qu’à t + dt (instant du deuxième test) on se trouve de l’autre coté d’un objet, on ne détectera pas la collision qui c’est produite entre ces deux instants. Il faudra donc trouvé une solution à ce problème.

Collision Reaction : Lorsque le test de détection a été effectué, on connaît la position des points de contact sur les deux objets distance entre eux. Il faut donc déterminer la réaction des objets à la collision : modification de la vitesse, modification de l’orientation, dommages éventuels… C’est une partie qui ne demande aucune connaissance informatique, il faudra surtout en avoir en mécanique. J'ai trouvé un site pas mal pour cette partie, mais j'ai pas encore eu le temps de tout lire :

http://www.d6.com/users/checker/dynamics.htm