我正在对我的引擎中的动态对象实施视锥体剔除,并且尽可能地阅读“松散的八叉树”。不幸的是,大多数消息来源都很模糊,实际上很多人都说他们有多好,他们给O(1)插入和删除但没有解释它背后的任何逻辑。
我理解八分圆被视为大于它们的主要原则,并且松散因子可以达到2.这意味着可以根据对象的大小将对象插入到单个节点中。麻烦的是很多文章没有使用2的“k因子”(可能是为了更紧密),因此失去了快速插入/删除;相反,他们维护一个邻接结构,这样你就可以遍历给定深度的所有节点,并用每个节点测试对象的中心。
我只需要进行粗略的剔除测试,并且我希望得到O(1)插入时间并计算出用于计算物体应插入的深度(水平)的公式。但是,我找不到任何讨论公式的文章,以根据对象的大小和位置计算精确的节点。
我是否完全误解了算法,我是否在寻找不可能的东西?如果有人能指出任何好的论文或文章(我读过http://tulrich.com/geekstuff/),那就太棒了。
PS值得一提的是,我使用的是存储在一维数组中的线性八叉树
感谢您的帮助
答案 0 :(得分:2)
我在gamedev论坛上得到了答案。我正在寻找的等式实际上非常简单
int NodeIndex = depth *(bb.centre.x / sceneBB.width);
答案 1 :(得分:1)
你不是指八叉树中的多维搜索?空间填充曲线怎么样?