c++ - 用于重建的存储效率最高的八叉树结构是什么?

标签 c++ algorithm memory tree octree

我已经编写了完整的八叉树实现,没有对 3D 重建进行太多优化,但是,树结构包含太多指针,并且无法支持超过 256^3 体素。

理论上,对于非树结构,如果我使用 vector<bool>每个体素使用 ~1 位,这更容易接受,因为非树结构可以支持 2k^3 和 8GB 内存。

然而,优化的八叉树结构应该能够做到等于或更好,因为:

  1. 它不必存储每个体素,因为压缩可以允许压缩附近的相同值体素。

  2. 它不应该使用太多的指针,因为指针本身已经使用了相当数量的字节。

  3. 八叉树必须具有相当低的节点/体素比率

对于完整的八叉树,节点号可以计算为 (s^3 -1) / 7s是体积分辨率,是 2 的幂。例如,如果 s = 4 ,我需要1 + 8 = 9八叉树中的节点来表示 4x4x4 体素网格。

有人知道符合这些规范的 C++ 八叉树实现吗?

最佳答案

我认为八叉树是一种可行的方法,但仅在需要时才应构建子节点(至少设置一个体素)。此外,应该使用压缩。通常相邻体素具有相同的值,因此 RLE 压缩似乎效果很好。本论文对此进行了解释http://www.terathon.com/voxels/

关于c++ - 用于重建的存储效率最高的八叉树结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14470507/

相关文章:

c++ - glibc malloc() 总字节数

c++ - 使用 std::partition 对 vector 进行分区

algorithm - 求解一个简单的线性方程

c++ - 模板类静态成员变量的隐式初始化

algorithm - 找出三个出现次数为偶数的唯一数字

c# - 堆栈溢出与快速排序实现

javascript - 预览内存中的内容 (javascript)

ios - Swift 项目比我预期的要大

c++ - 带指针的数组分区

c++ - 创建自定义上下文菜单窗口 (WinAPI)