begin process at 2012 05 29 20:06:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

Probleme avec Intersection rayon-triangle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme avec Intersection rayon-triangle

samedi 13 mai 2006 à 00:44:49 | Probleme avec Intersection rayon-triangle

dPompei2

J'aurais aussi bien pu placer ça dans openGl ou directX mais je trouve que ça a sa place ici. voila donc ma question:
J'ai cette fonction qui devrait nooormalement fonctionne (elle fonctionne parfaitement dans l'exemple d'ou je l'ai apprise et il y a aussi plusieurs tuts qui font presque idem ...) mais elle ne fonctionne pas ... si je donne un triangle et un rayon en parametere et je suis sur qu'ils se touchent (je les dessine et le vois de mes propres yeux :p) ça me dit que non ! et presque toujours après avoir calculé "u" ! si je "raccourcis" le vecteur de direction, elle stoppe parfois deja après avoir calculé la déterminante, ce qui n'est pas logique car la direction reste la même et un rayon a une longueur infinie ...

Enfin voila j'espere que vous pourrez m'aider ! Et si ce n'est pas le cas, p-e qqun sait m'éclairer sur les parties que je comprends pas (en pensant que je suis aps encore a l'unif mais j'ai une bonne base de math vectorielle et dans l'espace)
FTSExp bool v_rayTriangle( SPos3D direction, SPos3D origin, SPos3D v1, SPos3D v2, SPos3D v3 ) { #if 1 	SPos3D edge1 = { 0.0f, 0.0f, 0.0f }; 	SPos3D edge2 = { 0.0f, 0.0f, 0.0f }; 	SPos3D pVec = { 0.0f, 0.0f, 0.0f }; 	SPos3D tVec = { 0.0f, 0.0f, 0.0f }; 	SPos3D qVec = { 0.0f, 0.0f, 0.0f }; 	float det = 0.0f;  	float /*t = 0.0f,*/ 		u = 0.0f, 		v = 0.0f;  	/* Get the two edge vectors of the triangle that begin at v1. */ 	edge1 = v_minus( v2, v1 ); 	edge2 = v_minus( v3, v1 );  	/* pVec is orthogonal to the triangle. 	 * Used to see if the ray is parallel to the triangle or not. 	 */ 	pVec = v_vectProd( direction, edge2 ); 	det  = v_scalProd( edge1, pVec ); 	FTSMSG( "det = %f\n", FTS_NOMSG, det ); 	if( det < 0.0001 ) 		return false;  	/* Now from here on, I don't understand it anymore. Ok, tVec is 	 * the vector that goes from the ray's origin to the one vertice 	 * that's common to edge1 and edge2, but why test if it's < 0 or 	 * > det ? And i know too that u v and t could be used to calculate 	 * texcoords, but I don't need this so i don't do it. 	 */ 	tVec = v_minus( origin, v1 ); 	u = v_scalProd( tVec, pVec ); 	FTSMSG( "u = %f\n", FTS_NOMSG, u ); 	if( u < 0.0f || u > det ) 		return false;  	qVec = v_vectProd( tVec, edge1 ); 	v    = v_scalProd( direction, qVec ); 	FTSMSG( "v = %f\n", FTS_NOMSG, v ); 	if( v < 0.0f || u + v > det ) 		return false;  // 	t = v_scalProd(  ); // 	t *= 1.0f / det; // 	u *= 1.0f / det; // 	v *= 1.0f / det;  	return true;
}

samedi 13 mai 2006 à 00:54:36 | Re : Probleme avec Intersection rayon-triangle

dPompei2

Re voila le code en mieu formaté (fin j'espère) et j'ai vraiment besoin de votre aide !

bool v_rayTriangle( SPos3D direction, SPos3D origin, SPos3D v1, SPos3D v2, SPos3D v3 )
{
    SPos3D edge, edge2, pVec, tVec, qVec;
    float det, u, v;
   
    /* Get the two edged of the triangle that have v1 as origin. */
    edge1 = v_minus( v2, v1 );
    edge2 = v_minus( v3, v1 );

    /* pVec is orthogonal to the triangle. Used to see if the ray is parallel to the triangle or not. */
    pVec = v_vectProd( direction, edge2 );
    det = v_scalProd( edge1, pVec );
    if( det < 0.0001f )
       return false;

    /* Now from here on, I don't understand it anymore... */
    tVec = v_minus( origin, v1 );
    u = v_scaleProd( tVec, pVec );
    if( u < 0.0f || u > det )
       return false;   /* C'est ici que souvent, u est plus grand que det. */

    qVec = v_vectProd(  );
    v = v_scalProd( direction, qVec );
    if( v < 0.0f || u + v > det )
       return false;

    return true;
}

Ou v_vectProd est le produit vectoriel et v_scalProd est le produit scalaire.


Cette discussion est classée dans : to, triangle, 0f, det, spos3d


Répondre à ce message

Sujets en rapport avec ce message

Problème de gestion hDC et hWnd. [ par vith17 ] Bonjour à tous,J'essaie de faire un écran de veille avec un cube qui tourne en utilisant OpenGL (je me sers des tutoriaux de Nehe et de Christian Code Afficher bitmap [ par krokro6 ] bonjour :) j'ai un probléme pour afficher un bmp quand je compile avec Vc++ 6.0, voila l'erreur :error C2664: 'SendMessageA' : cannot convert paramete LOG et ACOS [ par Fwdavy ] Salut,Sur mon appli PocketPC je me tape deux erreurs dont je ne comprend pas. Peut être avez vous des solutions de variantes :'log' : ambiguous call t GESTION CLAVIER SDL [ par Batman60 ] voici un bout de code qui  sert à me déplacer dans une scène 3D opengl ,le problème c'est qu'il faut à chaque fois appuyer sur la touche pour ce dépla GESTION CLAVIER SDL ET OPENGL [ par Batman60 ] salut voici une partie de mon code pour me déplacer dans un espace 3Dje cherche le moyen d'avancer(SDLK_UP) dans le sens de la rotation choisi(SDLK_x  Créer un mail via une appli C++ [ par Cedced41 ] Bonjour , Je souhaite créer un mail via mon appli C++ sous pocket PC 2003. mon appli s'appelle : PROJET Actuellement j'arrive à créer le mail avec tou COLORREF to char* to COLORREF [ par melkiorlenecrarque ] Bonjour, Je voudrais envoyer à une application serveur un COLORREF  via send. J'ai donc besoin de transformer cette variable en char* Avec les exemp rss parser(xerces) [ par fabrizio2605 ] Hi,someone can help me using the xerces library cause i'm gonna be crazy!!I can't install the lib.,or better, i'm not able to do this.So i'd like to k Copier StreamAudio d'un AVI to AVI [ par Shadiest ] Ayant directement accés aux streams d'un fichier AVI, j'aimerai copier l'audio dans un autre AVI, le problème a déjà été rencontré ici mais n'a pas probleme de compilation: UNDEFINED REFERENCE TO.... [ par unbreak ] Bonjour, en fait je ne comprends pas pourquoi cette source me pose probleme. https://sourceforge.net/project/showfiles.php?group_id=121930 elle me f


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales