Gestion de collision dans un espace 3D [Résolu]

Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Dernière intervention
8 décembre 2006
- 12 mars 2006 à 12:17 - Dernière réponse :
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Dernière intervention
22 juillet 2011
- 12 mars 2006 à 12:54
3
Merci
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 @+

Merci platon179 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de platon179
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Dernière intervention
8 décembre 2006
- 12 mars 2006 à 15:24
0
Merci
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 !
Commenter la réponse de vincemail
Messages postés
47
Date d'inscription
lundi 19 avril 2004
Dernière intervention
3 mai 2010
- 14 mars 2006 à 16:19
0
Merci
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.
Commenter la réponse de cs_fuliculi
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Dernière intervention
8 décembre 2006
- 15 mars 2006 à 13:01
0
Merci
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 !
Commenter la réponse de vincemail

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.