IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

test collisions


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut test collisions
    salut, je suis nouveau en opengl (3 jours) et j'apprends en programmant un petit moteur 3D simple. Bon, pour l'affichage, les deplacements, ca va, j'ai compris. Par contre, je voudrais programmer un test de collision. J'ai bien essaye de comprendre ceux que je trouve sur le net, mais je ne connais pas encore le C++ et je veux vraiment comprendre et ne pas utiliser une routine toute faite sans la comprendre. Quelqu'un a-t-il deux ou trois explications a me donner ? Merci. Ah oui, moi je ne connais que le C pour le moment.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    Benpour les collisions tu peux par exemple utiliser les Bounding Box (Boîtes englobante). Ce sont des boîtes qui englobent tes objets, et en fait voilà comment ça marche : tu entoures d'une boite englobante une personnage : si tu ne touche pas la boite ben alors pas de collision...
    si tu touche la boite, alors ton perso est touché mais où?Alors tu fais appel à des boîtes de plus en plus petites qui englobent des parts du perso chaque fois plus petites et comme ça tu arrive à savoir ou tu le touche.

    Pour l'optimisation de l'affichage les test de collisions sont aussi utilisés, notamment en utilisant les octrees qui "créé" des boites englobantes sur des portions de terrain.Grace a ces boites, tu sais que si tu vois une boite englobant une portion de terrain alors tu vois le terrain , donc tu affiches cette portion, si tu vois pas la boite d'une portion de terrain c'est que tu ne vois pas cette portion de terrain donc tu n'affiche pas cette portion.
    Pour plus d'infos sur les octrees et des bouts de code va sur http://membres.lycos.fr/jcomgl/home1.php3, un site français sur Opengl (GLInFrench) ou tu pourras trouver un article sur les octrees qui t'expliquera beaucoup mieux que moi les octrees.

    Donc en fait une méthode de collisions ce sont les Bounding Box....et tu verras pour les créer c'est à peu près le même procédé que les Octrees : tu crées des boites de plus en plus petites....Ainsi par exemple, j'entoure d'une boite englobante ma maison->j'ysuis dedans donc collision..mais dans quelle piece->je vais donc faire des bounding box plus petites, pourquoi pas une pour chaque pièce...je regarde si je touche chacune des ces boites->si je touche celle enlgobant la cuisine alors j'y suis...etc....si je n'étais pas dans la maison alors je n'aurais même pas eu besoin de faire des Box pour chaque piece...je me serais arreter à celle de la maison->n'y étant pas, pas besoin que je regarde si je suis dans telle ou telle piece...

    Bon j'espere que ça a été plus ou moins clair ( )...La je ne t'ai pas vraiment dit comment voir si je touche une Bounding Box, la je t'ai juste expliqué (du moins j'ai essayé) un procédé de gestion de collision. En fait le plus dur reste à faire...

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci pour ta reponse En tout cas, je sais deja la technique a utiliser Enfin, je comprends bien le truc mais... comment je sais que je touche une boite avec ma boite ? Des tests de coordonnees de boites ? Pour lesz angles, c'est simple, mais pour le reste... Bon, je vais regarder ce site, il doit y avoir beaucoup de choses tres interessantes. Merci

  4. #4
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 39
    Points : 41
    Points
    41
    Par défaut
    J'ai lu il y a quelque temps un article sur les colisions sur gamasutra qui était vachement bien (En anglais bien sur !)

    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    Comme te le dit bragon sur gamasutra il y a quelques petites chses intéressantes qui méritent d'être vues...
    Enfin bon si tu veux tester si ta boîte touche une autre boîte t'as juste en effet regarder si ces 2 boîtes ne s'empiètent pas. Donc puisque tu as leur coordonnées alors tu peux faire les calculs...
    http://echellon.hybd.net/issues/4/ar...riteclass.html Ici tu as un exemple utilisant les Bounding Box en 2D. Il te montre (le tut) qu'il faut que tu regardes si les boîtes se recoupent, si elles le font alors Collision sinon ben non... Bon là c'est un exemple en 2D, pour la 3D tu aurais juste à rajouter une dimension en Z... En fait il faudrait créer une structure Bounding Box qui stocke ses coordonnées, ainsi en faisant Bounding[1].x tu aurais la position en x de le boite ,etc...Regarde comment ils font...

    Donc en fait tu as juste des calculs à faire , et à vérifier ce qu'ils se passent (ainsi par exemple tu fais
    if( mabox[x] - laboxdelobjet[x]<0) ...alors collision) Bon la ce serait pas ça mais c'est dans l'idée..tu verras tout ça dans les liens que je te passes.

    Puis je rajouterais qu'il existe les Bounding-Sphere...ce sont comme tu peux t'en douter des spheres qui englobent complètement ton objet (alors que les Bounding Box ce sont des Cube qui englobent les objets). Donc pour ces spheres , il faut que tu trouves à peu pres le centre de ton objet, et tu fais un rayon assez grand pour englober tout ton objet. Et pour vérifier si tu as une collision tu as juste à vérifier si la distance entre une autre Bounding Sphere et une premiere sphere est inférieure au rayon de la premiere sphere.Attention, pour calculer la distance entre les 2 il faut que tu calcules la distance a partir de l'extrémité de la 2eme sphere (pas a partir de son centre), et pour ta 1ere sphere la tu gardes par rapport au centre. ( ou alors tu calcules par rapport a l'extrémité des 2 sphere mais alors ya collisions si et seulement si la distance entre les 2 est inférieure ou égale a 0 ( et non au rayon de la 1ere sphere (normal...)).
    Enfin tu auras de meilleure explication des bounding sphere ici :
    http://www.gamedev.net/reference/pro...re/default.asp
    http://www.gamedev.net/reference/art...rticle1234.asp

    Autres liens très intéressants :
    http://www.gamedev.net/reference/art...article735.asp
    http://www.cs.montana.edu/~charon/th.../collision.php
    http://www.gamedev.net/reference/list.asp?categoryid=45 Ici encore plein de liens

    Enfin tu peux comme je te l'ai déjà dit faire des List de Box ,càd tu fais des boites de plus en plus petites, regroupant plusieurs objets puis si collisions -> boites plus petites regroupant un objet, puis si encore collision tu peux faire encore des boites plus petites si tu veux voir quelle partie l'objet a été touchée...c'est les poupées russes en fait....la grandes boites peut ,si besoin est, englober d'autres boites...(cf exemple de la maison et pieces, au précédent post)..mais attention, tu ne verifies si ya collision avec les petites box que si ya eu avant collision avec les plus grandes...
    Puis juste une précisions les Box tant les Bounding Box que les Sphere Box sont imaginaires (pas besoin de les dessiner...sauf si tu veux voir que ton code marche...)

    Voilà j'espere avoir été plus ou moins clair...en tout cas je ne peux te conseiller que de voir les liens et aussi d'aller sur le forum de Gamedev http://www.gamedev.net/community/forums/par exemple, ou tu trouveras des questions sur cela (fais search et Bounding ou collision)...
    A+.

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci pour ces reponses. Je vais voir tous ces liens et essayer de trouver une solution a mon probleme.

    Je pense avoir un peu compris l'histoire des boites. je vais creuser un peu et essayer de voir les sources existantes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. algorithme de collision 3D
    Par chetropinchuste dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/02/2010, 13h16
  2. Test de collision
    Par ZouBi dans le forum C++
    Réponses: 8
    Dernier message: 28/02/2008, 15h17
  3. [java3D][collision]
    Par geofun dans le forum 3D
    Réponses: 7
    Dernier message: 12/02/2007, 14h49
  4. Test de collision en 2D
    Par GLDavid dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/02/2004, 10h12
  5. [XMLRAD] test de nullité
    Par Pm dans le forum XMLRAD
    Réponses: 5
    Dernier message: 29/11/2002, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo