轴对齐矩形边界框的相交检测比较简单,下面以 min、max 表示的AABB相交判断。
3D不好绘制,依然以2D为例,看下图
两个 AABB: A 和 B 相交的情况,B 的 Bmax 包含在了 A 的 Amin 和 Amax 内。同理另一种情况就是 Amax 包含在了 Bmin和 Bmax 之间。
判断逻辑也可以判断不相交的情况:分别判断 x、y、z 三个坐标值,
Bmax.x < Bmin.x || Amin.x > Bmax.x 则不相交
Bmax.y < Bmin.y || Amin.y > Bmax.y 则不相交
Bmax.z < Bmin.z || Amin.z > Bmax.z 则不相交
判断逻辑如下
public class AABBIntersect
{
public bool IsIntersect(AABB a, AABB b)
{
if (a.max.x < b.min.x || a.min.x > b.max.x)
{
return false;
}
if (a.max.y < b.min.y || a.min.y > b.max.y)
{
return false;
}
if (a.max.z < b.min.z || a.min.z > b.max.z)
{
return false;
}
return true;
}
}