2011-09-25 42 views
4

我已經注意到了一些關於它我想用這個做一些實現。但我有一些疑問。 de AABB的問題是對象必須是軸對齊的,否則你必須重新計算每一幀的bbox,是嗎?重新計算是否昂貴?那麼精度如何,你可以製作一個碰撞樹細分bbox?它如何與AABB協同工作?碰撞檢測使用AABB或OBB的懷疑

OBB面向對象旋轉,對嗎?你必須在遊戲開始之前構建樹。我把它的實施困難得多,有點貴,但我在精度上獲得了很多。但是如果對象在遊戲中旋轉,bbox會自動重新計算其旋轉角度?

哪一個最常用於遊戲?爲什麼?

預先感謝您:)

回答

2

據我所知,大部分的物理引擎的使用+的AABB掃-和修剪算法的碰撞檢測的廣泛階段。 樹對於動態對象之間的碰撞檢測幾乎沒有用處。然而,樹可以成功地用於靜態幾何

與德AABB的問題是,對象必須軸線對齊, 否則你必須每一幀進行重新計算BBOX,是 嗎?

是的,AABB必須重新計算每次身體方向的變化。 但是這對盒子,膠囊,錐體,圓柱體來說是非常便宜的操作。對於多邊形模型肯定會更昂貴,但對於低多邊形模型的AABB計算具有正常的性能。總而言之,AABB重新計算比昂貴的窄階段算法要好。

3

AABB,OBB,球體,膠囊之間的選擇取決於您正在運行的模擬類型以及您的約束(通常是實時應用程序)。

您需要評估正反兩方面並做相應的選擇。例如,使用AABB的測試速度非常快,但當對象旋轉時需要重新計算AABB。但是,如果您正在處理非常複雜的對象並處理BVH,則更新AABB樹非常快,因爲您只需要重新計算底部的AABB,而較高的AABB則是由子AABB構建的。使用OBB時,測試成本較高,但如果您正在處理剛性對象,則不需要重新計算OBB。

如果您決定使用可變形的物體,AABB樹(或球體樹)絕對是一個更好的主意,因爲無論如何您的樹需要更新。

現在的問題是:更新AABB-tree或OBB重疊測試產生的開銷是多少?所有這些都取決於你的模擬:對象的複雜性,每秒的平均CD測試等......你可以根據不同形狀的不同方法(BVH,網格...)找到不同CD庫的一些基準,並針對特定問題進行測試。 Here是一個您可能會感興趣的例子。

關於實施,由於所有這些已經在很多年前進行過研究並在許多圖書館實施,所以您不應該有任何麻煩。你可以看看Christer Ericson的實時碰撞檢測,所有這些問題都得到了非常清楚的回答和解釋。

您還可以在不同形狀之間混合使用,例如一個用於廣義階段,另一個用於狹義階段(一旦你到達葉子),但你可能不需要像這樣的東西。