本發(fā)明涉及一種碰撞檢測方法,更具體地說,本發(fā)明涉及一種基于虛擬球的包圍盒碰撞檢測方法。
背景技術(shù):
近些年來,碰撞檢測已是計算機圖形學(xué)中比較熱門的問題,在虛擬環(huán)境的許多領(lǐng)域如計算機仿真、物理模擬、實體建模及機器人運動規(guī)劃中碰撞檢測問題十分重要。碰撞檢測問題均基于這樣一個事實兩個不可穿透的對象不能共享相同的空間區(qū)域,碰撞檢測的目的是發(fā)現(xiàn)碰撞并進行報告,為進一步的碰撞響應(yīng)提供信息。
目前,對于剛性和柔性物體,除了需要考慮包圍盒的緊湊性外,包圍盒整理和重構(gòu)的效率也至關(guān)重要。對于簡單的包圍盒如Sphere、AABB,其構(gòu)造和更新十分快速,但緊湊性較差;對于復(fù)雜的包圍盒如OBB,雖然較為緊湊,但整理和構(gòu)造的計算量較大;作為折中選擇,在一個虛擬場景中,剛性物體采用Sphere或AABB包圍盒,柔性物體采用OBB包圍盒,并且分別構(gòu)建包圍盒層次結(jié)構(gòu)。
同時,剛體之間的碰撞研究己經(jīng)比較成熟,但是現(xiàn)存的動態(tài)碰撞檢測方法還存在一些問題,比如檢測過程中發(fā)生刺穿和遺漏現(xiàn)象等。另外盡管有些采用層次包圍盒結(jié)構(gòu)來加速無題場景中的碰撞檢測,但是一般的包圍盒的方法把包圍盒方法視為一個整體方法,并且一般的層次包圍盒結(jié)構(gòu)的方法是把整個物體全部包圍,構(gòu)建和更新層次結(jié)構(gòu)比較費時,檢測精度比較低,而且效率不是非常突出,近期的一些方法主要側(cè)重于變形對象的碰撞檢測研究,變形對象間的高效碰撞檢測是一個非常值得研究的領(lǐng)域,有著廣泛的應(yīng)用前景。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種基于虛擬球的包圍盒碰撞檢測方法,目的在于克服現(xiàn)有技術(shù)的不足,通過虛擬球的結(jié)構(gòu)在連續(xù)檢測時,加速了層次包圍盒的建立或更新以及包圍盒重疊測試的過程,提高了碰撞檢測的效率。
為了實現(xiàn)上述技術(shù)目的,提供了一種基于虛擬球的包圍盒碰撞檢測方法,包括如下步驟:
步驟a:提供兩個待檢測是否發(fā)生碰撞的物體A和B;
步驟b:以其中物體A頂端建立半徑為R0的虛擬球,遍歷物體B的幾何元素,建立虛擬球所包含物體B部分的包圍盒樹和物體A的包圍盒樹;該步驟b具體包含:
步驟b1:建立物體A的包圍盒,該包圍盒作為該物體的包圍盒樹的根節(jié)點;
步驟b2:建立虛擬球所包含物體B部分的包圍盒,該包圍盒作為該物體的包圍盒樹的根節(jié)點;
步驟b3:利用與局部坐標(biāo)軸垂直的平面將上述包圍盒劃分成兩個子包圍盒以形成根節(jié)點的兩個子節(jié)點,當(dāng)所有子節(jié)點包含的基本幾何元素個數(shù)少于預(yù)先給定的葉節(jié)點所包含幾何元素個數(shù)的最小值時,轉(zhuǎn)向步驟c,否則轉(zhuǎn)向步驟b4 ;
步驟b4:對步驟b3中得到的兩個子節(jié)點分別遞歸地執(zhí)行上述包圍盒的分割過程,當(dāng)遞歸深度超過了預(yù)先給定的最大樹深度時,轉(zhuǎn)向步驟c,否則轉(zhuǎn)向步驟b3;
步驟c :取所述兩個物體的包圍盒樹的當(dāng)前結(jié)點兩兩之間進行檢測,判斷是否發(fā)生碰撞,若發(fā)生碰撞,轉(zhuǎn)向步驟d,若沒碰撞,轉(zhuǎn)向步驟e;
步驟d :判斷當(dāng)前結(jié)點是否為葉子結(jié)點,若是,進行精確檢測確定是否真的發(fā)生碰撞,并根據(jù)檢測結(jié)果更新包含“結(jié)點序號”,“三角面片序號”,“是否碰撞”在內(nèi)的節(jié)點信息,記下該結(jié)點,返回;若不是葉子結(jié)點,則取它所有子結(jié)點作為該樹的當(dāng)前結(jié)點,遞歸執(zhí)行步驟c;
步驟e :如果當(dāng)前結(jié)點沒有未檢測的兄弟結(jié)點,表明沒發(fā)生碰撞,則記下當(dāng)前結(jié)點信息后,返回;如果還有未檢測的兄弟結(jié)點,則依次將下兄弟結(jié)點作為該樹的當(dāng)前結(jié)點,遞歸執(zhí)行步驟c。
進一步地,所述的步驟b中,當(dāng)構(gòu)建虛擬球同時,在虛擬球的內(nèi)部建立兩個半徑R1、R2(R1<R2)。
進一步地,所述的步驟c、d的兩個物體的相互檢測是在物體A頂端的運動范圍不超過半徑R1和R2時;當(dāng)物體A頂端的運動范圍超過半徑R1,但不超過R2時,計算頂端通過半徑R1時的位置,在這個位置上,以其中物體A頂端建立半徑為r0的虛擬球,遍歷物體B的幾何元素,在這些幾何元素上建立層次包圍盒結(jié)構(gòu)用以備用。
進一步地,所述的步驟c、d的兩個物體的相互檢測,當(dāng)物體A頂端的運動范圍超過半徑R2時,應(yīng)用新生成的層次包圍盒結(jié)構(gòu)進行兩個物體的相互檢測。
進一步地,所述的步驟c 中,當(dāng)進行第n 次碰撞檢測時,包圍盒層次結(jié)構(gòu)是根據(jù)第n 次碰撞檢測時刻每個三角形的空間位置,對上一次碰撞檢測過程中的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進行重構(gòu),進而自底向上對上一次碰撞檢測過程中的包圍盒層次結(jié)構(gòu)進行整理更新而成的,其中n 為大于1的自然數(shù)。
進一步地,所述的包圍盒為AABB 包圍盒或者OBB包圍盒。
本發(fā)明的有益技術(shù)效果是:通過引入虛擬球的方法對要被檢測的柔性物體遍歷劃定范圍,并對這部分幾何元素構(gòu)建層次包圍盒結(jié)構(gòu),減少了要檢測的幾何元素,加快了檢測的速度和時間;在連續(xù)檢測時,更新虛擬球的的位置和層次包圍盒的結(jié)構(gòu),加速了層次包圍盒的建立或更新以及包圍盒重疊測試的過程,提高了碰撞檢測的效率。
附圖說明
附圖1是本發(fā)明方法的流程圖。
附圖2是虛擬球的構(gòu)建和更新的流程圖。
具體實施方式
為了更為具體地描述本發(fā)明,下面結(jié)合附圖及具體實施方式對本發(fā)明的碰撞檢測方法進行詳細說明。
如圖1 和圖2所示,一種基于虛擬球的包圍盒碰撞檢測方法,包括如下步驟:一種基于虛擬球的包圍盒碰撞檢測方法,其特征在于,包括如下步驟。
(1) 提供兩個待檢測是否發(fā)生碰撞的物體。
(2) 以其中物體A頂端建立半徑為R0的虛擬球,遍歷物體B的幾何元素,建立虛擬球所包含物體B部分的包圍盒樹和物體A的包圍盒樹。
在場景中的建立物體A的包圍盒,該包圍盒作為該物體的包圍盒樹的根節(jié)點;同時建立虛擬球所包含物體B部分的包圍盒,該包圍盒作為該物體的包圍盒樹的根節(jié)點;利用與局部坐標(biāo)軸垂直的平面將上述包圍盒劃分成兩個子包圍盒以形成根節(jié)點的兩個子節(jié)點,得到的兩個子節(jié)點,分別遞歸地執(zhí)行上述包圍盒的分割過程,當(dāng)所有子節(jié)點包含的基本幾何元素個數(shù)少于預(yù)先給定的葉節(jié)點所包含幾何元素個數(shù)的最小值時或者當(dāng)遞歸深度超過了預(yù)先給定的最大樹深度時,終止遞歸過程。
(3) 對層次包圍盒結(jié)構(gòu)進行精確碰撞檢測。
取所述兩個物體的包圍盒樹的當(dāng)前結(jié)點兩兩之間進行檢測,判斷是否發(fā)生碰撞,若發(fā)生碰撞,判斷當(dāng)前結(jié)點是否為葉子結(jié)點,若是,進行精確檢測確定是否真的發(fā)生碰撞,并根據(jù)檢測結(jié)果更新包含“結(jié)點序號”,“三角面片序號”,“是否碰撞”在內(nèi)的節(jié)點信息,記下該結(jié)點,返回;若不是葉子結(jié)點,則取它所有子結(jié)點作為該樹的當(dāng)前結(jié)點遞歸檢測是否發(fā)生碰撞。如果當(dāng)前結(jié)點沒有未檢測的兄弟結(jié)點,表明沒發(fā)生碰撞,則記下當(dāng)前結(jié)點信息后,返回;如果還有未檢測的兄弟結(jié)點,則依次將下兄弟結(jié)點作為該樹的當(dāng)前結(jié)點,遞歸執(zhí)行。
(4) 對層次包圍盒結(jié)構(gòu)的連續(xù)檢測。
當(dāng)物體A頂端的運動范圍不超過半徑R1和R2時,進行第n 次碰撞檢測時,包圍盒層次結(jié)構(gòu)是根據(jù)第n 次碰撞檢測時刻每個三角形的空間位置,對上一次碰撞檢測過程中的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進行重構(gòu),進而自底向上對上一次碰撞檢測過程中的包圍盒層次結(jié)構(gòu)進行整理更新而成的,其中n 為大于1的自然數(shù);當(dāng)物體A頂端的運動范圍超過半徑R1,但不超過R2時,計算頂端通過半徑R1時的位置,在這個位置上,以其中物體A頂端建立半徑為r0的虛擬球,遍歷物體B的幾何元素,在這些幾何元素上建立層次包圍盒結(jié)構(gòu)用以備用;當(dāng)物體A頂端的運動范圍超過半徑R2時,應(yīng)用新生成的層次包圍盒結(jié)構(gòu)進行兩個物體的相互檢測。
以上所述,僅為本發(fā)明較佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),根據(jù)本發(fā)明的技術(shù)方案及其發(fā)明構(gòu)思加以等同替換或改變,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。