求教OpenGL红宝书第五章的碰撞检测算法的原理

代码如下:

bool intersect(vec3 origin, vec3 direction, vec3 v0, vec3 v1, vec3 v2, out vec3 point)
            {
                vec3 u, v, n;
                vec3 w0, w;
                float r, a, b;
                u = (v1 - v0);
                v = (v2 - v0);
                n = cross(u, v);
                a = -dot(n, w0);
                b = dot(n, direction);
                r = a / b;
                if (r < 0.0 || r > 1.0)
                    return false;
               point = origin + r * direction;
               float uu, uv, vv, wu, wv, D;
               uu = dot(u, u);
               uv = dot(u, v);
               vv = dot(v, v);
               w = point - v0;
               wu = dot(w, u);
               wv = dot(w, v);
               D = uv * uv - uu * vv;
               float s, t;
               s = (uv * wv - vv * wu) / D;
               if (s < 0.0 || s > 1.0)
                   return false;
               t = (uv * wu - uu * wv) / D;
               if (t < 0.0 || (s + t) > 1.0)
                   return false;
               return true;
            }

函数参数中origin 是点的起始位置,direction是运动方向,v0、v1、v2是一个三角平面的三个顶点。从a = -dot(n, w0);这里我就不太懂了,请大神看看。
我个人的理解是求出三角平面的法向量n后,根据点的初始位置及运动方向判断是否和平面相交。但是使用的代码原理我看不懂。

c++
zzllvlv
zzllvlv 终于搞明白了,原来他是先判断点按照移动方向是否与三角形所在平面发生交集,再判断是否和三角形内部发生交集
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问