【发布时间】:2013-02-20 04:49:42
【问题描述】:
我正在使用 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 需要等于 0 才能使平面和射线(在我看到的点)相交?我可以用方向向量坐标来表示线上的那个点吗>
【问题讨论】:
-
d 似乎是一个标量。它代表什么?
-
如果您想在交叉路口时避免一些麻烦,您可以将所有基元存储在局部坐标中(即在具有单位大小的原点)并保持与每个基元相关联的仿射变换(用于旋转、缩放和平移)。当您执行相交逻辑时,您可以对射线进行 inverse 变换并解决简化的相交问题,其中 P0 = 0,L0 = 变换后的射线的原点,N 只是您的向上向量坐标系。然后您可以将生成的交点转换回世界坐标。
-
这个关于线平面相交的答案应该会有所帮助(它与射线平面相交几乎相同),它也引用了 C 代码,stackoverflow.com/a/18543221/432509(并参考确切的功能developer.blender.org/diffusion/B/browse/master/source/blender/…)
标签: c vector intersection