【问题标题】:How do you actually MAKE an octree(for voxels)?您实际上如何制作八叉树(用于体素)?
【发布时间】:2011-09-05 15:40:43
【问题描述】:

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

【问题讨论】:

    标签: arrays voxel octree


    【解决方案1】:

    取决于您的实施 -

    如果您使用八叉树来细分空间,那么通常您会向其扔一堆 V3,一旦一个节点中包含超过一定数量的点,您就可以细分并重新分配它们。

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

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

    【讨论】:

      【解决方案2】:

      八叉树中的每个节点都有一个点。这些节点被分成(你猜对了)八个子节点。这些节点依次包含一个点。

      一般来说,你不会将 所有 的顶点添加到八叉树中,除非你正在做一些不合时宜的碰撞检测,其中每个顶点都很重要……并不是说你做不到那么快,但它仍然比由较少数量的节点给出的近似值慢。 (几乎所有事物都是如此,近似值更快)。

      同样,如果您要以高质量的八叉树进行渲染,则节点数可能与点数一样多。

      现在开始回答:

      1. 使用从中心包围它的边界框创建一个根节点。

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

        1. 当您插入这些点时,数据将进一步向下移动到叶节点中,从而更紧密地封装您的模型。
        2. 此外,当您细分时,每个后续节点的边界框都会减半。
      3. 如果您真的想要保存它,您可以保存顶点(编号),然后让您的程序将节点之间的各种连接和顶点记录到磁盘上,它们将存放在磁盘上能够在与从头开始构建八叉树大致相同的时间内加载。

      无论如何,我希望我回答了你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多