Gestion de collision dans un espace 3D

Résolu
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 12 mars 2006 à 12:17
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 15 mars 2006 à 13:01
Bonjour à tous, je suis en train de programmer un petit jeu en 3D avec OpenGL, et je reviens à ma gestion des collisions. En effet, pour le moment je fais la détection en regardant la position de la caméra par rapport à chaque triangle qui compose mon monde. Ceci demande de regarder tout d'abord si la caméra se trouve devant le triangle, puis de calculer la distance de la caméra au triangle. Ceci à l'avantage d'être très précis, mais c'est lourd en calculs... Avec quelques milliers de triangles ca pose pas de problème, mais j'ai peur que si mon jeu se complexifie ca commence à ramer... Alors je me penche sur l'utilisation de volumes/boites englobantes. Mais je n'arrive pas à voir comment on peux utiliser ces boites englobantes pour un grand mur en diagonale par exemple... Si quelqu'un a une idée... Je voudrais savoir aussi si c'est une méthode souvent utilisée dans les jeux 3D si jamais quelqu'un sait
Merci à ceux qui ont eu le courage de lire mon roman :-)
Bonne journée.
Vincent

4 réponses

platon179 Messages postés 237 Date d'inscription lundi 20 mai 2002 Statut Membre Dernière intervention 22 juillet 2011 2
12 mars 2006 à 12:54
Salut :)

Tu peux utiliser une technique de subdivisions spatiale, afin d'accélérer à la fois l'affichage de ton monde, et la gestion de tes collisions, les quadtrees ou octrees par exemple... Dans ce cas, tu auras beaucoup moins de triangles a tester. Le principe est très simple : tu prends tous tes triangles, et tu les classes en fonction de leur position dans l'espace, récursivement... Tu n'auras alors qu'à tester et afficher les triangles des sous-espaces ainsi créés qui sont visibles... Tous les autres peuvent simplement être sautés, car ni visibles ni utiles pour les gestions de collisions...

Sinon, pour ton souci de mur en diagonale, regarde du côté des OBB (Oriented Bounding Box), ca permet justement de traiter ce genre de problèmes ;)

Bon dimanche @+
3
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
12 mars 2006 à 15:24
Ah vi c'est une super idée ca de faire des subdivisions spatiales, ca devrait me permettre de bien accélérer le jeu. Je vais me renseigner sur les OBB, merci beaucoup !
0
cs_fuliculi Messages postés 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 6
14 mars 2006 à 16:19
Pour l'affichage, en effet un arbre peut t'aider (perso, je préfère l'arbre binaire). Mais pour ce qui est des colisions, je te conseille d'utiliser des bounding box (et bounding sphere, oriented bounding box, ...) c'est beaucoup plus rapide. Et tu peux combiner tout ça.

Exemple :

- tu as deux voitures, tu calcul leurs bounding box.Ca se résume aux max et min de la boite qui englobe ta voiture (xmin, xmax, ymin, ymax, zmin, zmax en parcourant tes vertex).

- tu fais ensuite un test de colision entre les deux bounding box.
si x1min > x2max : pas de colision
ou si x1max < x2min : pas de colision
ou si y1min > y2max : pas de colision

ou si y1max < y2min : pas de colision
ou si z1min > z2max : pas de colision


ou si z1max < z2min : pas de colision
sinon colision

- (optionel) si il y a colision des bounding box, alors tu peux faire un test plus avancé comme le tien

En utilisant des boîtes englobantes orientées (boite suivant l'orientation de ta voiture et non plus alignée sur les axes du monde) tu auras un test de colision plus précis mais plus compliqué à mettre en place.
0
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
15 mars 2006 à 13:01
Pourtant je suis bien obligé d'orienter les bounding box s'il y a par exemple un très grand mur en diagonale... Sinon le personnage ne pourrait pas avancer sans savoir pourquoi... Merci pour ta réponse Fuliculi, je vais me pencher sur ces bouding box pour essayer d'optimiser tout ca !
0
Rejoignez-nous