3D空间中的AABB(轴向平行包围盒, Aixe align bounding box)的求法

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

            在前面的一篇文章中讲述了如何通过模型的顶点来求的模型的包围球,并且还讲述了基本包围体除了包围球之外,还有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盒的方法有很多种,有的很简单,有的很复杂,这里将介绍两种基本的构造方法,他们也非常的简单,容易掌握。

             第一种是固定大小的AABB盒,这种AABB盒在构造完毕之后,不管被包围的物体怎么样的旋转,都不需要在进行重新构造了。

            第二种是比较紧凑的一种,利用X,Y和Z轴向上最长和最远的点来构造一个AABB盒。



固定大小AABB盒

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值