Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 光线跟踪-光线/三角形交点_C++_Raytracing - Fatal编程技术网

C++ 光线跟踪-光线/三角形交点

C++ 光线跟踪-光线/三角形交点,c++,raytracing,C++,Raytracing,检查光线是否与三维三角形相交的算法有问题。它似乎还在它的左上角后面的圆圈里画着。我似乎无法找出我的代码中的什么地方导致了这个小错误 bool Mesh::intersectTriangle(Ray const &ray, Triangle const &tri, Intersection &hit) const{ // Extract vertex position

检查光线是否与三维三角形相交的算法有问题。它似乎还在它的左上角后面的圆圈里画着。我似乎无法找出我的代码中的什么地方导致了这个小错误

    bool Mesh::intersectTriangle(Ray const &ray,
                         Triangle const &tri,
                         Intersection &hit) const{
// Extract vertex positions from the mesh data.
Vector const &p0 = positions[tri[0].pi];
Vector const &p1 = positions[tri[1].pi];
Vector const &p2 = positions[tri[2].pi];


Vector e1 = p1 - p0;
Vector e2 = p2 - p0;
Vector e1e2 = e1.cross(e2);
Vector p = ray.direction.cross(e2);
e1e2.normalized();
float a = e1.dot(p);
if(a < 0.000001)
    return false;

float f =  1 / a;
Vector s = ray.origin - p0;
float u = f*(s.dot(p));
if(u < 0.0 || u > 1.0)
    return false;

Vector q = s.cross(e1);
float v = f * (ray.direction.dot(q));
if(v < 0.0 || u + v > 1.0)
    return false;

float t = f * (e2.dot(q));

hit.depth = t;
hit.normal = e1e2;
hit.position = hit.position *t;
return true;

你有没有想过?对不起,我不记得我有没有想过: