我选择了基于堆栈的遍历算法(递归射线遍历算法),但在理解它时遇到了一些麻烦。

这是我的理解。

我需要找到射线进入体素的点(然后计算射线起点与该点的距离),射线退出体素(然后计算射线起点与该点之间的距离),射线起点与平面之间的距离(在某些论文中我看了公式:

(splitPoint - rayOrigin[currentAxle]) / rayOrientation[currentAxle]

我的射线方向是(0, 0, -1),然后在某些情况下,我将被零除(因为x = 0y = 0)。怎么会这样?

在算法的初始化过程中,射线源位于主体素中,如何获得射线进入体素的距离?

我理解正确吗?有人可以解释吗?

最佳答案

来自《从理论到实现的基于物理的渲染》一书。


在两种情况下,节点的两个子节点都不需要处理,因为射线
不重叠。

(a)顶射线与分割平面相交,超出了射线的 t_max 位置,因此不会进入远子。底射线背向分裂平面,由 t_split 负值表示。

(b)光线在光线的 t_min 值之前与平面相交,表明附近的孩子不需要进行处理。

关于tree - 递归射线遍历算法-遍历k-d树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6552210/

10-09 14:17