c++ - 编译三角形交集代码?

标签 c++ c collision-detection raytracing

我的 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/

相关文章:

c++ - glUseProgram() 和 glUseShaderProgram() 有什么区别?

c++ - 简洁可以保存哪些错误?

C fgets 没有得到全文

c - 如果数组中存在 0 到 n-1 范围内的所有元素,则返回 0 或 1 的函数,运行时间 O(n)

c# - Bullet 中的凹面碰撞检测

c++ - 无序集删除/插入循环

模板的 C++ 链接错误,仅使用头文件,为什么?

c - 在此代码中,字符串不是第一次读取

sprite-kit - iOS SpriteKit - 碰撞和接触未按预期工作

pygame Pong - 如何归因我的评分系统和碰撞检测