【问题标题】:how to convert from octree to a linear array with cache?如何从八叉树转换为带缓存的线性数组?
【发布时间】:2016-04-08 01:36:01
【问题描述】:

我有一个 3d 网格(稀疏八叉树),其中每个叶子(最深节点)存储一个带颜色的 3d 点。我想把整个八叉树转换成3d点的线性数组(顶点缓冲区),可以直接上传到OpenGL。

以一种天真的方式,我可以遍历八叉树的所有节点并填充线性数组。

现在,我面临的问题是,当我向稀疏八叉树添加新的 3d 点并想要更新顶点缓冲区时,我必须遍历整个八叉树才能将数据导入 OpenGL。

有没有人知道如何在只更新/添加几个点时避免完整的迭代?

我能想到的唯一方法是记住八叉树中的哪些元素已添加,并将它们直接附加到顶点缓冲区数组。这会更好,但是当我从八叉树中删除一个元素时就不起作用了。

我使用 C++。

【问题讨论】:

    标签: opengl caching vertex-buffer octree


    【解决方案1】:

    也许您可以在样本中保留一个索引(它在顶点缓冲区中的位置)。当您从八叉树中删除样本时,这将允许您从数组中删除样本。

    所以整个算法将如下进行:

    顶点数组

    • 插入(点,样本)

      • sample.idx = vertex_array.push(point)
      • InsertToOctree(点,样本)
    • 移除(样本)

      • RemoveFromOctree(示例)
      • vertex_array.remove(sample.idx)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多