一:包围盒检测

包围盒检测是计算机视觉和图形学中常用的一种技术,用于确定物体在图像或三维空间中的位置和大小。常见的包围盒检测方法包括以下几种:

  1. 轴对齐包围盒(Axis-Aligned Bounding Box, AABB)
  • 定义:AABB是一个平行于坐标轴的长方体,它完全包含了一个物体。
  • 应用:常用于碰撞检测和场景分割,因为其计算简单且高效。
  • 优点:计算容易,性能高。
  • 缺点:可能不够紧凑,对于旋转物体的检测精度较低。
  1. 有向包围盒(Oriented Bounding Box, OBB)
  • 定义:OBB是一个能够围绕物体旋转的长方体,适应物体的旋转状态。
  • 应用:用于需要更精确包围的场景,例如物体碰撞检测和场景分析。
  • 优点:能更紧密地包围物体,比AABB更准确。
  • 缺点:计算复杂度较高,需要处理旋转矩阵和更多的数学运算。
  1. 最小包围球(Minimum Bounding Sphere, MBS)
  • 定义:MBS是一个最小的球体,它能够完全包含一个物体。
  • 应用:常用于三维物体的碰撞检测和物体分组。
  • 优点:可以有效处理任意形状的物体,计算简单。
  • 缺点:包围体积可能大于实际物体,导致某些场景下的检测不够紧凑。
  1. 最小包围椭球(Minimum Bounding Ellipsoid)
  • 定义:最小包围椭球是一个最小的椭球体,它能够完全包含一个物体。
  • 应用:用于处理具有复杂形状的物体,适合需要更精确包围的场景。
  • 优点:比包围球更能紧密包围物体。
  • 缺点:计算复杂度高,通常需要使用优化算法进行求解。
  1. 基于深度学习的包围盒检测
  • 定义:使用深度学习模型(如卷积神经网络)来自动学习和预测包围盒的参数。
  • 应用:广泛应用于目标检测任务中,如YOLO、SSD等模型中的边界框回归。
  • 优点:能够自动适应不同的物体和场景,精度较高。
  • 缺点:需要大量的标注数据进行训练,计算开销较大。

这些方法各有优缺点,具体应用时选择合适的包围盒检测方法可以显著提高检测效率和准确性。


二:分离轴定理碰撞检测(任意的一个平面的投影不重合就可以找到一条线给两个物体分开)

凸多边形:多边形的任意两个点的连线在图形内部。每个内角都是小于180度。

现有的碰撞检测的方法_深度学习

凹多边形:至少一个内角大于180度。

分离轴定理(Separating Axis Theorem, SAT)是一种用于检测二维和三维物体碰撞的方法。其基本原理是:如果两个凸形物体在某个轴上的投影存在重叠,则这两个物体碰撞;否则,它们不碰撞。SAT的关键步骤包括:

  1. 选择分离轴:对于二维物体,选择物体边缘的法向量作为分离轴;对于三维物体,还需要考虑各物体面的法向量以及边缘的法向量。
  2. 投影到分离轴:将物体的顶点投影到选定的分离轴上,得到各物体在该轴上的投影区间。
  3. 检查重叠:比较两个物体在该轴上的投影区间是否重叠。如果在任意一个分离轴上投影区间不重叠,则物体不碰撞;如果所有分离轴上的投影区间都有重叠,则物体碰撞。

SAT方法适用于凸形物体的碰撞检测,特别是在计算机图形学和物理模拟中广泛使用。


三:深度缓冲区碰撞检测

深度缓冲区检测方法(Depth Buffering)是一种在计算机图形学中用于处理三维场景中物体的遮挡关系的方法。它基于深度缓冲区(也称为Z缓冲区)来确定哪些物体或像素应该在屏幕上显示,哪些应该被遮挡。以下是深度缓冲区检测的基本原理和步骤:

基本原理

深度缓冲区用于存储每个像素的深度信息,即从视点到像素的距离。通过比较不同物体在同一像素位置的深度值,深度缓冲区能够确定哪个物体在前面,哪个物体被遮挡。

步骤

  1. 初始化深度缓冲区
  • 在渲染开始前,深度缓冲区通常被初始化为最大值(例如,无穷远),这意味着在渲染过程中所有像素都视为空的。
  1. 渲染每个像素
  • 对于每个像素,计算其深度值(通常是从视点到该像素的距离)。这个计算是在顶点着色器和片段着色器中完成的。
  1. 深度比较和更新
  • 对每个像素,通过将计算得到的深度值与当前深度缓冲区中存储的深度值进行比较,决定是否更新深度缓冲区和颜色缓冲区。
  • 如果当前像素的深度值小于深度缓冲区中的深度值(即当前像素距离视点更近),则更新深度缓冲区和颜色缓冲区,显示当前像素的颜色。
  • 如果当前像素的深度值大于深度缓冲区中的深度值(即当前像素距离视点更远),则不更新缓冲区,当前像素被认为被其他物体遮挡。
  1. 渲染完成
  • 渲染完成后,深度缓冲区中的信息可以用于后续的图像处理步骤,如阴影计算、后期处理等。

优点和缺点

  • 优点
  • 简单有效:深度缓冲区提供了一种直接且高效的方法来处理遮挡问题。
  • 广泛支持:几乎所有现代图形硬件和渲染引擎都支持深度缓冲区。
  • 缺点
  • 精度问题:深度缓冲区的精度有限,可能会导致深度冲突或“锯齿效应”。
  • 性能影响:对于复杂场景或高分辨率图像,深度缓冲区的计算和存储需求可能较高。

深度缓冲区检测方法是三维图形渲染中的核心技术,能够有效处理复杂场景中的遮挡问题,使得最终的图像能够真实地反映物体的可见性。


四:光线投射碰撞检测

射线碰撞检测是一种常用的高级碰撞检测技术,通过发射一条从物体中心延伸出去的“射线”,来检测射线与其他物体的碰撞情况。在Unity中,Raycast() 方法常被用于光线投射碰撞检测,返回的结果包括碰撞物体、碰撞点等信息。这种技术常用于射击类游戏中的子弹碰撞检测等场景。


五:网格碰撞检测

基于网格的碰撞检测

1)碰撞检测有两种常用方法:将所有物件两两测试,当物件数量少的时候,用这种方式既简单又快速; 基于网格检测,先将整个区域划分成格子,再基于格子检测,遍历所有格式,先检查本格中的所有物件,再将本格和相邻格中的物件一一检测,当物件数量多时,需要用这种方式进行检测,将大大减少检测数量;

2)划分格式时,应确保格子的尺寸比“最大的物件”尺寸还要大,必须能保证格式一定能将物件包住;

3)每个格子在检测时,只用检测“右边”、”左下边“、”下边“、”右下边“这四个格子就行,不用检测周边的八个格子;

  1. 用一维数组来保存格子,通过在索引上做文章来识别它以属于第几行,这样能提高性能。