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 |
|
|
|
|
|
|
|
|
|
|
|
|