AABB碰撞检测算法
参考:AABB碰撞检测算法思想 【计算机图形学-AABB碰撞检测算法】AABB碰撞检测指轴对齐碰撞箱(Axis-aligned Bounding Box),是分别从x轴向和y轴向进行碰撞检测的算法。即对于需要检测的物体A和物体B我们需要将其用A盒和B盒套起来,判断A盒和B盒在x轴向和y轴向是否发生碰撞,只有在x轴向和y轴向都发生碰撞我们才判断它发生了碰撞。
- learn OpenGL 碰撞检测
https://learnopengl-cn.github.io/06%20In%20Practice/2D-Game/05%20Collisions/02%20Collision%20detection/
文章图片
判断x单轴向是否发生碰撞
- 在xy轴向上最小值是左下角,最大值是右上角
- 令length_x1 = A盒的左下角x值 - B盒的右上角x值
- 令length_x2 = A盒的右上角x值 - B盒的左上角x值
- 若length_x1和length_x2一正一负则x轴向发生了碰撞
代码实现
// 使用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;
}