【實時碰撞檢測算法Summary】凸包檢測和AABB解釋

凸包可視爲碰撞集合體的早小包圍體。這裏介紹兩種算法

1.Andrew算法

對於一個點集,首先選擇點集中最靠左的兩個點,產生當前凸包的第一條邊。然後開始向右擴展,(分上下兩條路向右擴展,這裏先只介紹上半部分)

如果考察的下一個頂點位於邊集當前邊的右側,則該點暫定爲凸包上的頂點,並加入到邊集中,如果下一個點位於當前邊的左側,則該店位於凸包的外部,並處於錯誤狀態,此時剔除邊集中的最後一個頂點,並開始下一個頂點,直到出現位於邊集中當前邊右側的頂點。

2.Quickhull算法

Andrew算法在2D空間內工作良好,但是在3D空間內並不適用。

快包算法是先獲取頂點集的包圍和,一般情況下可以確定4個端點,分別位於包圍盒的四條邊上。作爲斷點,上述4個點位於凸包並構成了首次逼近。進一步考察在當前凸包外部的頂點,對於現在獲得的四邊形,計算邊外部距離最遠的頂點(如果存在),則此點必定是凸包上的頂點,那麼此時邊的兩個頂點和這一個新的頂點構成了一個三角形。然後形成一個新的凸包,如此迭代下去,直到所有的頂點都在凸包內。

包圍體被稱爲BV

BV期望特徵

低耗費的相交測試

實現緊密擬合

計算耗費較少

易於旋轉和變換

內存佔用較少

包圍體的常用類型如下:

其中 軸對齊AABB比較常用

我們在做兩個物體的相交測試的時候,可以把兩個物體都變換到世界空間座標。或者把其中一個變換到另一個物體的局部空間座標。(這其中大有不同,)

如上圖 b圖和c圖的判斷結果一個是相交 一個是不相交

AABB的構造除了暴力遍歷頂點取最大最小之外,還可以用爬山法,從當前頂點移動常數個頂點,得到最大/最小範圍。

不過需要數據的預處理如下圖所示

對於AABB旋轉之後,物體的BV通常需要重新計算,最簡單的方法是利用一個新的AABB包圍旋轉後的AABB。

通常計算旋轉後的AABB,只需要計算旋轉之前的頂點在世界座標軸上的投影間隔範圍 經過 矩陣M變換後的範圍。

範圍計算方法和解釋如下:

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