一種基于包圍盒樹法的并行碰撞檢測方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及一種碰撞檢測方法,更具體地說,本發(fā)明涉及一種基于包圍盒樹法的并行碰撞檢測方法。
【背景技術(shù)】
[0002]在虛擬現(xiàn)實(shí)中,用戶感覺虛擬對(duì)象應(yīng)該是“真實(shí)”存在的,例如飛機(jī)不可能穿過一座山飛過去,用戶用虛擬手敲打石頭時(shí),虛擬手不應(yīng)穿過石頭等。這要求虛擬現(xiàn)實(shí)系統(tǒng)必須實(shí)時(shí)、準(zhǔn)確判斷虛擬物體之間是否發(fā)生了碰撞。碰撞問題涉及碰撞檢測與碰撞響應(yīng)兩個(gè)方面,其中碰撞檢測用來檢測不同對(duì)象之間是否發(fā)生了碰撞。精確的碰撞檢測對(duì)提高仿真的真實(shí)性、可信性,增強(qiáng)虛擬環(huán)境的沉浸感有著至關(guān)重要的作用,而虛擬環(huán)境自身的復(fù)雜性和實(shí)時(shí)性也對(duì)碰撞檢測提出了更高的要求。碰撞檢測算法總體上可分為空間分解法和分層包圍盒方法兩大類,前者是將整個(gè)虛擬空間劃分為相等體積的小的單元格,只對(duì)占居了同一單元格或相鄰單元格的幾何對(duì)象進(jìn)行相交計(jì)算。比較典型的例子有:八叉樹、k-d樹、BSP樹等。這類方法的特點(diǎn)為:方法復(fù)雜、精度高。并行碰撞檢測方法就屬于這一類。分層包圍盒的核心思想是用體積略大而幾何特性簡單的包圍盒來近似地描述復(fù)雜的幾何對(duì)象,從而通過判斷包圍盒是否重疊來粗略估計(jì)兩檢測對(duì)象是否碰撞,此外可以通過構(gòu)造樹狀分層結(jié)構(gòu)一步步逼近幾何模型,提高檢測精度。分層包圍盒由于其方法簡單、效率相對(duì)高,也是一種廣泛應(yīng)用的碰撞檢測方法。
[0003]上述的碰撞檢測方法自身還存在一些問題:如檢測中刺穿現(xiàn)象和遺漏情況等。傳統(tǒng)的多物體間的碰撞檢測方法一般較為復(fù)雜,不能滿足實(shí)時(shí)性的要求,不利于碰撞檢測快速實(shí)現(xiàn)?;诳臻g分割技術(shù)的空間分解方法,影響該方法效率的一個(gè)重要因素是分區(qū)的多少,而分區(qū)的數(shù)目又較難把握。八叉樹和其它幾何模型在解決碰撞檢測的框架之間的幾何干涉問題時(shí),不會(huì)大幅度提高方法效率。采用分層包圍盒技術(shù)來加速多面體場景的碰撞檢測,但一般的包圍盒方法作為一個(gè)整體的方法,檢測精度低,效率提高并不明顯。因此有必要提出一種將兩類檢測方法的優(yōu)點(diǎn)能夠加以綜合,檢測精度與效率都有顯著提高的碰撞檢測方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是基于這兩類碰撞檢測方法,綜合兩類碰撞檢測方法的優(yōu)點(diǎn),得出改進(jìn)的結(jié)合包圍盒的并行碰撞檢測方法。
[0005]為了實(shí)現(xiàn)上述技術(shù)目的,提供了一種基于包圍盒樹法的并行碰撞檢測方法,包括如下步驟:
[0006]步驟S1:提供兩個(gè)待檢測是否發(fā)生碰撞的物體;
[0007]步驟S2:建立每個(gè)所述物體整體的包圍盒,所述包圍盒作為所述物體的包圍盒樹的根節(jié)點(diǎn);
[0008]步驟S3:利用與局部坐標(biāo)軸垂直的平面將所述包圍盒劃分成兩個(gè)子包圍盒,即左包圍盒和右包圍盒,以形成根節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn),即左子節(jié)點(diǎn)和右子節(jié)點(diǎn);
[0009]步驟S4:對(duì)上述步驟得到的所述兩個(gè)子節(jié)點(diǎn)分別遞歸地執(zhí)行所述包圍盒的分割過程,以得到最終的包圍盒樹,并且給定最大樹深度和葉子節(jié)點(diǎn)所包含的幾何元素的個(gè)數(shù);
[0010]步驟S5:將上述步驟得到的兩個(gè)物體的所述包圍盒樹的當(dāng)前節(jié)點(diǎn)兩兩之間進(jìn)行檢測,判斷是否發(fā)生碰撞,若發(fā)生碰撞,轉(zhuǎn)向步驟S6,否則轉(zhuǎn)向步驟S7 ;
[0011]步驟S6:若所述當(dāng)前結(jié)點(diǎn)為葉子結(jié)點(diǎn),記下該結(jié)點(diǎn),返回,并檢測是否發(fā)生碰撞;若所述當(dāng)前結(jié)點(diǎn)不是葉子結(jié)點(diǎn),則取所述當(dāng)前結(jié)點(diǎn)的所有子結(jié)點(diǎn)作為所述包圍盒樹的當(dāng)前結(jié)點(diǎn),遞歸執(zhí)行步驟S5 ;
[0012]步驟S7:若所述當(dāng)前結(jié)點(diǎn)無未檢測的兄弟結(jié)點(diǎn),表明未發(fā)生碰撞,記下所述當(dāng)前結(jié)點(diǎn)后,返回;若仍有未檢測的兄弟結(jié)點(diǎn),則依次將下所述兄弟結(jié)點(diǎn)作為所述包圍盒樹的當(dāng)前結(jié)點(diǎn);遞歸執(zhí)行步驟S5。
[0013]作為優(yōu)選,所述兩個(gè)待測物體為可以劃分成多個(gè)四面體,所述四面體之間具有相關(guān)性。
[0014]作為優(yōu)選,所述步驟S6中檢測是否發(fā)生碰撞的檢測方法為空間分解法。
[0015]作為優(yōu)選,所述空間分解法為八叉樹算法或者k-d(k-dimens1nal)樹算法或者BSP (Binary Space Part1ning trees,二維空間分割)樹算法。
[0016]作為優(yōu)選,所述包圍盒為AABB包圍盒(Axis Aligned Bounding Box,矩形盒)或者方向包圍盒或者固定方向凸包圍盒或者包圍球。
[0017]作為優(yōu)選,設(shè)計(jì)所述步驟S4的出口為遞歸深度超過了所述給定的最大樹深度。
[0018]作為優(yōu)選,設(shè)計(jì)所述步驟S4的出口為所述子節(jié)點(diǎn)所包含的基本幾何元素個(gè)數(shù)少于所述給定的葉子節(jié)點(diǎn)所包含幾何元素個(gè)數(shù)的最小值。
[0019]作為優(yōu)選,設(shè)計(jì)所述步驟S4的出口為所述左、右子節(jié)點(diǎn)至少有一個(gè)包含的幾何元素個(gè)數(shù)與其父節(jié)點(diǎn)所包含幾何元素個(gè)數(shù)相差在10以下。
[0020]作為優(yōu)選,所述包圍盒樹的每一個(gè)節(jié)點(diǎn)包含兩個(gè)子對(duì)象,分別為多面體子對(duì)象和包圍盒子對(duì)象。
[0021]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本發(fā)明在對(duì)兩個(gè)物體做碰撞檢測時(shí),先增加包圍盒的方法進(jìn)行碰撞檢測,如不發(fā)生碰撞,就無需做下一步檢測,如果發(fā)生碰撞,則做兩個(gè)物體精確碰撞檢測。在對(duì)兩個(gè)物體做精確碰撞檢測時(shí),引入并行的思想,實(shí)現(xiàn)了并行碰撞檢測。由此將兩個(gè)物體間的碰撞檢測轉(zhuǎn)化為系列四面體間的并行碰撞檢測,在保證高精度的前提條件下,有效的滿足了碰撞檢測的實(shí)時(shí)要求,提高了檢測效率,同時(shí)也解決了一般碰撞檢測算法只適用于凸多面體的不足。
【具體實(shí)施方式】
[0022]為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。
[0023]本發(fā)明提供一種基于包圍盒樹法的并行碰撞檢測方法,包括如下步驟:
[0024]步驟1:提供兩個(gè)待檢測是否發(fā)生碰撞的物體,所述物體為復(fù)雜的多面體;
[0025]步驟2:建立每個(gè)所述物體整體的包圍盒,所述包圍盒作為所述物體的包圍盒樹的根節(jié)點(diǎn);
[0026]步驟3:利用與局部坐標(biāo)軸垂直的平面將所述包圍盒劃分成兩個(gè)子包圍盒,即左包圍盒和右包圍盒,以形成根節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn),即左子節(jié)點(diǎn)和右子節(jié)點(diǎn);
[0027]步驟4:對(duì)上述步驟得到的所述兩個(gè)子節(jié)點(diǎn)分別遞歸地執(zhí)行所述包圍盒的分割過程,以得到最終的包圍盒