Intersection rayon -> triangle

Signaler
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008
-
DarkBoss
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008
-
'lu tout le monde.
Je vous explique la situation:
j' ai fais mon (petit) moteur 3d, mais j' aimerais rajouter une bonne gestion des collisions avec un lancer de rayon.
Mais voila toutes les articles/sources/théories que j' ai trouver sont assez vastes et pas precise comme je le voudrais.
Mon rayon partirais du vecteur position de ma caméra ( l' oeil du joueur )
Comme le titre l' indique j' aimerais savoir :
   -Si le rayon traverse un des triangles qui compose mes murs;
   -A quelle distance il le traverse pour pouvoir arreter le déplacement du joueur

je précise qu' avant de poster j' ai cherché mais que ce que j' ai trouvé n' étais pas assez complet, je ne suis pas un mathématicien , j' ai donc besoin d' un exemple concret pour en apprendre plus.

Merci pour vos réponses
DarkBoss

13 réponses

Messages postés
119
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
6 novembre 2008
3
Sans formule mathématique ça risque d'être compliqué à faire !
Pour moi la solution serait d'utilisé des sinus et des cosinus et cela à plusieurs reprise !
Si ça t'intéresse je veux bien essayer de t'expliquer la méthode que j'utiliserai mais je veux pas me lancer dans de longues explication pour rien !
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008

bah t' emmerde pas pour moi j' ai deja trouver des fonction complexe le probleme c' est qu' elles le sont trop....
mais si tu pouvais m' expliquer simplement comment on teste si un vecteur traverse un triangle sa serais cool

DarkBoss
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Un vecteur par définition n'a pas de position donc tu peux pas tester s'il traverse un triangle puisque ca veut rien dire. :)
Messages postés
119
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
6 novembre 2008
3
Ce site t'explquera mieux que moi je pense (je ne suis pas très pédagogue et sans dessin ça va être dur):
http://texel3d.free.fr/opengl/collisions.htm

PS: tout rayon qui se déplace peut être assimilé à une droite.
Mais je vois pas trop un triangle en 3D.
Messages postés
30
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
12 janvier 2010

Salut!

Il y a une méthode très simple. Tout ce dont tu as besoin c'est d'une fonction qui détermine l'équation de la droite support de ton vecteur (car effectivement, un vecteur est une entité mathématiques que tu peux déplacer où tu veux dans le plan, voire l'espace) ainsi que les droites supports des côtés de ton triangle. Ensuite, une fonction qui  calcul le point d'intersection entre deux droites, s'il existe. Il faut verifier que le croisement s'effectue dans les limites de longueur de ton vecteur (norme) et la longueur des côtés de ton triangle, la fonction te renvoie alors si oui ou non il y a une intersection (tu peut aussi faire en sorte qu'elle retourne les coordonnées du point d'intersection). S'il n'y a jamais d'intersection, il n'y en a pas !!

Voilà!

Si tu as des soucis d'implémentation, je dois avoir un algo qui peut t'aider (si je le retrouve!)
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

Je veux pas tout casser mais...je pense pas que le test d'intersection demi-droite/triangle soit une methode efficace...

Ca demande quand meme pas mal de calculs et cela pour un seul tiangle! Donc pour tous les triangles de la scene et a chaque frame (ou presque) ca va demander beaucoup au pc...
Je dis ca comme ca...j'ai jamais essayé de faire ca...

Tu peux detecter les collisions avec des bounding box aussi, c'est beaucoup plus simple.

Un parallelépipede pour un mur, un cylindre pour le joueur suffit je pense dans une premiere approche. Apres on peut affiner le modele du joueur...
En plus le calcul de collisions entre un parallelepipede et un cylindre c'est quand meme bcp plus simple et plus performant car dans chaque bounding box tu peux avoir des millions de polygones puisque ca n'entre pas en compte dans le calcul.
Messages postés
30
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
12 janvier 2010

Il est évident que ça demande pas mal au pc, mais c'est une solution que j'ai déjà personnellement expérimenté dans un prog qui simulait l'évacuation d'une foule dans un environement. Et à l'oeil, tu ne sens pas que ça ralentit!! mais c'est vrai que ça fait beaucoup de code à taper.
Pourrais-tu détailler ce qu'est une bounding box?
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

Une bounding box c'est un objet simple comme: un cylindre, un cube, une sphere qui sert a englober un maillage plus ou moins complexe de facon plus ou moins precise; c'est a dire que tu peut utiliser plusieurs boundingbox pour un objet.

Par exemple pour un homme : une sphere pour la tete, un paralellepipede pour le tronc et aussi pour les bras, les avant-bras, les cuisses et les jambes ( c'est deja un modele bien detaillé pour un perso)

Ensuite pour detecter les collisions entre les bounding box c'est assez simple car c'est objets sont caractérisés de facon simple:

Pour une sphere: son centre et son rayon.
Un cube : sont centre et la longueur de son coté.
etc...

Et puis le tps de calcul depend de la scene. Si il y a bcp d'objets en ineraction ca risque d'etre lent avec la methode des triangles...

Si tu veux encore plus de details il y a google qui te trouveras pleins de tutos la dessus.
Messages postés
30
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
12 janvier 2010

Ok! je vais me renseigner sur les possibilités de ces bounding box! Merci déjà de l'info!
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008

désolé du temps de réponse les mecs mais a cause de ces orages j' avais pu de connexion,
alors deja les bounding box oui c' est simple mais si je cherche du coté des intersection de rayon c' est car les bounding boxes
sont imprecise en effet quand je les avaient implémenté je passait quelques fois a travers les murs.
sinon merci bien de vos reponses, donc si il y avait une solution pour eviter ces petits inconvénients des bounding boxes,
je voudrais bien savoir
a bientot

DarkBoss
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008

Oups j' oubliais , lolo38550 ouais j' aimerais bien ton algo
car j' ai quand meme recherché pour l' implementation et le travail avec vecteur je ne maitrise pas tres bien,
car les seuls que j' utilises sont pour la caméra et sont donc assez simple.
Donc merci d' avance

DarkBoss
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

DarkBoss> Je trouve ca douteux le fait qu'avec des bondinf on traverse les murs...
C'est ton implementation qui ne dois aps etre correcte...sinon on utiliserais pas autant ce principe! Half Life c'est des bounding-boxes et on traverse pas les murs!
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008

bah en fait il suffit que ton taux de FPS baisse et tu traversera les murs, c' est normale que sur half-life et tous les jeux commerciaux cela ne se passe pas etant donné qu' il partent du principe que tous les joueur ont une "bonne" config et que leur jeux sont optimisés a font, par l' asm etc..
je ne suis pas un pro et l' optimisation est encore non necessaire dans mon moteur..
voila pour la petite explication

DarkBoss