vec Line::ClosestPoint(const Triangle &triangle, float *outU, float *outV, float *outD) const { ///\todo Optimize this function! vec closestPointTriangle = triangle.ClosestPoint(*this); if (outU || outV) { float2 uv = triangle.BarycentricUV(closestPointTriangle); if (outU) *outU = uv.x; if (outV) *outV = uv.y; } return ClosestPoint(closestPointTriangle, outD); }
bool Capsule::Intersects(const Triangle &triangle) const { float3 thisPoint; float3 trianglePoint = triangle.ClosestPoint(l, &thisPoint); return thisPoint.DistanceSq(trianglePoint) <= r*r; }
vec Line::ClosestPoint(const Triangle &triangle, float &d, float2 &outBarycentricUV) const { vec closestPointTriangle = triangle.ClosestPoint(*this); outBarycentricUV = triangle.BarycentricUV(closestPointTriangle); return ClosestPoint(closestPointTriangle, d); }
vec Line::ClosestPoint(const Triangle &triangle, float &d) const { vec closestPointTriangle = triangle.ClosestPoint(*this); return ClosestPoint(closestPointTriangle, d); }