2014-03-19 82 views
30

您好我正在製作一個體素遊戲Java並在研究所有我需要學習的不同事物時,我注意到很多遊戲都使用AABB進行碰撞檢測。然後我想起在Minecraft中看到AABB。但是,當我谷歌什麼AABB是,它只能提供其他人的代碼,或歷史書的一些組織。 Stackoverflow,什麼是AABB什麼是AABB - 碰撞檢測?

回答

35

AABB代表「Axis-Aligned Bounding Box」。

這是一種相當具有計算和內存效率的表示體積的方式,通常用於查看兩個物體是否可能接觸。

由於它是軸對齊的,因此它不一定非常適合您的真實3D對象。 AABB檢查通常用作粗略的第一近似來查看對象是否可能發生碰撞。然後,如果AABB檢查通過,則進行更詳細的檢查。

例子:

想象一下你的世界是2D的,你畫到圖紙上。 你在世界上有一些物體(一個球,一棵樹,不管)。要爲其中一個對象創建AABB,請在該對象周圍繪製矩形,使您的線條與紙張上的網格線平行。

如果你有兩個對象的AABB,你可以做一些非常簡單的數學來看看這些AABB是否重疊。如果它們不重疊,那麼這兩個對象可能不會觸及,所以這對您的碰撞算法來說是一個簡單的提前。

這相當容易地推廣到3D(和更多的Ds)。

您可能還想查看gamedev.stackexchange.com

+0

也因爲一個體素遊戲大多是立方體我不認爲它是軸對齊的是一個問題,但如果我正在製作一個RPG,並且我希望我的人看起來很現實,並且擊中一道距離相當公平的牆。 – SemperAmbroscus

+0

thx我已經在gamedev上註冊過,只是覺得在這裏發帖更容易 – SemperAmbroscus

+0

@FeatheredOrcian:是的,如果你的體素已經軸對齊,那麼AABB就很棒。你甚至可能不需要單獨存儲它們,但可以從體素數據中獲取它們的數據。 – jwd

4

軸對齊包圍盒

其基本上可完全包含形狀,通常是由一對3D座標的定義的最小長方體。

檢查兩個AABB之間的碰撞非常快,因爲您只需檢查拐角的X,Y和Z值的範圍。