Луч пересечения треугольника - PullRequest
0 голосов
/ 20 октября 2019

Я читаю эту статью: https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf Я понимаю, почему u, v должно быть больше нуля, поэтому точка лежит внутри треугольника, но я запутался, почему они проверяют * u> det, а также * u +* v> дет. Я думал, что u, v должно быть в [0, 1]. Буду признателен, если кто-нибудь объяснит.

int intersect_triangle(Eigen::Vector3f orig, Eigen::Vector3f dir,
                   Eigen::Vector3f vert0, Eigen::Vector3f vert1, Eigen::Vector3f vert2,
                   double* t, double* u, double* v) {
Eigen::Vector3f edge1, edge2, tvec, pvec, qvec;
double det, inv_det;

edge1 = vert1 - vert0;
edge2 = vert2 - vert0;

// begin calculating determinant
pvec = dir.cross(edge2);
det = edge1.dot(pvec);

if (det < EPSILON)
    return 0;
// calculate distance from vert0 to ray origin
tvec = orig - vert0;
// now calculate u parameter and test bounds
*u = tvec.dot(pvec); // following the rules of determinants 
if (*u < 0.0 || *u > det)
    return 0;

qvec = tvec.cross(edge1);
*v = dir.dot(qvec);
if (*v < 0.0 || *u + *v > det)
    return 0; // ... code continues
...