1.一種基于虛擬球的包圍盒碰撞檢測(cè)方法,其特征在于,包括如下步驟:
步驟a:提供兩個(gè)待檢測(cè)是否發(fā)生碰撞的物體A和B;
步驟b:以其中物體A頂端建立半徑為R0的虛擬球,遍歷物體B的幾何元素,建立虛擬球所包含物體B部分的包圍盒樹和物體A的包圍盒樹;該步驟b具體包含:
步驟b1:建立物體A的包圍盒,該包圍盒作為該物體的包圍盒樹的根節(jié)點(diǎn);
步驟b2:建立虛擬球所包含物體B部分的包圍盒,該包圍盒作為該物體的包圍盒樹的根節(jié)點(diǎn);
步驟b3:利用與局部坐標(biāo)軸垂直的平面將上述包圍盒劃分成兩個(gè)子包圍盒以形成根節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn),當(dāng)所有子節(jié)點(diǎn)包含的基本幾何元素個(gè)數(shù)少于預(yù)先給定的葉節(jié)點(diǎn)所包含幾何元素個(gè)數(shù)的最小值時(shí),轉(zhuǎn)向步驟c,否則轉(zhuǎn)向步驟b4 ;
步驟b4:對(duì)步驟b3中得到的兩個(gè)子節(jié)點(diǎn)分別遞歸地執(zhí)行上述包圍盒的分割過程,當(dāng)遞歸深度超過了預(yù)先給定的最大樹深度時(shí),轉(zhuǎn)向步驟c,否則轉(zhuǎn)向步驟b3;
步驟c :取所述兩個(gè)物體的包圍盒樹的當(dāng)前結(jié)點(diǎn)兩兩之間進(jìn)行檢測(cè),判斷是否發(fā)生碰撞,若發(fā)生碰撞,轉(zhuǎn)向步驟d,若沒碰撞,轉(zhuǎn)向步驟e;
步驟d :判斷當(dāng)前結(jié)點(diǎn)是否為葉子結(jié)點(diǎn),若是,進(jìn)行精確檢測(cè)確定是否真的發(fā)生碰撞,并根據(jù)檢測(cè)結(jié)果更新包含“結(jié)點(diǎn)序號(hào)”,“三角面片序號(hào)”,“是否碰撞”在內(nèi)的節(jié)點(diǎn)信息,記下該結(jié)點(diǎn),返回;若不是葉子結(jié)點(diǎn),則取它所有子結(jié)點(diǎn)作為該樹的當(dāng)前結(jié)點(diǎn),遞歸執(zhí)行步驟c;
步驟e :如果當(dāng)前結(jié)點(diǎn)沒有未檢測(cè)的兄弟結(jié)點(diǎn),表明沒發(fā)生碰撞,則記下當(dāng)前結(jié)點(diǎn)信息后,返回;如果還有未檢測(cè)的兄弟結(jié)點(diǎn),則依次將下兄弟結(jié)點(diǎn)作為該樹的當(dāng)前結(jié)點(diǎn),遞歸執(zhí)行步驟c。
2.根據(jù)權(quán)利要求1 所述的基于虛擬球的包圍盒碰撞檢測(cè)方法,其特征在于:所述的步驟b中,當(dāng)構(gòu)建虛擬球同時(shí),在虛擬球的內(nèi)部建立兩個(gè)半徑R1、R2(R1<R2)。
3.根據(jù)權(quán)利要求1 所述的基于虛擬球的包圍盒碰撞檢測(cè)方法,其特征在于:所述的步驟c、d的兩個(gè)物體的相互檢測(cè)是在物體A頂端的運(yùn)動(dòng)范圍不超過半徑R1和R2時(shí);當(dāng)物體A頂端的運(yùn)動(dòng)范圍超過半徑R1,但不超過R2時(shí),計(jì)算頂端通過半徑R1時(shí)的位置,在這個(gè)位置上,以其中物體A頂端建立半徑為r0的虛擬球,遍歷物體B的幾何元素,在這些幾何元素上建立層次包圍盒結(jié)構(gòu)用以備用。
4.根據(jù)權(quán)利要求1 和3 所述的基于虛擬球的包圍盒碰撞檢測(cè)方法,其特征在于:所述的步驟c、d的兩個(gè)物體的相互檢測(cè),當(dāng)物體A頂端的運(yùn)動(dòng)范圍超過半徑R2時(shí),應(yīng)用新生成的層次包圍盒結(jié)構(gòu)進(jìn)行兩個(gè)物體的相互檢測(cè)。
5.根據(jù)權(quán)利要求1 所述的基于虛擬球的包圍盒碰撞檢測(cè)方法,其特征在于:所述的步驟c 中,當(dāng)進(jìn)行第n 次碰撞檢測(cè)時(shí),包圍盒層次結(jié)構(gòu)是根據(jù)第n 次碰撞檢測(cè)時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測(cè)過程中的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測(cè)過程中的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,其中n 為大于1的自然數(shù)。
6.根據(jù)權(quán)利要求1 所述的基于虛擬球的包圍盒碰撞檢測(cè)方法,其特征在于:所述的包圍盒為AABB 包圍盒或者OBB包圍盒。