感觉八叉树在处理地形的时候,虽然比四叉树多上一个维度,但是难度却大了许多。大概有这样几个方面:
1。地形的几何信息如何划分。如果是四叉树,很简单的,可以用块来划分,直接串起来,形成一个三角带。在x,y轴方向上,划分成多个格,这种做法是很简单的,只用指定“格”中心对应的高度就可以了。而八叉树的划分,却很模糊。在高度上面也需要划分格,这样使得原来三角带的生成难以实现了。
2。如何解决动态更新场景的问题。在四叉树中,根据视截体的位置,进行类似递归的剔除算法,很容易实行,而且,添加和删除某个结点都十分容易。用八叉树时,这种方法会十分繁琐,复杂度也翻了一倍。
3。如何决定场景管理的策略。在动态的添加和删除某个结点的时候,需要有某一种策略,以保证八叉树的结构不会进行大的改变,因为任何对于八叉树整体结构的改变,都会比较的影响引擎的效率。这种策略的选择,似乎没有“银弹”,而且,在室外场景中,和在室内场景中,会有一定的不同。
既然这么麻烦,有何必选择八叉树呢? 原因还是在于效率。仅渲染的部分而言,可能场景管理的结构越简单越高效,但是考虑了物理的部分以后,情况则完全不同了。物理的模拟,无法像渲染一样,在远处的物体,看不见的物体,就不进行模拟,或者只进行简单地模拟。也即是说,物理的模拟是不存在LOD的。而且,我们需要一种场景管理,能够有效的对物理的模拟进行优化,一般而言,我们最需要的是碰撞检测的优化,而这个方面,八叉树可能是比较好的(可行的还有二叉树)。如果渲染部分的场景管理和物理的场景管理采用的是相同的结构,可以避免很多的问题,而且在每一祯内只用一次遍历场景八叉树。这些都是八叉树做场景管理的优势。