Detection de collision

Signaler
Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
-
 Utilisateur anonyme -
Salut

Je suis en train de créer un programme dans le quel je doit implémenter
la detection de collision entre deux boites. La difficulté c'est que
les boites peuvent etre orienté suivant differents angles.

Est ce que quelqu'un sais comment le faire, puisque la je suis vraiment desesperé.


Merci.

9 réponses

Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

ca ne change peut être pas complètement la donne, mais 2D ou 3D ? Et d'ailleurs tant qu'on y est des boîtes... rectangulaires ?

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008

Je te conseille très vivement d'utiliser un moteur physique. Ils sont très performants, utilisent des techniques qu'on est loin de pouvoir imaginer si on est pas un dieu dans le domaines des multiplicateurs de Lagrange et sont bien documentés. Essai PhysX (Novodex) de Ageia, il est gratuit.
Tu vas te prendre la tête sinon avant d'être dégouté d'avoir pondu un algo lent et pas très stable.
Perso j'en avais commencé un avec des connaissances de bases de physique et mécanique (la terminale S suffit amplement pour faire un algo potable) mais la stabilité (car j'imagine que tu ne t'arretes pas qu'aux collisions) est extrêmement difficile à allier avec la vitesse. J'ai embrayé avec PhysX dont je suis très satisfait.
Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
2
Salu!

J'aurai du peut etre dir les parallelpipedes. Donc c'est en 3d.

Je ne m'interesse qu'aux collisions simples (je veux juste savoir si 2 boites sont en collision ou non).

Merci pour ta reponce Galimza je vais voir ce moteur physique, mais je
doit faire un algorithme directement dans mon programme sans
utilisation de librairies.


goast_tu
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008

Tu peux proceder ainsi:
Tu calcules les AABB (axis aligned bounding boxes, regarde sur le net il y a des dessins très bien fait pour les définir)
Tu vérifies si les AABB se touchent
NON -> pas de collisons -> exit
Tu vérifies que chaque sommet d'un parallelepipede ne se situe pas à l'intérieur de l'autre parallelepipede.
OUI -> la direction du contact est la normale à la face touchées (si tu en a plusieurs, tu fais une moyenne de ces normales) -> ~exit
NON -> ca ne veut pas dire qu'il n'y a pas de collision
Tu vérifies si chaque arête d'un parallelepipede ne se situe pas derrière une arête de l'autre parallelepipede (derrière a un sens car les arêtes sont orientées ver l'extérieur ).
OUI -> direction contact = produit vec des arètes
NON -> pas de collisions -> exit

Ce n'est pas rigoureux mais ça ne peut que t'aider.

Bonne chance !
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

je n'aurais pas dit mieux, les méthodes auqelles je pensais rejoignent les tiennes !

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bas si ces que des cubes, t'as juste besoin de faire des produits scalaires...

slt peut tu m'en dire plus sur PhysX stp
Il est gratuit ? parceque sur le site j'ai pas trouvé le lien il parlai de licence!

Et je vois pas comment on fait pour combiné un détecteur de colision avec openGL mais vrement pas.

Peux-tu m'en dire un plus stp en 3-4 lignes 

MaLaDeDeDe 97one
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008

Salut,


Effectivement, la derniere version n'est plus disponible gratuitement !
La derniere version disponible pour le public est la 2.3.3.

Regarde ce topic, j'y explique tres brievement les grand principes de l'implantation d'un moteur physique dans un moteur graphique.

http://www.cppfrance.com/infomsg_COMMENT-TESTER-COLLISIONS-AVEC-SDL_653331.aspx#6

Malheureusement le lien vers AGEIA ne propose plus la version 2.3.1.

ok mici

MaLaDeDeDe 97one