我选择了基于堆栈的遍历算法(递归射线遍历算法),但在理解它时遇到了一些麻烦。
这是我的理解。
我需要找到射线进入体素的点(然后计算射线起点与该点的距离),射线退出体素(然后计算射线起点与该点之间的距离),射线起点与平面之间的距离(在某些论文中我看了公式:
(splitPoint - rayOrigin[currentAxle]) / rayOrientation[currentAxle]
我的射线方向是
(0, 0, -1)
,然后在某些情况下,我将被零除(因为x = 0
和y = 0
)。怎么会这样?在算法的初始化过程中,射线源位于主体素中,如何获得射线进入体素的距离?
我理解正确吗?有人可以解释吗?
最佳答案
来自《从理论到实现的基于物理的渲染》一书。
在两种情况下,节点的两个子节点都不需要处理,因为射线
不重叠。
(a)顶射线与分割平面相交,超出了射线的 t_max 位置,因此不会进入远子。底射线背向分裂平面,由 t_split 负值表示。
(b)光线在光线的 t_min 值之前与平面相交,表明附近的孩子不需要进行处理。
关于tree - 递归射线遍历算法-遍历k-d树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6552210/