C,Ray-plane交叉点的射线追踪器

时间:2013-02-20 04:49:42

标签: c vector intersection

我正在使用C中的光线跟踪器。我正在尝试找出光线平面交点的数学运算。我有

d =((Po-Lo)(点)N)/(L(点)N)

现在,如果我是对的......

n - the planes normal ray
Po = single point on the plane
L = the vector that represents the ray I am shooting
Lo = a point on the line

我很困惑这是如何工作的。如果我逐像素地移动线(Lo)上的点是否需要降落在平面上?如果那是真的我不能用我正在投射的射线(L)的方向向量来表示那个点吗?

我觉得我完全过于复杂,但我完全迷失了如何在我的代码中使用它。

编辑:

d = a scalar in the real world domain.

所以d需要等于零,以便平面和光线(在我正在看的点)相交?我可以使用方向向量坐标来表示该行上的那个点>

1 个答案:

答案 0 :(得分:3)

对于飞机上的任何点p,这个等式都是正确的:

dot(Po-p,N) = 0

对于该行上的任何点p,此等式为真:

p = Lo+L*d

如果该点将在平面上和线上(交点),那么它们都必须为真。因此我们可以替代:

dot(Po-(Lo+L*d),N) = 0

通过做一些代数,我们可以求解d:

dot((Po-Lo)-L*d),N) = 0
dot(Po-Lo,N) - dot(L*d,N) = 0
dot(Po-Lo,N) - d*dot(L,N) = 0
dot(Po-Lo,N) = d*dot(L,N)
d = dot(Po-Lo,N)/dot(L,N)