diff --git a/vcg/space/triangle3.h b/vcg/space/triangle3.h index d8e14504..07f88d2b 100644 --- a/vcg/space/triangle3.h +++ b/vcg/space/triangle3.h @@ -184,6 +184,26 @@ bool InterpolationParameters(const TriangleType t, const int Axis, const Point3< if(Axis==2) return InterpolationParameters2( P2(t.P(0)[0],t.P(0)[1]), P2(t.P(1)[0],t.P(1)[1]), P2(t.P(2)[0],t.P(2)[1]), P2(P[0],P[1]), L); return false; } +/// Handy Wrapper of the above one that uses the passed normal N to choose the right orientation +template<class TriangleType, class ScalarType> +bool InterpolationParameters(const TriangleType t, const Point3<ScalarType> & N, const Point3<ScalarType> & P, Point3<ScalarType> & L) +{ + if(N[0]>N[1]) + { + if(N[0]>N[2]) + return InterpolationParameters(t,0,P,L); /* 0 > 1 ? 2 */ + else + return InterpolationParameters(t,2,P,L); /* 2 > 1 ? 2 */ + } + else + { + if(N[1]>N[2]) + return InterpolationParameters(t,1,P,L); /* 1 > 0 ? 2 */ + else + return InterpolationParameters(t,2,P,L); /* 2 > 1 ? 2 */ + } +} + // Function that computes the barycentric coords of a 2D triangle. Used by the above function.