aabb,指軸對齊包圍盒(axis-aligned bounding boxes)。在3d空間中,aabb是乙個長方體,在2d空間中是乙個長方形。特徵是面法線皆平行於座標軸,即當物體旋轉時,aabb不會隨物體旋轉,也因此特性,aabb可以最快判斷兩物體是否重疊。
《實時碰撞檢測演算法技術》一書中提到3種aabb的表達方式,這裡僅舉其中最高效,要求儲存空間最少的一種——即儲存包圍盒的中心位置和包圍盒的半徑(即包圍盒邊緣到包圍盒中心距離的長度):
struct aabb
aabb是否相交可作圖如下:
其中r為半徑,d為兩包圍盒中心的距離。
int aabbintersection(aabb a, aabb b)
return 1;
}
在遊戲中,經常會出現需要檢測從某一點發出的射線是否與物體相交。
具體邏輯與aabb間的的碰撞檢測相似,只是將其中乙個aabb換成了射線。射線的結構如下:
struct ray
檢測射線與aabb碰撞方程:
int rayaabbintersection(ray r, aabb a)
碰撞檢測 膠囊體碰撞檢測
膠囊體 給定一條線段l,所有道l的距離為r的點的集合。由定義可知,膠囊體由半徑r和線段l標識。檢測兩個膠囊體是否發生碰撞,即檢測兩條線段l1 l2的最短距離d是否大於l1 l2的半徑r1 r2之和,d r1 r2 則未碰撞,否則發生碰撞。設線段l1端點為a1 a2,線段l2端點為b1 b2,號表示兩...
物理引擎學習02 分離軸碰撞檢測
分離軸碰撞檢測演算法,sat separating axis theorem 適用於凸多邊形之間的碰撞檢測。如果能找到乙個軸,將兩個多邊形分離,則說明兩個多邊形不相交。傳統的演算法是找到乙個分離軸,得到分離軸的垂線 投影軸 然後將兩個多邊形的所有點都分別投影到該垂線上,如果兩個多邊形的投影區間不重疊...
Unity碰撞檢測
碰撞個必要條件為兩個角色必須都掛載 rigibody 剛體元件,至少乙個角色掛載 collider指令碼 第一種 觸發器,必須開啟 collider的 istrigger 為 true 兩個碰撞物件會相互穿過 void ontriggerenter collider collider 開始觸發器 v...