2

我正在使用 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 需要等于零才能使平面和射线(在我正在看的点)相交?我可以用方向向量坐标来表示线上的那个点吗>

4

1 回答 1

4

对于平面上的任何一点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)
于 2013-02-20T05:04:01.083 回答