引言
在前面的一篇文章中讲述了如何通过模型的顶点来求的模型的包围球,并且还讲述了基本包围体除了包围球之外,还有AABB包围盒。在这一章,将讲述如何根据模型的坐标求得它的AABB盒。
表示方法
AABB盒的表示方法有很多,总结起来有如下的三种情况:
Max-min表示法:使用一个右上角和左下角的点来唯一的定义一个包围体
Center-radious表示法:我们用center点来表示中点,radious是一个数组,保存了包围盒在x方向,y方向,z方向上的半径。
Min-Width表示方法:我们用min来定义左下角的点,使用width来保存在x,y,z方向上的长度。
不同的方法,他们的碰撞检测算法也会有所不同,并且不同的表示方法也会适用在不同的情形下。所以,大家自己设计的时候,需要慎重考虑。
在本文中,将会使用的是Max-min表示方法,如下所示:
class AABB
{
....
public:
VECTOR3 max ;
VECTOR3 min ;
};
在这种表示方法之下,进行碰撞检测的代码如下所示:
bool AABB::isCollided(AABB* a)
{
if(max.x < a->min.x || min.x > a->max.x) return false ;
if(max.y < a->min.y || min.y > a->max.y) return false ;
if(max.z < a->min.z || min.z > a->min.z) return false ;
return true ;
}// end for isCollided
AABB盒构造
构造AABB盒的方法有很多种,有的很简单,有的很复杂,这里将介绍两种基本的构造方法,他们也非常的简单,容易掌握。
&n

本文详细介绍了3D空间中AABB(轴向平行包围盒)的表示方法、构造方式,包括固定大小AABB盒和紧凑点的AABB盒,并提供了AABB类的设计。通过实际的程序示例,展示了两种计算AABB盒的方法,适用于游戏开发中的碰撞检测。
最低0.47元/天 解锁文章
898

被折叠的 条评论
为什么被折叠?



