计算机图形学-AABB碰撞检测算法

AABB碰撞检测算法

参考:
  1. learn OpenGL 碰撞检测
    https://learnopengl-cn.github.io/06%20In%20Practice/2D-Game/05%20Collisions/02%20Collision%20detection/
AABB碰撞检测算法思想 【计算机图形学-AABB碰撞检测算法】AABB碰撞检测指轴对齐碰撞箱(Axis-aligned Bounding Box),是分别从x轴向和y轴向进行碰撞检测的算法。即对于需要检测的物体A和物体B我们需要将其用A盒和B盒套起来,判断A盒和B盒在x轴向和y轴向是否发生碰撞,只有在x轴向和y轴向都发生碰撞我们才判断它发生了碰撞。
计算机图形学-AABB碰撞检测算法
文章图片

判断x单轴向是否发生碰撞
  1. 在xy轴向上最小值是左下角,最大值是右上角
  2. 令length_x1 = A盒的左下角x值 - B盒的右上角x值
  3. 令length_x2 = A盒的右上角x值 - B盒的左上角x值
  4. 若length_x1和length_x2一正一负则x轴向发生了碰撞
若x轴单轴向和y轴单轴向都发生了碰撞,则A,B盒发生了碰撞。
代码实现
// 使用cpp实现 GLboolean CheckCollision(GameObject &one, GameObject &two) // AABB - AABB collision { // x轴方向碰撞? bool collisionX = one.Position.x + one.Size.x >= two.Position.x && two.Position.x + two.Size.x >= one.Position.x; // y轴方向碰撞? bool collisionY = one.Position.y + one.Size.y >= two.Position.y && two.Position.y + two.Size.y >= one.Position.y; // 只有两个轴向都有碰撞时才碰撞 return collisionX && collisionY; }

    推荐阅读