📜  二元空间分区

📅  最后修改于: 2021-09-06 05:18:24             🧑  作者: Mango

二元空间分区的实现是通过使用超平面作为分区递归地将空间细分为两个凸集。这种细分过程产生了空间内对象以树数据结构的形式表示,称为 BSP 树。
二进制空间分区出现在 1969 年的 3D 计算机图形环境中,其中 BSP 树的结构允许有关场景中对象的空间信息,这对渲染很有用,例如对象从前到后排序给给定位置的观众,以便快速访问。

二元空间分区的需求

二元空间分区产生于计算机图形学需要快速绘制由多边形组成的三维场景。绘制此类场景的一种简单方法是画家算法,该算法按照与观察者的距离、从后到前、在背景上绘画以及每个较近对象的先前多边形的顺序生成多边形。这种方法有两个缺点:按从后到前的顺序对多边形进行排序所需的时间,以及重叠多边形的可能性。 Fuchs 和合著者表明,通过提供一种根据给定视点(场景中的多边形数量呈线性)对多边形进行排序的快速方法,并通过细分重叠多边形以避免错误,构建 BSP 树解决了这两个问题。可以用画家的算法发生。

BSP 概述

二元空间划分被视为将场景递归划分为两个直到划分满足一个或多个要求的通用过程。它可以被视为其他空间树结构的概括,例如 kd 树和四叉树,其中划分空间的超平面可以具有任何方向,而不是像在 kd 树或四叉树中那样与坐标轴对齐。
当在计算机图形中实现渲染由平面多边形组成的场景时,经常选择分区平面以与场景中的多边形定义的平面重合。划分平面的具体选择和完成划分过程的标准因BSP树的目的而异。
例如:在计算机图形渲染中,场景被分割,直到并且除非 BSP 树的每个节点仅由可以以任意顺序渲染的多边形组成。当实施背面剔除时,每个节点因此由一组凸多边形组成,而在渲染双面多边形时,BSP 树的每个节点仅由单个平面中的多边形组成。

从多边形列表生成 BSP 树的算法

  • 从列表中选择一个多边形 P。
  • 在 BSP 树中创建一个节点 N,并将 P 添加到该节点的多边形列表中。
  • 对于列表中的每个其他多边形:
    • 如果该多边形完全位于包含 P 的平面前面,则将该多边形移动到 P 前面的节点列表中。
    • 如果该多边形完全位于包含 P 的平面后面,则将该多边形移动到 P 后面的节点列表中。
    • 如果该多边形与包含 P 的平面相交,则将其拆分为两个多边形并将它们移动到 P 前后的相应多边形列表中。
    • 如果该多边形位于包含 P 的平面内,则将其添加到节点 N 处的多边形列表中。
  • 将此算法应用于 P 前面的多边形列表。
  • 将此算法应用于 P 后面的多边形列表。

BSP的缺点

  • 生成 BSP 树可能很耗时。
  • BSP 不解决可见表面确定的问题。

BSP的用途

  • 它用于 3D 视频游戏和机器人技术中的碰撞检测。
  • 它用于光线追踪
  • 它涉及复杂空间场景的处理。

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live