BVH树 - 确定子节点交叉顺序的方法?

时间:2018-01-26 07:43:16

标签: raytracing

只是提到我的数学技能不是很好,我需要在这里寻求一些帮助!

我现在正在尝试使用本文实现无栈的BVH遍历功能: https://graphics.cg.uni-saarland.de/fileadmin/cguds/papers/2011/hapala_sccg2011/hapala_sccg2011.pdf

我正在使用它,除非我可能没有两个子遍历顺序正确导致错误的图像。

在点(3算法大纲)中,他们提到了几种确定正确顺序的方法:

  

对于遍历顺序,有各种不同的选择。一   常用选项是为每个节点存储坐标轴   构建器拆分父节点,并使用光线   方向标记此维度以确定两个节点的遍历   顺序。

假设我对X,Y,Z和光线方向的分割轴索引为0,1,2 ...它可以通过计算动态上两个节点质心的最大分离轴来确定分割轴我也有......

那么,问题是通过使用光线方向和分割轴来确定节点遍历顺序的方式(数学)是什么?

1 个答案:

答案 0 :(得分:0)

  

使用此维度中的光线方向符来确定两个节点的遍历顺序。

假设您的光线方向为(0.707, 0, -0.707)

对于那条光线:

如果您确定父级的分割轴为X(即两个孩子在YZ平面上共享边界),则您在X的光线方向指示为正({{ 1}}),你应该遍历质心首先具有较高0.707质心坐标的孩子。

如果您确定父级的分割轴为X(即两个孩子在Y平面上共享边界),那么XZ中光线的方向是无符号的({{1并且你必须决定做什么。在这种情况下你所做的细节取决于你(选择方向,移动到下一个坐标等),但始终如一的行为是关键。

如果您确定父级的分割轴为Y(即,儿童在0平面上共享边界),则Z中光线的方向为负({{1你应该首先遍历其质心的XY坐标较低的孩子。