碰撞檢測

Tjguo發表於2024-06-17

1、做各自的obb包圍盒

2、找到一個軸,兩個凸形狀在該軸上的投影不重疊,則這兩個形狀不相交。

針對某一分離軸L,如果包圍盒A與包圍盒B在軸L上的投影的半徑和小於包圍盒中心點間距在L的投影距離,那麼包圍盒A與包圍盒B處於分離狀態。使用運算式來表達就是:|T * L|>rA + rB。

現在知道了分離軸定理的原理,下面則是如何選取分離軸。由於潛在的分離軸可能存在無數種,所以我們並非去要逐個驗證,而是選取幾個可測試的軸即可。我們以長方體的碰撞為例,兩個長方體的碰撞可以將其歸結為以下幾種組合:面-面碰撞、面-邊碰撞、邊-邊碰撞(頂點視為邊的一部分)。所以實際上在取分離軸的時候,只需要分別取第一個包圍盒的3個座標軸,第二個包圍盒的3個座標軸,以及垂直於某一軸的9個軸(其他的分離軸都是跟這15個分離軸中的某一個軸平行的軸,投影所得線段值都一樣,無需再驗證)。

這裡再解釋以下什麼是垂直於某一軸的9個軸,具體的做法就是,首先取包圍盒A的x軸方向的某一邊向量,再取包圍盒B的x軸方向的某一邊向量,對兩個向量做叉積,求出一個垂直於A的向量與B的向量的方向向量,這個結果就是需要使用的分離軸。按照這種做法,取A的x軸方向的邊向量分別與B的三個軸方向的邊向量做叉積,再取A的y軸方向與B的三個軸方向的邊向量做叉積,再取A的z軸方向的邊向量與B的三個軸方向的邊向量做叉積,結果一共3*3個分離軸。

相關文章