【发布时间】:2019-04-12 04:49:01
【问题描述】:
我的 Google-fu 只找到了一个返回射线和三角形交点的结果: http://geomalgorithms.com/a06-_intersect-2.html
而且我完全没有运气编译它。我已经为点/向量做了这个:
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;
“运算符不匹配-(操作数类型为Point和Point)”
然后我把所有的代码都改写成这样:
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 中这样做,也不愿链接一些向量库。谢谢!
【问题讨论】:
-
Operator overloading的可能重复
-
您需要定义算术运算符,例如
operator+、operator-等。 -
@SouravGhosh:
T显然是Triangle。 -
@TonyK 我不明白它对你来说是如何明显的。我已经看到了由这种明显信念引起的成千上万的错误。是的,我评论中的“呵呵”部分是错字,应该是
here。 -
只是为了好奇:不是有2个交叉点吗?
标签: c++ c collision-detection raytracing