Collision 3D

DJPierreB Messages postés 5 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 février 2005 - 15 déc. 2004 à 18:38
DJPierreB Messages postés 5 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 février 2005 - 17 déc. 2004 à 10:32
Actuellement, j'ai fait un programme qui dessine les murs et le sol d'une pièce.
Je sais me déplacer dans la pièce. Je voudrais donc y ajouter des tests de collision.

Je voudrais ne pas pouvoir passer au travers des murs.
J'imagine que le test se fait par rapport à un plan. C'est tester si moi (identifié par un point 3D x,y,z) je suis en contact avec un plan.
J'ai du mal à imaginer l'implémentation ainsi que les calculs.
Actuellement, j'ai un algo qui crée les murs à partir d'un fichier texte. Mais ce n'est jamais qu'une succession d'appels aux fonctions de dessins de vertex.
Faudrait-il que chaque objet graphique (par exemple un bout de mur) soit en fait une classe ? Ainsi j'imagine que ça simplifierait les tests.
Je parcourerais chaque objet du graphique et je vérifierais que je ne sois pas en collision avec.
Quelle est la formule qui me permet de savoir où je suis par rapport à un plan ? Quelles sont les conditions à écrire pour savoir si on a dépassé ce plan ou si on est toujours devant?

Merci pour votre aide. :big)

4 réponses

Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
15 déc. 2004 à 21:48
"Faudrait-il que chaque objet graphique (par exemple un bout de mur) soit en fait une classe ? Ainsi j'imagine que ça simplifierait les tests." -> alors ça : non, sûr.

Si tes murs sont, comme je le suppose, placés sur un sol plat, et qu'en plus il n'y en a pas de placé en diagonale, ça simplifie ton travail : tu peux te rapporter à des calculs en 2D.
Le mieux je pense serait que tu te fasses un dessin; dans ton prog, dessine les murs avec une certaine épaisseur; ensuite, tu peux tester si ton perso est dans le mur simplement avec un gros if (regarde ton dessin pr voir comment faire, c'est simple, il y a collision si la pos 2D de ton perso se trouve dans le rectangle représenté par ton mur, vu de haut bien sûr).
S'il y a collision, il faut trouver un système, en général en utilisant des vecteurs, qui te permet d'avancer en fonction de ton mouvement (pour longer le mur).
Bref pour bien t'expliquer faudrait que je te fasse un dessin mais j'i la flemme :p C'est déjà un point de départ je pense...

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
0
DJPierreB Messages postés 5 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 février 2005
16 déc. 2004 à 10:21
Merci pour ta réponse.

Effectivement, actuellement mon problème de collision se situe dans un espace de type labyrinthe, donc plutôt 2D.
Je pensais qu'en définissant un pan de mur comme une classe, je pourrais stocker les coordonnées du mur et ainsi, en parcourant les coordonnées de chaque objet, savoir si j'étais en collision ou non.

Si je n'utilise pas de classe, comment je fais pour stocker les coordonnées ?
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
16 déc. 2004 à 23:59
Si bien sûr tu peux utiliser une classe mais ce que je voulais dire en fait c'est qu'il ne te faut pas une classe par mur (c'est ce que j'avais compris...).
Sinon oui, une classe Mur peut être utile, ensuite tu te stockes un petit tableau d'objets de type Mur et ça constituera ta Map, tu peux donc englober ça dans une classe Map par exemple :)

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
0
DJPierreB Messages postés 5 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 février 2005
17 déc. 2004 à 10:32
Merci Funto66
0
Rejoignez-nous