Soucis de précision sur des vecteurs - C++ - Programmation
Marsh Posté le 23-02-2012 à 12:27:20
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.
Marsh Posté le 23-02-2012 à 13:14:16
C'est ce que j'ai fait, par contre je laisse le out_normal et j'ai ajouté un out_pos, j'en ai besoin pour faire un test de collisions sur des objets composé de plusieurs planes
Ceci dit, j'ai dû laisser le cas où la longueur était négative, sinon ça marchait pas bien
Le bug venait du fait que je forçait la position y de mon objet à être à la longueur de l'intersection, alors qu'il fallait le recalculer par ray_pos + length*ray_dir
Merci quand même
Marsh Posté le 16-02-2012 à 13:53:17
Bonjour !
Voilà, j'ai une fonction qui me permet de vérifier une intersection entre un rayon et un plan, elle renvoit -1.0 si y'a pas d'intersection, sinon la distance entre le point d'origine et le point d'intersection.
Pour ça, j'utilise une structure que j'ai nommé "vec3f" :
La fonction pour récupérer la distance :
ZERO est définie comme la valeur 1.0e-8
La fonction vec dot :
Et plane, qui est une structure :
La fonction marche, sauf que ben elle renvoi un truc du style "21.68 , 23.9481" en boucle, alors que le point de départ / la direction sont inchangés..
Du coups je penchais pour une perte de précision, je dois absolument travailler en double ?
Merci de votre aide et bonne journée
---------------
Perhaps you don't deserve to breathe