我的 Google-fu 只找到了一个返回射线和三角形之间交点的结果: http://geomalgorithms.com/a06-_intersect-2.html
而且我完全没有运气编译它。我已经为点/vector 做了这个:
typedef struct {
float x, y, z;
} Vector;
typedef struct {
float x, y, z;
} Point;
typedef struct {
Vector P0, P1;
} Ray;
typedef struct {
Point V0, V1, V2;
} Triangle;
然后它抛出关于这段代码的错误:
u = T.V1 - T.V0;
v = T.V2 - T.V0;
n = u * v;
“不匹配运算符-(操作数类型为点和点)”
然后我重写了所有代码,如下所示:
u.x=T.V1.x-T.V0.x;
u.y=T.V1.y-T.V0.y;
u.z=T.V1.z-T.V0.z;
v.x=T.V2.x-T.V0.x;
v.y=T.V2.y-T.V0.y;
v.z=T.V2.z-T.V0.z;
n.x=u.x*v.x;
n.y=u.y*v.y;
n.z=u.z*v.z;
但它仍然说射线 { 3, 1, -3 } { 3, -1, -3 } 不在三角形内 { -10, 0, -10 } { 10, 0, 10 } { 10, 0, -10}。不过,我在 Blender 中对此进行了检查,光线确实与三角形相交。
任何人都可以指出我做错了什么,或者链接到另一个具有返回线段与三角形相交点的函数的页面吗?我宁愿在 C 中执行此操作,也不愿链接一些 vector 库。谢谢!
最佳答案
问题是:
n = u * v;
这必须解释为 vector 乘积 n = u x v,而不是分量乘法。
关于c++ - 编译三角形交集代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594393/