3Da*_*ave 6 c# xna sparse-array hlsl octree
任何人都可以建议一种快速,有效的存储和访问稀疏八叉树的方法吗?
优选地,可以在HLSL中容易地实现.(我正在使用光线投射/体素应用)
在这种情况下,树可以预先计算,所以我主要关心的是大小和搜索时间.
更新
对于任何想要这样做的人来说,更有效的解决方案可能是将节点存储为使用Z阶曲线/ Morton树生成的线性八叉树.这样做可以消除内部节点的存储,但可能需要使用第二个"数据纹理"交叉引用线性树阵列,其中包含有关单个体素的信息.
我对 HLSL 的经验不是很丰富,所以我不确定这是否能满足您的需求,以下是我的想法。如果这里的某些内容不符合您的需求,请告诉我 - 我想讨论一下,这样也许我可以自己学习一些东西。
因此,首先,构建八叉树并用您的对象填充它。然后,只需遍历八叉树,将向量输出到内存缓冲区。
我认为 512x512 纹理可以容纳完全打包的 5 层深度的八叉树(32,768 个节点),每个层包含 8 个对象。或者,一个完全打包的 4 层八叉树,每个八叉树包含 64 个对象。