有人可以建议 快速 ,这是一种存储和访问稀疏八叉树的有效方法吗?
最好能在HLSL中轻松实现的东西。 (我正在使用光线投射/体素应用程序)
在这种情况下,树可以预先计算,所以我主要关注的是大小和搜索时间。
更新
对于任何想要这样做的人来说,更有效的解决方案可能是将节点存储为使用Z顺序曲线/ Morton树生成的线性八叉树。这样做可以消除内部节点的存储,但可能需要使用第二个“数据纹理”交叉引用线性树阵列,其中包含有关单个体素的信息。
答案 0 :(得分:2)
我在HLSL上不是很有经验,所以我不确定这会满足你的需求,这是我的想法。如果这里的某些内容不能满足您的需求,请告诉我 - 我想讨论一下,也许我可以自己学点东西。
因此,首先,构建八叉树并将其与对象一起填充。然后,只需走八叉树,将向量输出到内存缓冲区。
我认为512x512纹理可以容纳5级深度(32,768个节点)的完全打包的八叉树,每个包含8个对象。或者,一个完全打包的4级八叉树,每个都有64个对象。
答案 1 :(得分:1)
关于GPU的稀疏八叉树有一篇很棒的文章:Efficient Sparse Voxel Octrees – Analysis, Extensions, and Implementation