Graphics 用于截锥剔除的松散八叉树-需要一些建议吗

Graphics 用于截锥剔除的松散八叉树-需要一些建议吗,graphics,tree,culling,Graphics,Tree,Culling,我正在我的引擎中实现动态对象的截锥剔除,并且已经尽可能多地阅读了关于“松散八叉树”的内容。不幸的是,大多数信息来源都很模糊,实际上只是很多人在帖子中说他们有多优秀,他们给出了O(1)的插入和删除,但没有解释背后的任何逻辑 我理解的主要原则是,八分之一被视为比它们更大,松散因子可以高达2。这意味着可以根据对象的大小将其插入到单个节点中。问题是很多文章没有使用2的“k因子”(可能是为了更紧密地拟合),因此失去了快速插入/删除功能;相反,它们保持邻接结构,以便您可以在给定深度遍历所有节点,并使用每个节

我正在我的引擎中实现动态对象的截锥剔除,并且已经尽可能多地阅读了关于“松散八叉树”的内容。不幸的是,大多数信息来源都很模糊,实际上只是很多人在帖子中说他们有多优秀,他们给出了O(1)的插入和删除,但没有解释背后的任何逻辑

我理解的主要原则是,八分之一被视为比它们更大,松散因子可以高达2。这意味着可以根据对象的大小将其插入到单个节点中。问题是很多文章没有使用2的“k因子”(可能是为了更紧密地拟合),因此失去了快速插入/删除功能;相反,它们保持邻接结构,以便您可以在给定深度遍历所有节点,并使用每个节点测试对象的中心

我只需要一个粗略的剔除测试,我想有O(1)的插入时间,并已计算出一个对象应该插入的深度(水平)的公式。但是,我找不到任何文章讨论从对象的大小和位置计算精确节点的公式

我是否完全误解了算法,是否在寻找不可能的东西?如果有人能给我指出任何好的论文或文章(我读过),那就太好了

PS值得一提的是,我使用的是存储在一维数组中的线性八叉树


谢谢你的帮助你不是说在八叉树中进行多维搜索吗?空间填充曲线呢?

我在gamedev论坛上得到了答案。我要找的方程式其实很简单


int NodeIndex=深度*(bb.center.x/sceneBB.width)

我认为空间填充曲线在截锥剔除中并不常见(不知道确切原因,但我认为一定有原因)。实际上,主要的问题是试图找到一个对象的中心点和树中的一个节点之间的关系(在计算出深度之后)。例如,由完整树表示的大小为100x100x100的世界在深度级别1(0为根级别)将有大小为60的对象。我听说过一种方法,可以在该级别上计算出要插入的节点,而不必在该级别上循环所有节点(并且必须保持复杂的兄弟关系)。是的,但是你忘了给我投票,而且一条空间填充曲线被用来检测合并,如果你不使用递归算法,插入到sfc树中是非常简单的。显然,在我15岁之前我不能给你投票(什么是声誉?XP?lol)。不过,我会更深入地研究曲线。我只是希望使用我已有的代码:(我所做的是一个kart-trie。它是一个基数trie或crit-bit-trie。分割节点的决定是基于这个位置的二进制键,这意味着如果它是1,那么是右节点,或者如果它是0,那么是左节点。我不知道它是如何在八叉树中求解的,而且我给你的建议可能比你要求的更复杂!我正在读一篇文章。)关于前几天使用八叉树键。我相信我可以找到解决问题的方法。即使我只需要遍历一些节点。为你的帮助干杯-抱歉我不能投票支持你。谢谢,伙计!祝你的项目好运!这里是另一个好的外观(我不太了解,但我认为它可以帮助你):