Opengl 如何将八叉树转换为带缓存的线性阵列?

Opengl 如何将八叉树转换为带缓存的线性阵列?,opengl,caching,vertex-buffer,octree,Opengl,Caching,Vertex Buffer,Octree,我有一个3d网格(稀疏八叉树),其中每个叶子(最深的节点)存储一个带有颜色的3d点。我想将整个八叉树转换为三维点的线性阵列(顶点缓冲区),可以直接上传到OpenGL 以一种简单的方式,我可以遍历八叉树的所有节点并填充线性数组 现在,我面临的问题是,当我向稀疏八叉树添加新的3d点并想要更新顶点缓冲区时,我必须迭代整个八叉树,以便将数据输入OpenGL 当只更新/添加了几个点时,有人知道如何避免整个迭代吗 我能想到的唯一方法是记住八叉树中添加了哪些元素,并将它们直接附加到顶点缓冲区数组中。这会更好,

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

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

现在,我面临的问题是,当我向稀疏八叉树添加新的3d点并想要更新顶点缓冲区时,我必须迭代整个八叉树,以便将数据输入OpenGL

当只更新/添加了几个点时,有人知道如何避免整个迭代吗

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


我使用C++。

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

因此,整个算法将按如下方式进行:

顶点数组

  • 插入(点、样本)

    • sample.idx=vertex\u array.push(点)
    • InsertToOctree(点、样本)
  • 移除(样本)

    • 从八叉树移除(示例)
    • 顶点数组.remove(sample.idx)