AABB(axis-aligned bounding box)

1. AABB包圍盒

在遊戲中,爲了簡化物體之間的碰撞檢測運算,通常會對物體創建一個規則的幾何外形將其包圍。

其中,AABB(axis-aligned bounding box)包圍盒被稱爲軸對其包圍盒。

 

二維場景中的AABB包圍盒具備特點:(注:由於Cocos2d-x是基於Opengl ES的,所以下圖中的所有座標系均採用右手直角座標系)

 

(1) 表現形式爲四邊形,即用四邊形包圍物體。

(2) 四邊形的每一條邊,都會與座標系的軸垂直。

 

如圖 1-1 所示:


圖1-1

 

三維場景中的AABB包圍盒特點:

 

(1) 表現形式爲六面體。

(2) 六面體中的每條邊都平行於一個座標平面。

 

如圖 1-2 所示:

圖 1-2(圖片來源百度)

 

在圖1-2中,爲了更明顯的展示AABB包圍盒的特點,在最右側展示了一個OBB(Oriented Bounding Box)包圍盒,也稱作有向包圍盒。

可以看出,AABB包圍盒與OBB包圍盒的最直接的區別就是,AABB包圍盒是不可以旋轉的,而OBB包圍盒是可以旋轉的,也就是有向的。


2. 二維場景中的AABB碰撞檢測原理

首先來看一張二維場景中的物體碰撞圖:


圖 2-1

 

在圖 2-1中,分別做物體A與物體B在X,Y軸方向的投影,物體A的Y軸方向最大點座標爲Y1,最小點座標Y2,X軸方向最小點座標X1,最大點座標X2,物體B同理。

圖中紅色區域爲物體A與物體B投影的重疊部分。

 

可以看出,AABB碰撞檢測具有如下規則:

物體A與物體B分別沿兩個座標軸做投影,只有在兩個座標軸都發生重疊的情況下,兩個物體才意味着發生了碰撞。

 

所以,在程序中做二維遊戲的AABB碰撞檢測時,只需驗證物體A與物體B是否滿足如下條件:

(1)物體A的Y軸方向最小值大於物體B的Y軸方向最大值;

(2)物體A的X軸方向最小值大於物體B的X軸方向最大值;

(3)物體B的Y軸方向最小值大於物體A的Y軸方向最大值;

(4)物體B的X軸方向最小值大於物體A的X軸方向最大值;

若滿足上述條件,則證明物體A與物體B並未發生重合,反之,則證明物體A與物體B重合。


3. 三維場景中的AABB碰撞檢測原理

首先,再來看一下圖2-1中的二維物體A和物體B的包圍盒,可以發現實際上判斷物體A與物體B是否發生重合只需要知道兩個信息:

 

(1) 物體A的最小點的信息,即圖2-1中A的左下角點;以及物體A的最大點的信息,即圖2-1中A的右上角點。

(2) 物體B的最小點的信息,物體B的最大點的信息。

也就是說在二維場景的碰撞檢測中,每個物體的頂點座標信息都可以由兩個座標來確定,即兩個座標就可以標識一個物體了,所以兩個物體的碰撞檢測只需要獲得到四個點座標就可以了。

 

之前在圖1-2中已經看到,三維場景中物體的AABB包圍盒是一個六面體,其座標系對於二維座標系來講只是多了一個Z軸,所以實際上在三維場景中物體的AABB碰撞檢測依然可以採用四個點信息的判定來實現。即從物體A的八個頂點與物體B的八個頂點分別選出兩個最大與最小的頂點進行對比。三維物體的AABB包圍盒的八個頂點依舊可以用兩個頂點來標識,如圖 3-1 所示:


圖3-1

 

只要確定了圖中黑色點部分的座標,就可以確定八個頂點的全部信息了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章