專利名稱:一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)檢測技術(shù)領(lǐng)域,具體涉及一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法。
背景技術(shù):
基于三角形網(wǎng)格的連續(xù)碰撞檢測被廣泛應(yīng)用于不同的技術(shù)領(lǐng)域,包括機(jī)器人運(yùn)動(dòng)路徑規(guī)劃、物理仿真、視頻游戲等,它使用勻速線性插值軌跡,檢測物體在兩個(gè)離散位置間可能發(fā)生的碰撞情況。目前應(yīng)用最廣泛的連續(xù)碰撞檢測方法是利用包圍盒層次結(jié)構(gòu)(BVH),先對(duì)整個(gè)場景進(jìn)行包圍盒重疊測試,當(dāng)檢測到兩個(gè)包圍盒不相交時(shí),停止遍歷該節(jié)點(diǎn)的子節(jié)點(diǎn)。各 種BVH,如球(Sphere )樹,軸對(duì)齊包圍盒(AABB )樹,定向包圍盒(OBB )樹,離散定向多面體(k-DOP)樹等,這些層次結(jié)構(gòu)通常采用自頂向下的方法進(jìn)行構(gòu)造,被廣泛應(yīng)用于剛體或柔性物體的碰撞檢測。對(duì)于柔性物體,除了需要考慮包圍盒的緊湊性外,包圍盒整理和重構(gòu)的效率也至關(guān)重要。圖I為AABB、8-D0P和OBB三種包圍盒的示意圖,對(duì)于簡單的包圍盒,如Sphere、AABB,其整理和構(gòu)造十分快捷,但緊湊性較差;對(duì)于復(fù)雜的包圍盒,如0ΒΒ,雖然較為緊湊,但整理和構(gòu)造的計(jì)算量較大;作為折中選擇,k-DOP兼具緊湊性和高效性,因此常被用于柔性物體的包圍盒層次結(jié)構(gòu),但即使使用了最緊湊的包圍盒,剔除率仍然不高。因此,對(duì)于包圍盒重疊測試輸出的存在重疊的包圍盒對(duì),傳統(tǒng)方法通過精確碰撞檢測來判斷包圍盒對(duì)所對(duì)應(yīng)的三角形對(duì)是否發(fā)生了碰撞,精確碰撞檢測過程可分解為15種碰撞情況的檢測6種頂點(diǎn)/三角形之間碰撞檢測和9種邊/邊之間碰撞檢測。而每個(gè)元素測試至少需要求解一個(gè)三次方程的根,15種情況需要求解15個(gè)三次方程以及一些附加的判斷條件,因此這個(gè)過程需要耗費(fèi)大量的計(jì)算時(shí)間。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)所存在的上述技術(shù)缺陷,本發(fā)明提供了一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,通過在精確碰撞檢測階段,利用非共線剔除相應(yīng)的碰撞情況,減少了精確碰撞檢測的次數(shù),提高了碰撞檢測的速度。一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,包括如下步驟(I)對(duì)待檢測的三角形網(wǎng)格柔性場景模型中的每個(gè)三角形構(gòu)造對(duì)應(yīng)的包圍盒,進(jìn)而建立三角形網(wǎng)格柔性場景模型的包圍盒層次結(jié)構(gòu);(2)根據(jù)所述的包圍盒層次結(jié)構(gòu),構(gòu)建包圍盒測試樹(BVTT);對(duì)所述的包圍盒測試樹進(jìn)行包圍盒重疊測試,輸出存在包圍盒重疊的葉節(jié)點(diǎn);(3)對(duì)輸出的葉節(jié)點(diǎn)對(duì)應(yīng)的三角形對(duì)進(jìn)行非共線剔除檢測,對(duì)剔除后保留的碰撞情況進(jìn)行精確碰撞檢測。所述的非共線剔除檢測包括點(diǎn)/面非共線剔除檢測和邊/邊非共線剔除檢測。所述的點(diǎn)/面非共線剔除檢測的方法過程為
I)獲取待檢測三角形和待檢測點(diǎn)P的三維信息,令a、b、c分別為待檢測三角形的三個(gè)頂點(diǎn);所述的三維信息包括前一時(shí)刻和當(dāng)前時(shí)刻待檢測三角形各頂點(diǎn)的三維坐標(biāo)、待檢測點(diǎn)P的三維坐標(biāo)、待檢測三角形的法向量;2)在前一時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中頂點(diǎn)c是否始終在待檢測三角形ab邊的一側(cè)若是,進(jìn)入步驟3)進(jìn)行判斷;若否,保留待檢測三角形和待檢測點(diǎn)的碰撞情況;3)根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在ab邊的另一側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,進(jìn)入步驟4)進(jìn)行判斷;4)根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在be邊相對(duì)于頂點(diǎn)a的另一側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否, 進(jìn)入步驟5)進(jìn)行判斷;5)根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在ac邊相對(duì)于頂點(diǎn)b的另一側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,保留待檢測三角形和待檢測點(diǎn)的碰撞情況。所述的邊/邊非共線剔除檢測的方法過程為I)獲取兩條待檢測邊的三維信息,令a和b分別為一條待檢測邊的兩個(gè)端點(diǎn),c和d分別為另一條待檢測邊的兩個(gè)端點(diǎn),端點(diǎn)a、b、c構(gòu)成的平面為投影平面;所述的三維信息包括前一時(shí)刻和當(dāng)前時(shí)刻待檢測邊各端點(diǎn)的三維坐標(biāo);2)在前一時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,根據(jù)所述的三維信息判斷在所述的投影平面中端點(diǎn)a、b是否均在Cd邊的同一側(cè)若是,則剔除兩條待檢測邊的碰撞情況;若否,進(jìn)入步驟3)進(jìn)行判斷;3)根據(jù)所述的三維信息判斷在所述的投影平面中端點(diǎn)c、d是否均在ab邊的同一側(cè)若是,則剔除兩條待檢測邊的碰撞情況;若否,保留兩條待檢測邊的碰撞情況。對(duì)于點(diǎn)/面或者邊/邊精確碰撞檢測,需要執(zhí)行164次加法、245次乘法和9次除法,而在精確碰撞檢測之前使用非共線剔除不可能發(fā)生的碰撞情況,平均只需要35次加法和80次乘法,故實(shí)驗(yàn)證明點(diǎn)/面和邊/邊非共線剔除檢測具有很好的剔除效率,能夠提高碰撞檢測速度。優(yōu)選的技術(shù)方案中,當(dāng)進(jìn)行第η次碰撞檢測時(shí),所述的包圍盒層次結(jié)構(gòu)是根據(jù)第η次碰撞檢測時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測過程的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測過程的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,η為大于I的自然數(shù);相應(yīng)的提高了碰撞檢測速度。優(yōu)選的技術(shù)方案中,當(dāng)進(jìn)行第η次碰撞檢測時(shí),所述的包圍盒測試樹為上一次碰撞檢測過程中的包圍盒測試樹;無需重新構(gòu)建,相應(yīng)的提高了碰撞檢測速度。優(yōu)選的技術(shù)方案中,所述的包圍盒為16-D0P包圍盒,保證了碰撞檢測過程的高效性。本發(fā)明通過在精確碰撞檢測階段,利用非共線剔除相應(yīng)的碰撞情況,由于非共線剔除檢測剔除效率高,檢測速度快,大大減少了精確碰撞檢測的次數(shù),提升了碰撞檢測整體的速度,且具有很好的兼容性。
圖1(a)為AABB包圍盒的示意圖,圖I (b)為8-D0P包圍盒的示意圖,圖I (C)為OBB包圍盒的示意圖。圖2為本發(fā)明連續(xù)碰撞檢測方法的步驟流程示意圖。圖3(a)為BVH的結(jié)構(gòu)示意圖,圖3 (b)為BVTT的結(jié)構(gòu)示意圖。圖4(a)為點(diǎn)/面非共線剔除測試下點(diǎn)與三角形的相對(duì)運(yùn)動(dòng)示意圖。圖4(b)為點(diǎn)/面非共線剔除測試下某時(shí)刻點(diǎn)與三角形相對(duì)位置示意圖。圖5(a)為邊/邊非共線剔除測試下邊與邊的相對(duì)運(yùn)動(dòng)示意圖。
圖5(b)為邊/邊非共線剔除測試下某時(shí)刻邊與邊相對(duì)位置示意圖。
具體實(shí)施例方式為了更為具體地描述本發(fā)明,下面結(jié)合附圖及具體實(shí)施方式
對(duì)本發(fā)明的連續(xù)碰撞檢測方法進(jìn)行詳細(xì)說明。如圖2所示,一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,包括如下步驟(I)構(gòu)建包圍盒層次結(jié)構(gòu)。對(duì)待檢測的三角形網(wǎng)格柔性場景模型中的每個(gè)三角形構(gòu)造對(duì)應(yīng)的16-D0P包圍盒,進(jìn)而建立三角形網(wǎng)格柔性場景模型的包圍盒層次結(jié)構(gòu);當(dāng)進(jìn)行第η次碰撞檢測時(shí),包圍盒層次結(jié)構(gòu)是根據(jù)第η次碰撞檢測時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測過程中的包圍盒層次結(jié)構(gòu)中最底層的16-D0P包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測過程中的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,η為大于I的自然數(shù)。為每個(gè)三角形構(gòu)造對(duì)應(yīng)的16-D0P包圍盒首先將被包圍三角形的頂點(diǎn)分別在各個(gè)方向上進(jìn)行投影,然后判斷這些投影是否落在包圍盒的外部,如果落在包圍盒外部,需要對(duì)該方向上包圍盒的范圍進(jìn)行調(diào)整,保證該投影恰好落在邊界上;對(duì)于16-D0P包圍盒,任何一個(gè)三角形頂點(diǎn)都需要做16次比較,判斷這個(gè)點(diǎn)是否落在包圍盒內(nèi)部。將每個(gè)三角形對(duì)應(yīng)的16-D0P包圍盒,作為BVH中最底層的16-D0P包圍盒。在第一次碰撞檢測時(shí),采用自頂向下的方法構(gòu)建BVH,首先計(jì)算出這些三角形的中心,將這些三角形中心投影到直角坐標(biāo)系的某個(gè)坐標(biāo)軸上,依據(jù)投影的正負(fù),可以把它們分成兩部分,分別為它們構(gòu)造包圍盒。然后采用同樣的方式,對(duì)這兩個(gè)包圍盒進(jìn)行細(xì)分,直到包圍盒中只包含一個(gè)三角形。如圖3(a)所示,有一個(gè)由a、b、c、d四個(gè)三角形組成的場景仏,首先計(jì)算出這些三角形的中心,將這些三角形中心投影到某個(gè)坐標(biāo)軸上,依據(jù)投影的正負(fù),可以把它們分成兩部分,一部分記為B1,另一部分記為B2,分別為B1和B2構(gòu)造包圍盒。然后采用同樣的方式,對(duì)I、B2進(jìn)行細(xì)分,直到包圍盒中只包含一個(gè)三角形。在隨后的碰撞檢測過程中,只需要對(duì)BVH中的非底層的包圍盒大小進(jìn)行重新計(jì)算。這是一個(gè)自底向上的計(jì)算過程,需要將每個(gè)非底層的兩個(gè)子16-D0P包圍盒合并為一個(gè)大的16-D0P包圍盒。(2)構(gòu)建BVTTJf BVTT進(jìn)行包圍盒重疊測試。根據(jù)包圍盒層次結(jié)構(gòu),構(gòu)建BVTT JtBVTT進(jìn)行包圍盒重疊測試,輸出存在包圍盒重疊的葉節(jié)點(diǎn);當(dāng)進(jìn)行第η次碰撞檢測時(shí),包圍盒測試樹為上一次碰撞檢測過程中的包圍盒測試樹。首先,采用自頂向下的構(gòu)建方法構(gòu)造BVTT,如圖3所示,在圖3(a)中已經(jīng)對(duì)整個(gè)場景構(gòu)造了一個(gè)BVH ;相應(yīng)地,圖3(b)就是針對(duì)圖3(a)場景而構(gòu)建的一個(gè)BVTT。BVTT的根節(jié)點(diǎn)(ApA1)就是A1的自碰撞檢測對(duì),然后提取出A1的兩個(gè)子包圍盒B1和B2,分別對(duì)B1和B2做自碰撞檢測,另外還需要檢測B1和B2之間是否發(fā)生碰撞,即比較兩個(gè)16-D0P包圍盒之間是否有重疊。這個(gè)過程可以概括為在這16個(gè)方向上比較兩個(gè)包圍盒是否有交集;如果在某個(gè)方向上沒有重疊,則停止比較并且判定兩個(gè)包圍盒沒有重疊。如果在所有方向上都有重疊,并且B1有子包圍盒a和b,則采用與處理B1和B2相同的方法,判斷B1的兩個(gè)子包圍盒a和b是否與B2發(fā)生碰撞;如果在所有方向上都有重疊,并且B1沒有子包圍盒,但是B2有子包圍盒c和d,則與處理B1和B2相同的方法,判斷B2的兩個(gè)子包圍盒c和d是否與B1發(fā)生碰撞;如果在所有方向上都有重疊,并且B1和B2都已經(jīng)是最底層包圍盒,沒有子包圍盒,輸出B1與B2對(duì)應(yīng)的葉節(jié)點(diǎn)。(3)對(duì)三角形對(duì)非共線剔除后進(jìn)行精確碰撞檢測。精確碰撞檢測過程包括15種碰撞情況的檢測6種點(diǎn)/三角形之間碰撞檢測和9種邊/邊之間碰撞檢測。對(duì)輸出的葉節(jié)點(diǎn)對(duì)應(yīng)的三角形對(duì)先進(jìn)行非共線剔除檢測,對(duì)剔除后保留的碰撞情況進(jìn)行精確碰撞檢測。非共線剔除檢測包括點(diǎn)/面非共線剔除檢測和邊/邊非共線剔除檢測。如圖4(a)所示,對(duì)于待檢測三角形T和T外一待檢測點(diǎn)P,在前一時(shí)刻和當(dāng)前時(shí)刻,T的頂點(diǎn)分別為W b0, C0I和{&1,b1; C1I,T的法向量分別為IItl和II1,待檢測點(diǎn)P分別為Ptl和P:。它們的頂點(diǎn)在該時(shí)間區(qū)間對(duì)相對(duì)于時(shí)間變量t進(jìn)行線性插值,圖4(b)為在某時(shí)刻t,P與T相對(duì)位置示意圖。點(diǎn)/面非共線剔除檢測的方法過程為I)獲取待檢測三角形和待檢測點(diǎn)P的三維信息,令a、b、c分別為待檢測三角形的三個(gè)頂點(diǎn);三維信息包括前一時(shí)刻和當(dāng)前時(shí)刻待檢測三角形各頂點(diǎn)的三維坐標(biāo)、待檢測點(diǎn)P的三維坐標(biāo)、待檢測三角形的法向量;2)在前一時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,根據(jù)三維信息判斷在待檢測三角形所在的投影平面中頂點(diǎn)c是否始終在待檢測三角形ab邊的一側(cè)若是,進(jìn)入步驟3)進(jìn)行判斷;若否,保留待檢測三角形和待檢測點(diǎn)的碰撞情況;3)根據(jù)三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在ab邊的另一側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,進(jìn)入步驟4)進(jìn)行判斷;4)根據(jù)三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在be邊相對(duì)于頂點(diǎn)a的另一側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,進(jìn)入步驟5)進(jìn)行判斷;5)根據(jù)三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在ac邊相對(duì)于頂點(diǎn)b的另一側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,保留待檢測三角形和待檢測點(diǎn)的碰撞情況。步驟2)中,判斷頂點(diǎn)c是否始終在待檢測三角形ab邊的一側(cè)的方法為判斷以下五個(gè)檢測標(biāo)量值(cQ-bQ) · A、(c0-b0) · (C+F) +(Cfb1) · A、(c0_b0) · ( D+E) + (Cfb1) · (C+F)、(c0-b0) · B+(Cfb1) · (D+E)、(C1-Id1) · B是否符號(hào)均相同若是,則頂點(diǎn)c與ab邊可不能共線且在ab邊一側(cè);若否,則直接保留待檢測三角形和待檢測點(diǎn)的碰撞情況;其中A= (b0_a0) Xn0, B=(IDfa1) Xn1, C = (b0 - aQ) X ,D = (b, - at) X η,E= (b0-a0) Xn1, F=(IDra1) Xn0, n0=(b0_a0) X (c0_a0), Ii1=X (Cfa1),
n = n0 + n, -(V1, - V1) X (V1. - Va) , Va=B1-B0, VbA-b。,Vc=C1-C0 ;a0, b0, C0 分別為前一時(shí)刻
a、b、c三個(gè)點(diǎn)的三維坐標(biāo),B1, b1; C1分別為當(dāng)前時(shí)刻a、b、c三個(gè)點(diǎn)的三維坐標(biāo)。如圖5 (a)所示,對(duì)于兩條待檢測邊E和F,在前一時(shí)刻和當(dāng)前時(shí)刻,E的端點(diǎn)分別為和{apbjf的端點(diǎn)分別為{C(l,dj和Ic1, dj。它們的端點(diǎn)在該時(shí)間區(qū)間相對(duì)于時(shí)間變量t進(jìn)行線性插值,圖5(b)為在某時(shí)刻t,E和F相對(duì)位置示意圖。邊/邊非共線剔除檢測的方法過程為I)獲取兩條待檢測邊的三維信息,令a和b分別為待檢測邊E的兩個(gè)端點(diǎn),c和d分別為待檢測邊F的兩個(gè)端點(diǎn),端點(diǎn)a、b、c構(gòu)成的平面為投影平面;三維信息包括前一時(shí)刻和當(dāng)前時(shí)刻待檢測邊各端點(diǎn)的三維坐標(biāo); 2)在前一時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,判斷以下五個(gè)檢測標(biāo)量值(a0_d0) · A、(a0-d0) · (C+F) + Ca1-(I1) · A、(a0_d0) · (D+F) + Ca1-(I1) · (C+F)、(a0-d0) ^+(B1-Cl1) · (D+E), (B1-Cl1) · B是否符號(hào)相同若否,進(jìn)入步驟3)進(jìn)行判斷;若是,則根據(jù)三維信息判斷在投影平面中端點(diǎn)a、b是否均在Cd邊的同一側(cè)若是,則剔除兩條待檢測邊的碰撞情況;若否,進(jìn)入步驟3)進(jìn)行判斷;其中:A=(d0-c0) Xn0, B=(d0-c0) Xn1,C = (d0 -C0) X n ,D = xv3r9jzsqg - C1) X w , E= (d0-c0) Xn1, F=(Cl1-C1) Xn0, n0=(d0-a0) X (c0_a0),Ii1=(Clra1)X(Cra1), W = 0 + H1 - (V - V1,) X (vv -Vk) , vk = C1-C0, vu = a「a0,vv—dfd。。3)在前一時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,判斷以下五個(gè)檢測標(biāo)量值(d0_a0) · A、(d0-a0) · (C+F) + (Clfa1) · A、(d0_a0) · (D+F) + (Clfa1) · (C+F)、(d0-a0) ^+((I1-B1) · (D+E)、(Cl1-B1) · B是否符號(hào)相同若否,保留兩條待檢測邊的碰撞情況;若是,根據(jù)三維信息判斷在投影平面中端點(diǎn)c、d是否均在ab邊的同一側(cè)若是,則剔除兩條待檢測邊的碰撞情況;若否,保留兩條待檢測邊的碰撞情況;其中=AMatTbtl) Xn0,B=(a0-b0) Xn1, (' = (a{) - b0) X , I) = (a; - A1 )χ , E=(a0-b0) Xn1, F=(Bfb1)Xn0,η0= (a0-c0) X (b0-c0),Ii1= (B1-C1) X (Vc1), 《 = 0 + W1 — (Va — V是)X (Vv -Vk) ,Vk =
Ci Cg j Vu-Ei1 a0,vy—bj bg 0最后對(duì)剔除后保留的碰撞情況進(jìn)行精確碰撞檢測;使用元素測試進(jìn)行精確計(jì)算,得到碰撞發(fā)生的第一碰撞時(shí)間。以下通過相關(guān)實(shí)驗(yàn)測試出本實(shí)施方式與傳統(tǒng)碰撞檢測方法在檢測耗時(shí)以及精確碰撞檢測次數(shù)等相關(guān)指標(biāo)上的數(shù)據(jù),如表I所示。表I
權(quán)利要求
1.一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,包括如下步驟 (1)對(duì)待檢測的三角形網(wǎng)格柔性場景模型中的每個(gè)三角形構(gòu)造對(duì)應(yīng)的包圍盒,進(jìn)而建立三角形網(wǎng)格柔性場景模型的包圍盒層次結(jié)構(gòu); (2)根據(jù)所述的包圍盒層次結(jié)構(gòu),構(gòu)建包圍盒測試樹;對(duì)所述的包圍盒測試樹進(jìn)行包圍盒重疊測試,輸出存在包圍盒重疊的葉節(jié)點(diǎn); (3)對(duì)輸出的葉節(jié)點(diǎn)對(duì)應(yīng)的三角形對(duì)進(jìn)行非共線剔除檢測,對(duì)剔除后保留的碰撞情況進(jìn)行精確碰撞檢測。
2.根據(jù)權(quán)利要求I所述的基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,其特征在于所述的非共線剔除檢測包括點(diǎn)/面非共線剔除檢測和邊/邊非共線剔除檢測。
3.根據(jù)權(quán)利要求2所述的基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,其特征在于所述的點(diǎn)/面非共線剔除檢測,包括如下步驟 1)獲取待檢測三角形和待檢測點(diǎn)P的三維信息,令a、b、c分別為待檢測三角形的三個(gè)頂點(diǎn);所述的三維信息包括前一時(shí)刻和當(dāng)前時(shí)刻待檢測三角形各頂點(diǎn)的三維坐標(biāo)、待檢測點(diǎn)P的三維坐標(biāo)、待檢測三角形的法向量; 2)在前ー時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中頂點(diǎn)c是否始終在待檢測三角形ab邊的ー側(cè)若是,進(jìn)入步驟3)進(jìn)行判斷;若否,保留待檢測三角形和待檢測點(diǎn)的碰撞情況; 3)根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在ab邊的另ー側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,進(jìn)入步驟4)進(jìn)行判斷; 4)根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在be邊相對(duì)于頂點(diǎn)a的另ー側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,進(jìn)入步驟5)進(jìn)行判斷; 5)根據(jù)所述的三維信息判斷在待檢測三角形所在的投影平面中待檢測點(diǎn)P是否在ac邊相對(duì)于頂點(diǎn)b的另ー側(cè)若是,則剔除待檢測三角形和待檢測點(diǎn)的碰撞情況;若否,保留待檢測三角形和待檢測點(diǎn)的碰撞情況。
4.根據(jù)權(quán)利要求2所述的基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,其特征在于所述的邊/邊非共線剔除檢測,包括如下步驟 1)獲取兩條待檢測邊的三維信息,令a和b分別為一條待檢測邊的兩個(gè)端點(diǎn),c和d分別為另一條待檢測邊的兩個(gè)端點(diǎn),端點(diǎn)a、b、c構(gòu)成的平面為投影平面;所述的三維信息包括前一時(shí)刻和當(dāng)前時(shí)刻待檢測邊各端點(diǎn)的三維坐標(biāo); 2)在前ー時(shí)刻至當(dāng)前時(shí)刻的整個(gè)運(yùn)動(dòng)過程中,根據(jù)所述的三維信息判斷在所述的投影平面中端點(diǎn)a、b是否均在Cd邊的同一側(cè)若是,則剔除兩條待檢測邊的碰撞情況;若否,進(jìn)入步驟3)進(jìn)行判斷; 3)根據(jù)所述的三維信息判斷在所述的投影平面中端點(diǎn)C、d是否均在ab邊的同一側(cè)若是,則剔除兩條待檢測邊的碰撞情況;若否,保留兩條待檢測邊的碰撞情況。
5.根據(jù)權(quán)利要求I所述的基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,其特征在于當(dāng)進(jìn)行第η次碰撞檢測時(shí),所述的包圍盒層次結(jié)構(gòu)是根據(jù)第η次碰撞檢測時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測過程的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測過程的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,η為大于I的自然數(shù)。
6.根據(jù)權(quán)利要求I所述的基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,其特征在于當(dāng)進(jìn)行第η次碰撞檢測時(shí),所述的包圍盒測試樹為上一次碰撞檢測過程中的包圍盒測試樹。
7.根據(jù)權(quán)利要求I所述的基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,其特征在于所述的包圍盒為16-D0P包圍盒。
全文摘要
本發(fā)明公開了一種基于非共線剔除的柔性場景連續(xù)碰撞檢測方法,包括(1)構(gòu)建包圍盒層次結(jié)構(gòu);(2)構(gòu)建BVTT,對(duì)BVTT進(jìn)行包圍盒重疊測試;(3)對(duì)三角形對(duì)非共線剔除后進(jìn)行精確碰撞檢測。本發(fā)明通過在精確碰撞檢測階段,利用非共線剔除相應(yīng)的碰撞情況,由于非共線剔除檢測剔除效率高,檢測速度快,提高了連續(xù)碰撞檢測的效率,大大減少了精確碰撞檢測的次數(shù),進(jìn)而大大加快了連續(xù)碰撞檢測的整體速度,且具有很好的兼容性。
文檔編號(hào)G06F11/00GK102708017SQ20121015976
公開日2012年10月3日 申請(qǐng)日期2012年5月18日 優(yōu)先權(quán)日2012年5月18日
發(fā)明者唐敏, 杜鵬, 童若鋒, 趙杰伊 申請(qǐng)人:浙江大學(xué)