你如何实际制作一个八叉树(体素)?

时间:2011-09-05 15:40:43

标签: arrays voxel octree

我见过创建八叉树的代码,添加和删除它们的数据,但是如何实际构建八叉树?是否有3d体素软件将保存到某种类型的数组,然后可以转换为八叉树?或者你可以直接保存到八叉树?

2 个答案:

答案 0 :(得分:0)

取决于您的实施 -

如果你使用oct-tree来细分空间,那么你通常会在它上面抛出一堆V3,一旦一个节点有超过一定数量的点,你就细分并重新分配它们。

如果您正在寻找存储我的世界风格体素的方法,那么您将细分直到您的体素大小达到1:1,并将您的数据存储在叶节点中。

数据的来源取决于您 - 八进制是一种存储,操作和搜索数据的方式,而不是文件格式。

答案 1 :(得分:0)

八叉树中的每个节点都有一个点。这些节点被分解为(你猜对了)八个子节点。这些节点又包含每个单个点。

一般情况下,你不要将你的顶点的所有添加到八叉树,除非你正在进行一些不明智的碰撞检测,其中每个顶点都计数...不是你不能做到的那么快,但它仍然比较少数量的节点给出的近似慢。 (对于几乎所有事情都是如此,近似更快)。

同样,如果您正在以高质量的八叉树进行渲染,那么应该拥有与点数一样多的节点。

现在回答:

  1. 创建一个带有边界框的根节点,该边界框将它从中心包围起来。

  2. 插入每个点。这应该在相关方向上细分八叉树。

    1. 当您插入这些点时,数据将进一步向下移动到更紧密地封装模型的叶节点。
    2. 此外,在细分时,每个后续节点的边界框都会减半。
  3. 如果确实想要保存它,你可以保存顶点(编号),然后让你的程序记下节点之间的各种连接,并将顶点写到磁盘上,它们将在那里能够在大致相同的时间内从头开始构建八叉树。
  4. 无论如何,我希望我回答你的问题。