你的问题没有明确的答案。这完全取决于您的数据是如何组织的。
要记住的事情:
四叉树最适合主要是二维的数据,例如导航系统中的地图渲染。在这种情况下,它比八叉树更快,因为它更好地适应几何形状并保持节点结构较小。
如果数据是三维的,八叉树和 BVH(边界体积层次结构)会受益。如果您的几何实体聚集在 3D 空间中,它也能很好地工作。(参见Octree vs BVH)(存档自原来的)
Oc- 和 Quadtrees 的好处是您可以随时停止生成树。如果您想使用图形加速器渲染图形,它只允许您在对象级别上生成树,并在单个绘制调用中将每个对象发送到图形 API。这比发送单个三角形要好得多(如果您完全使用 BSP-Trees,您必须这样做)。
BSP-Trees 确实是一个特例。它们在 2D 和 3D 中工作得非常好,但是生成好的 BSP-Trees 本身就是一种艺术形式。BSP 树的缺点是您可能必须将几何体分割成更小的部分。这可以增加数据集的整体多边形数。它们非常适合渲染,但它们更适合碰撞检测和光线追踪。
BSP 树的一个很好的特性是它们将多边形汤分解成一个结构,该结构可以从任何相机位置完美地从前到后渲染(反之亦然),而无需进行实际排序。每个视点的顺序是数据结构的一部分,并在 BSP-Tree 编译期间完成。
顺便说一句,这就是它们在 10 年前如此受欢迎的原因。Quake 使用它们是因为它允许图形引擎/软件光栅化器不使用昂贵的 z 缓冲区。
所有提到的树都只是树的家族。还有松散的八叉树、kd-trees 混合树以及许多其他相关结构。