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

AABB碰撞检测算法

参考:

  1. learn OpenGL 碰撞检测
    https://learnopengl-cn.github.io/06%20In%20Practice/2D-Game/05%20Collisions/02%20Collision%20detection/

AABB碰撞检测算法思想

AABB碰撞检测指轴对齐碰撞箱(Axis-aligned Bounding Box),是分别从x轴向和y轴向进行碰撞检测的算法。即对于需要检测的物体A和物体B我们需要将其用A盒和B盒套起来,判断A盒和B盒在x轴向和y轴向是否发生碰撞,只有在x轴向和y轴向都发生碰撞我们才判断它发生了碰撞。

计算机图形学-AABB碰撞检测算法_第1张图片

判断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;
}  

你可能感兴趣的:(图形渲染)