Dégage ton mic mac avec out_normal qui est implicitement p.normal si tu n'est pas dans un cas dégénéré.
Le seul truc que tu dois tester c'est dotP pour pas avoir une division par 0 (cas rayon/plan coplanaire).
Après moi, je retournerai un bool pour savoir si tu as un cas foireux, et passerai la distance au plan en float &length.
ça donnerai un truc style:
float length;
if( testIntersectionPlane( plane, ray_pos, ray_dir, length ) && length >= 0) // ça touche dans le sens du rayon (pas derrière)
{
vec3f intersection = ray_pos+ length * ray_dir;
prout( intersection, plane.normal);
}
Tes vecteurs n'ont pas forcément besoin d'être en double, par contre tu peux toujours stocker des intermédiaires en double.
Dans ton cas le mieux c'est de debugger en steppant dans le code.
Faut templatiser tout le bordel, etc...
Et n'oublie pas que tu dois normaliser la normale du plan sinon ça va chier.
Message édité par bjone le 23-02-2012 à 12:32:14