I'd like to monitor the distance from the point P and the triangle being tested for intersection, so that I can stop the routine when the distance falls below a certain value.
I tried modifying the 0.00001 values in the code thinking that it was meant to be a tolerance value for such collision "distance", but it seems to be ineffective.
What do you think? There is a way to do it? Here below is the routine derived from the document above:
int rayIntersectsTriangle(vector3_t orig, vector3_t dir, vector3_t v0, vector3_t v1, vector3_t v2) {
float a,f,u,v,t;
vector3_t e1= v1-v0;
vector3_t e2= v2-v0;
vector3_t h=dir^e2;
a = e1*h;
if (a > -0.00001 && a < 0.00001) return(false);
f = 1.0/a;
vector3_t s=orig-v0;
u = f * (s*h);
if (u < 0.0 || u > 1.0) return(false);
vector3_t q=s^e1;
v = f * (dir*q);
if (v < 0.0 || u + v > 1.0) return(false);
// at this stage we can compute t to find out where the intersection point is on the line
t = f * (e2*q);
if (t > 0.00001) // ray intersection
return(true);
else // this means that there is a line intersection
// but not a ray intersection
return (false);
}







