專利名稱:一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)檢測(cè)技術(shù)領(lǐng)域,具體涉及一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法。
背景技術(shù):
基于三角形網(wǎng)格的連續(xù)碰撞檢測(cè)被廣泛應(yīng)用于不同的技術(shù)領(lǐng)域,包括機(jī)器人運(yùn)動(dòng)路徑規(guī)劃、物理仿真、視頻游戲等,它使用勻速線性插值軌跡,檢測(cè)物體在兩個(gè)離散位置間可能發(fā)生的碰撞情況。目前應(yīng)用最廣泛的連續(xù)碰撞檢測(cè)方法是利用包圍盒層次結(jié)構(gòu)(BVH),先對(duì)整個(gè)場(chǎng)景進(jìn)行包圍盒重疊測(cè)試,當(dāng)檢測(cè)到兩個(gè)包圍盒不相交時(shí),停止遍歷該節(jié)點(diǎn)的子節(jié)點(diǎn)。各種 BVH,如球(Sphere)樹,軸對(duì)齊包圍盒(AABB)樹,定向包圍盒(OBB)樹,離散定向多面體 (k-DOP)樹等,這些層次結(jié)構(gòu)通常采用自頂向下的方法進(jìn)行構(gòu)造,被廣泛應(yīng)用于剛體或柔性物體的碰撞檢測(cè)。對(duì)于柔性物體,除了需要考慮包圍盒的緊湊性外,包圍盒整理和重構(gòu)的效率也至關(guān)重要。圖1為AABB、8-D0P和OBB三種包圍盒的示意圖,對(duì)于簡(jiǎn)單的包圍盒,如 Sphere、AABB,其整理和構(gòu)造十分快捷,但緊湊性較差;對(duì)于復(fù)雜的包圍盒,如0ΒΒ,雖然較為緊湊,但整理和構(gòu)造的計(jì)算量較大;作為折中選擇,k-DOP兼具緊湊性和高效性,因此常被用于柔性物體的包圍盒層次結(jié)構(gòu),但即使使用了最緊湊的包圍盒,剔除率仍然不高。其主要原因在于包圍盒測(cè)試樹(BVTT)中的自碰撞節(jié)點(diǎn),無法使用包圍盒重疊測(cè)試進(jìn)行剔除,只能對(duì)它進(jìn)行分解,通過對(duì)它的下層節(jié)點(diǎn)進(jìn)行包圍盒重疊測(cè)試來反推該節(jié)點(diǎn)是否有自碰撞產(chǎn)生。對(duì)于一個(gè)復(fù)雜的場(chǎng)景模型,如果BVTT中某個(gè)自碰撞節(jié)點(diǎn)包含的下層節(jié)點(diǎn)的層次數(shù)目很多,那么就需要進(jìn)行大量的包圍盒重疊測(cè)試才能判斷出該BVTT節(jié)點(diǎn)是否發(fā)生了自碰撞,造成測(cè)試的效率和速度低下,同時(shí)其檢測(cè)輸出的存在包圍盒重疊的葉節(jié)點(diǎn) “假碰撞”現(xiàn)象明顯,進(jìn)而加重了接下去精確碰撞檢測(cè)的計(jì)算負(fù)荷。精確碰撞檢測(cè)過程可分解為15種碰撞情況的檢測(cè)6種頂點(diǎn)/三角形之間碰撞檢測(cè)和9種邊/邊之間碰撞檢測(cè)。而每個(gè)元素測(cè)試則需要計(jì)算一個(gè)三次方程的根,15種情況需要求解15個(gè)三次方程以及一些附加的判斷條件,因此這個(gè)過程需要耗費(fèi)大量的計(jì)算時(shí)間。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)所存在的上述技術(shù)缺陷,本發(fā)明提供了一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,通過在包圍盒重疊測(cè)試階段,利用法向錐剔除不可能發(fā)生碰撞的自碰撞節(jié)點(diǎn),提高了包圍盒重疊測(cè)試的效率和速度,減輕了精確碰撞檢測(cè)的負(fù)荷。一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,包括如下步驟(1)對(duì)待檢測(cè)的三角形網(wǎng)格柔性場(chǎng)景模型中的每個(gè)三角形構(gòu)造對(duì)應(yīng)的包圍盒和法向錐,進(jìn)而建立三角形網(wǎng)格柔性場(chǎng)景模型的包圍盒層次結(jié)構(gòu),并為包圍盒層次結(jié)構(gòu)中的每個(gè)非底層節(jié)點(diǎn)構(gòu)造對(duì)應(yīng)的法向錐;
(2)根據(jù)所述的包圍盒層次結(jié)構(gòu),構(gòu)建包圍盒測(cè)試樹;對(duì)所述的包圍盒測(cè)試樹進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試,輸出存在包圍盒重疊的葉節(jié)點(diǎn);(3)對(duì)輸出的葉節(jié)點(diǎn)對(duì)應(yīng)的三角形對(duì)進(jìn)行精確連續(xù)碰撞檢測(cè)。所述的步驟(1)中,對(duì)每個(gè)三角形構(gòu)造對(duì)應(yīng)的法向錐,包括如下步驟1)獲取前一時(shí)刻和當(dāng)前時(shí)刻三角形三個(gè)頂點(diǎn)的三維坐標(biāo)和三角形的法向量;2)以三條向量軸nQ、nd^為三條母線所確定的圓錐作為三角形的法向錐;其中 Λ /7n + /7, - (V, - V ) X (V -V )
01 \ ba y y cα/ι ιι/ν
η = - , Va = B1-B0, vb = bfbo,vc = C1-C0 ;a0, b0, C0 分
2
別為前一時(shí)刻三角形三個(gè)頂點(diǎn)的三維坐標(biāo),B1, bi; C1分別為當(dāng)前時(shí)刻三角形三個(gè)頂點(diǎn)的三維坐標(biāo),n0和Ii1分別為前一時(shí)刻和當(dāng)前時(shí)刻待檢測(cè)三角形的法向量。所述的步驟(1)中,包圍盒層次結(jié)構(gòu)中的非底層節(jié)點(diǎn)的法向錐為頂角α = β +max(α工,α 2),軸h = (h^tg/2的圓錐;其中α α 2分別為非底層節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的法向錐的頂角A1A2分別為非底層節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的法向錐的軸,β為、和 h2的夾角。所述的步驟O)中,對(duì)包圍盒測(cè)試樹進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試為 自頂向下判斷包圍盒測(cè)試樹中的自碰撞節(jié)點(diǎn)對(duì)應(yīng)的BVH節(jié)點(diǎn)的法向錐頂角是否大于等于 180度若是,則遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);若否,則對(duì)該自碰撞節(jié)點(diǎn)對(duì)應(yīng)的BVH節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試若BVH節(jié)點(diǎn)存在輪廓邊交叉,則遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);若 BVH節(jié)點(diǎn)不存在輪廓邊交叉,則終止遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);互碰撞節(jié)點(diǎn)采用包圍盒重疊測(cè)試。所述的輪廓邊交叉測(cè)試,包括如下步驟1)在BVH節(jié)點(diǎn)對(duì)應(yīng)的三角形網(wǎng)格子場(chǎng)景模型中任取兩條輪廓邊,所述的輪廓邊為子場(chǎng)景模型中的非公共邊;2)將兩條輪廓邊投影到任一公共平面上,并在公共平面上先判斷前一時(shí)刻兩條輪廓邊投影是否交叉若是,則終止輪廓邊交叉測(cè)試,即BVH節(jié)點(diǎn)存在輪廓邊交叉;若否,則進(jìn)行四次點(diǎn)/邊交叉測(cè)試,即前一時(shí)刻至當(dāng)前時(shí)刻的時(shí)間段內(nèi)任一條輪廓邊投影的任一端點(diǎn)與另一條輪廓邊投影的交叉測(cè)試;若有一次點(diǎn)/邊交叉測(cè)試結(jié)果為存在交叉,則終止輪廓邊交叉測(cè)試,即BVH節(jié)點(diǎn)存在輪廓邊交叉;若四次點(diǎn)/邊交叉測(cè)試結(jié)果均不存在交叉,則當(dāng)前兩條輪廓邊不存在交叉;3)根據(jù)步驟1)和幻,遍歷測(cè)試兩條輪廓邊的所有組合,若兩條輪廓邊的所有組合都不存在交叉,則BVH節(jié)點(diǎn)不存在輪廓邊交叉。優(yōu)選的技術(shù)方案中,所述的輪廓邊交叉測(cè)試的步驟2、中,點(diǎn)/邊交叉測(cè)試結(jié)果取用當(dāng)前BVH節(jié)點(diǎn)的父節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試時(shí)相應(yīng)的點(diǎn)/邊交叉測(cè)試結(jié)果;可縮減相應(yīng)的檢測(cè)速度。優(yōu)選的技術(shù)方案中,所述的輪廓邊交叉測(cè)試的步驟幻中,輪廓邊投影取用當(dāng)前 BVH節(jié)點(diǎn)的父節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試時(shí)相應(yīng)的輪廓邊投影;可縮減相應(yīng)的檢測(cè)速度。優(yōu)選的技術(shù)方案中,所述的輪廓邊交叉測(cè)試的步驟2、中,對(duì)兩條輪廓邊在公共平面上的投影構(gòu)建對(duì)應(yīng)的包圍盒,先進(jìn)行包圍盒重疊測(cè)試,若存在包圍盒重疊,則再進(jìn)行四次點(diǎn)/邊交叉測(cè)試;若不存在包圍盒重疊,則當(dāng)前兩條輪廓邊不存在交叉;可縮減相應(yīng)的檢測(cè)速度。優(yōu)選的技術(shù)方案中,所述的步驟(1)中,當(dāng)進(jìn)行第η次碰撞檢測(cè)時(shí),包圍盒層次結(jié)構(gòu)是根據(jù)第η次碰撞檢測(cè)時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測(cè)過程的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測(cè)過程的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,η為大于1的自然數(shù);相應(yīng)的提高了碰撞檢測(cè)速度。優(yōu)選的技術(shù)方案中,所述的步驟O)中,當(dāng)進(jìn)行第η次碰撞檢測(cè)時(shí),所述的包圍盒測(cè)試樹為上一次碰撞檢測(cè)過程中的包圍盒測(cè)試樹;無需重新構(gòu)建,相應(yīng)的提高了碰撞檢測(cè)速度。優(yōu)選的技術(shù)方案中,所述的包圍盒為16-D0P包圍盒,保證了碰撞檢測(cè)過程的高效性。本發(fā)明通過在包圍盒重疊測(cè)試階段,利用法向錐測(cè)試剔除不可能發(fā)生碰撞的自碰撞節(jié)點(diǎn),提高了包圍盒重疊測(cè)試的效率和速度,大大減少了精確碰撞檢測(cè)的次數(shù),減輕了精確碰撞檢測(cè)的負(fù)荷,進(jìn)而提升了碰撞檢測(cè)整體的速度,且具有良好的兼容性。
圖1(a)為AABB包圍盒的示意圖,圖1(b)為8-D0P包圍盒的示意圖,圖1 (c)為 OBB包圍盒的示意圖。圖2為本發(fā)明連續(xù)碰撞檢測(cè)方法的步驟流程示意圖。圖3(a)為BVH的結(jié)構(gòu)示意圖,圖3 (b)為BVTT的結(jié)構(gòu)示意圖。圖4(a)為三角形運(yùn)動(dòng)過程中法向量變化示意圖,圖4(b)為三角形對(duì)應(yīng)法向錐的示意圖。圖5為輪廓邊交叉測(cè)試的流程示意圖。
具體實(shí)施例方式為了更為具體地描述本發(fā)明,下面結(jié)合附圖及具體實(shí)施方式
對(duì)本發(fā)明的連續(xù)碰撞檢測(cè)方法進(jìn)行詳細(xì)說明。如圖2所示,一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,包括如下步驟(1)構(gòu)造法向錐并構(gòu)建BVH。對(duì)待檢測(cè)的三角形網(wǎng)格柔性場(chǎng)景模型中的每個(gè)三角形構(gòu)造對(duì)應(yīng)的16-D0P包圍盒和法向錐,進(jìn)而建立三角形網(wǎng)格柔性場(chǎng)景模型的包圍盒層次結(jié)構(gòu),并為包圍盒層次結(jié)構(gòu)中的每個(gè)非底層節(jié)點(diǎn)構(gòu)造對(duì)應(yīng)的法向錐;當(dāng)進(jìn)行第η次碰撞檢測(cè)時(shí),包圍盒層次結(jié)構(gòu)是根據(jù)第η次碰撞檢測(cè)時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測(cè)過程中的包圍盒層次結(jié)構(gòu)中最底層的16-D0P包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測(cè)過程中的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,η為大于1的自然數(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è)三角形構(gòu)造對(duì)應(yīng)的法向錐如圖4(a)所示,對(duì)于三角形T,在前一時(shí)刻和當(dāng)前時(shí)刻,T的頂點(diǎn)三維坐標(biāo)分別為{a0,b0,c0}和{^,、(^,!“的法向量分別為 和叫;以三條向量軸1V Ii1和力為三條母線所確定的圓錐作為三角形的法向錐,如圖4(b)所示,其中 Λ /^JZi1-(V6-Va)X(Vc-Va)
η = -----— , n0 = (b0-a0) X (c0-a0), Ii1 = ( - ) X (C1-Ei1),
2
Va = ara0, vb = hrh0, vc = CfC。。將每個(gè)三角形對(duì)應(yīng)的16-D0P包圍盒,作為BVH中最底層的16-D0P包圍盒。在第一次碰撞檢測(cè)時(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è)三角形組成的場(chǎng)景A1,首先計(jì)算出這些三角形的中心,將這些三角形中心投影到某個(gè)坐標(biāo)軸上,依據(jù)投影的正負(fù),可以把它們分成兩部分,一部分記為&,另一部分記為化,分別為B1和化構(gòu)造包圍盒。然后采用同樣的方式,對(duì)Bp B2進(jìn)行細(xì)分,直到包圍盒中只包含一個(gè)三角形。然后,將每個(gè)三角形對(duì)應(yīng)的法向錐,作為BVH中最底層節(jié)點(diǎn)的法向錐;BVH中的非底層節(jié)點(diǎn)的法向錐為頂角α = β+max(Q1, a2)4l|h= Q^h2)/2的圓錐;其中a a2 分別為非底層節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的法向錐的頂角,Ii1A2分別為非底層節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的法向錐的軸,β為Ii1和Il2的夾角。在隨后的碰撞檢測(cè)過程中,只需要重新計(jì)算BVH中最底層包圍盒的法向錐大小, 對(duì)非底層的法向錐大小進(jìn)行整理更新。這是一個(gè)自底向上的計(jì)算過程,需要將兩個(gè)子節(jié)點(diǎn)中的法向錐合并為一個(gè)父節(jié)點(diǎn)的法向錐。(2)構(gòu)建BVTT,對(duì)BVTT進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試。根據(jù)包圍盒層次結(jié)構(gòu),構(gòu)建BVTT ;對(duì)BVTT進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試,輸出存在包圍盒重疊的葉節(jié)點(diǎn);當(dāng)進(jìn)行第η次碰撞檢測(cè)時(shí),包圍盒測(cè)試樹為上一次碰撞檢測(cè)過程中的包圍盒測(cè)試樹。首先,采用自頂向下的構(gòu)建方法構(gòu)造BVTT,如圖3所示,在圖3 (a)中已經(jīng)對(duì)整個(gè)場(chǎng)景構(gòu)造了一個(gè)BVH ;相應(yīng)地,圖3 (b)就是針對(duì)圖3 (a)場(chǎng)景而構(gòu)建的一個(gè)BVTT。自頂向下判斷包圍盒測(cè)試樹中的自碰撞節(jié)點(diǎn)對(duì)應(yīng)的BVH節(jié)點(diǎn)的法向錐頂角是否大于等于180度若是,則遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);若否,則對(duì)該自碰撞節(jié)點(diǎn)對(duì)應(yīng)的BVH節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試若BVH節(jié)點(diǎn)存在輪廓邊交叉,則遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);若BVH節(jié)點(diǎn)不存在輪廓邊交叉,則終止遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);互碰撞節(jié)點(diǎn)采用包圍盒重疊測(cè)試。輪廓邊交叉測(cè)試,包括如下步驟1)在BVH節(jié)點(diǎn)對(duì)應(yīng)的三角形網(wǎng)格子場(chǎng)景模型中任取兩條輪廓邊,輪廓邊為子場(chǎng)景模型中的非公共邊;2)將兩條輪廓邊投影到任一公共平面上,并在公共平面上先判斷前一時(shí)刻兩條輪廓邊投影是否交叉(如圖5所示)若是,則終止輪廓邊交叉測(cè)試,即BVH節(jié)點(diǎn)存在輪廓邊交叉;若否,則進(jìn)行四次點(diǎn)/邊交叉測(cè)試,即前一時(shí)刻至當(dāng)前時(shí)刻的時(shí)間段內(nèi)任一條輪廓邊投影的任一端點(diǎn)與另一條輪廓邊投影的交叉測(cè)試;若有一次點(diǎn)/邊交叉測(cè)試結(jié)果為存在交叉,則終止輪廓邊交叉測(cè)試,即BVH節(jié)點(diǎn)存在輪廓邊交叉;若四次點(diǎn)/邊交叉測(cè)試結(jié)果均不存在交叉,則當(dāng)前兩條輪廓邊不存在交叉;3)根據(jù)步驟1)和2),遍歷測(cè)試兩條輪廓邊的所有組合,若兩條輪廓邊的所有組合都不存在交叉,則BVH節(jié)點(diǎn)不存在輪廓邊交叉。其中,在輪廓邊交叉測(cè)試的步驟幻中,點(diǎn)/邊交叉測(cè)試結(jié)果和輪廓邊投影可取用當(dāng)前BVH節(jié)點(diǎn)的父節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試時(shí)相應(yīng)的點(diǎn)/邊交叉測(cè)試結(jié)果和輪廓邊投影, 同時(shí)可對(duì)兩條輪廓邊在公共平面上的投影構(gòu)建對(duì)應(yīng)的包圍盒,先進(jìn)行包圍盒重疊測(cè)試,若存在包圍盒重疊,則再進(jìn)行四次點(diǎn)/邊交叉測(cè)試;若不存在包圍盒重疊,則當(dāng)前兩條輪廓邊不存在交叉。傳統(tǒng)包圍盒重疊測(cè)試為如圖3(b)所示,BVTT的根節(jié)點(diǎn)(AnA1)就是A1的自碰撞檢測(cè)對(duì),然后提取出A1的兩個(gè)子包圍盒B1和化,分別對(duì)B1和化做自碰撞檢測(cè),另外還需要檢測(cè)B1和化之間是否發(fā)生碰撞,S卩比較兩個(gè)16-D0P包圍盒之間是否有重疊。這個(gè)過程可以概括為在這16個(gè)方向上比較兩個(gè)包圍盒是否有交集;如果在某個(gè)方向上沒有重疊,則停止比較并且判定兩個(gè)包圍盒沒有重疊。如果在所有方向上都有重疊,并且&有子包圍盒 a和b,則采用與處理B1和化相同的方法,判斷B1的兩個(gè)子包圍盒a和b是否與化發(fā)生碰撞;如果在所有方向上都有重疊,并且B1沒有子包圍盒,但是化有子包圍盒c和d,則與處理&和B2相同的方法,判斷化的兩個(gè)子包圍盒c和d是否與B1發(fā)生碰撞;如果在所有方向上都有重疊,并且B1和化都已經(jīng)是最底層包圍盒,沒有子包圍盒,輸出B1與化對(duì)應(yīng)的葉節(jié)點(diǎn)。(3)對(duì)三角形對(duì)進(jìn)行精確連續(xù)碰撞檢測(cè)。對(duì)輸出的葉節(jié)點(diǎn)對(duì)應(yīng)的三角形對(duì),使用元素測(cè)試進(jìn)行精確計(jì)算,得到碰撞發(fā)生的第一碰撞時(shí)間。這個(gè)過程中,將兩個(gè)三角形之間的碰撞檢測(cè)問題,轉(zhuǎn)化為頂點(diǎn)與三角形的碰撞檢測(cè)以及邊與邊的碰撞檢測(cè)。以下通過相關(guān)實(shí)驗(yàn)測(cè)試出本實(shí)施方式與傳統(tǒng)碰撞檢測(cè)方法在檢測(cè)耗時(shí)以及精確碰撞檢測(cè)次數(shù)等相關(guān)指標(biāo)上的數(shù)據(jù)(如表1所示)。表1 碰撞檢測(cè)耗時(shí)以及精確碰撞檢測(cè)次數(shù)的對(duì)比數(shù)據(jù)
權(quán)利要求
1.一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,包括如下步驟(1)對(duì)待檢測(cè)的三角形網(wǎng)格柔性場(chǎng)景模型中的每個(gè)三角形構(gòu)造對(duì)應(yīng)的包圍盒和法向錐,進(jìn)而建立三角形網(wǎng)格柔性場(chǎng)景模型的包圍盒層次結(jié)構(gòu),并為包圍盒層次結(jié)構(gòu)中的每個(gè)非底層節(jié)點(diǎn)構(gòu)造對(duì)應(yīng)的法向錐;(2)根據(jù)所述的包圍盒層次結(jié)構(gòu),構(gòu)建包圍盒測(cè)試樹;對(duì)所述的包圍盒測(cè)試樹進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試,輸出存在包圍盒重疊的葉節(jié)點(diǎn);(3)對(duì)輸出的葉節(jié)點(diǎn)對(duì)應(yīng)的三角形對(duì)進(jìn)行精確連續(xù)碰撞檢測(cè)。
2.根據(jù)權(quán)利要求1所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟(1)中,對(duì)每個(gè)三角形構(gòu)造對(duì)應(yīng)的法向錐,包括如下步驟1)獲取前一時(shí)刻和當(dāng)前時(shí)刻三角形三個(gè)頂點(diǎn)的三維坐標(biāo)和三角形的法向量;2)以三條向量軸nQ、H1和力為三條母線所確定的圓錐作為三角形的法向錐;其中η = - , Va = B1-B0, vb = bfbo,vc = C1-C0 ;a0, b0, C0 分 別為前一時(shí)刻三角形三個(gè)頂點(diǎn)的三維坐標(biāo),B1, bi; C1分別為當(dāng)前時(shí)刻三角形三個(gè)頂點(diǎn)的三維坐標(biāo),n0和Ii1分別為前一時(shí)刻和當(dāng)前時(shí)刻待檢測(cè)三角形的法向量。
3.根據(jù)權(quán)利要求1所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟(1)中,包圍盒層次結(jié)構(gòu)中的非底層節(jié)點(diǎn)的法向錐為頂角α = β +max(α工,α 2),軸h = (h^tg/2的圓錐;其中α α 2分別為非底層節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的法向錐的頂角A1A2分別為非底層節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的法向錐的軸,β為、和 h2的夾角。
4.根據(jù)權(quán)利要求1所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟O)中,對(duì)包圍盒測(cè)試樹進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試為自頂向下判斷包圍盒測(cè)試樹中的自碰撞節(jié)點(diǎn)對(duì)應(yīng)的BVH節(jié)點(diǎn)的法向錐頂角是否大于等于180 度若是,則遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);若否,則對(duì)該自碰撞節(jié)點(diǎn)對(duì)應(yīng)的BVH節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試若BVH節(jié)點(diǎn)存在輪廓邊交叉,則遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);若 BVH節(jié)點(diǎn)不存在輪廓邊交叉,則終止遍歷測(cè)試該自碰撞節(jié)點(diǎn)的子節(jié)點(diǎn);互碰撞節(jié)點(diǎn)采用包圍盒重疊測(cè)試。
5.根據(jù)權(quán)利要求4所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的輪廓邊交叉測(cè)試,包括如下步驟1)在BVH節(jié)點(diǎn)對(duì)應(yīng)的三角形網(wǎng)格子場(chǎng)景模型中任取兩條輪廓邊,所述的輪廓邊為子場(chǎng)景模型中的非公共邊;2)將兩條輪廓邊投影到任一公共平面上,并在公共平面上先判斷前一時(shí)刻兩條輪廓邊投影是否交叉若是,則終止輪廓邊交叉測(cè)試,即BVH節(jié)點(diǎn)存在輪廓邊交叉;若否,則進(jìn)行四次點(diǎn)/邊交叉測(cè)試,即前一時(shí)刻至當(dāng)前時(shí)刻的時(shí)間段內(nèi)任一條輪廓邊投影的任一端點(diǎn)與另一條輪廓邊投影的交叉測(cè)試;若有一次點(diǎn)/邊交叉測(cè)試結(jié)果為存在交叉,則終止輪廓邊交叉測(cè)試,即BVH節(jié)點(diǎn)存在輪廓邊交叉;若四次點(diǎn)/邊交叉測(cè)試結(jié)果均不存在交叉,則當(dāng)前兩條輪廓邊不存在交叉;3)根據(jù)步驟1)和幻,遍歷測(cè)試兩條輪廓邊的所有組合,若兩條輪廓邊的所有組合都不存在交叉,則BVH節(jié)點(diǎn)不存在輪廓邊交叉。
6.根據(jù)權(quán)利要求5所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟2、中,點(diǎn)/邊交叉測(cè)試結(jié)果取用當(dāng)前BVH節(jié)點(diǎn)的父節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試時(shí)相應(yīng)的點(diǎn)/邊交叉測(cè)試結(jié)果。
7.根據(jù)權(quán)利要求5所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟幻中,輪廓邊投影取用當(dāng)前BVH節(jié)點(diǎn)的父節(jié)點(diǎn)進(jìn)行輪廓邊交叉測(cè)試時(shí)相應(yīng)的輪廓邊投影。
8.根據(jù)權(quán)利要求5所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟幻中,對(duì)兩條輪廓邊在公共平面上的投影構(gòu)建對(duì)應(yīng)的包圍盒,先進(jìn)行包圍盒重疊測(cè)試,若存在包圍盒重疊,則再進(jìn)行四次點(diǎn)/邊交叉測(cè)試;若不存在包圍盒重疊, 則當(dāng)前兩條輪廓邊不存在交叉。
9.根據(jù)權(quán)利要求1所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的步驟(1)中,當(dāng)進(jìn)行第η次碰撞檢測(cè)時(shí),包圍盒層次結(jié)構(gòu)是根據(jù)第η次碰撞檢測(cè)時(shí)刻每個(gè)三角形的空間位置,對(duì)上一次碰撞檢測(cè)過程的包圍盒層次結(jié)構(gòu)中最底層的包圍盒進(jìn)行重構(gòu),進(jìn)而自底向上對(duì)上一次碰撞檢測(cè)過程的包圍盒層次結(jié)構(gòu)進(jìn)行整理更新而成的,η為大于1的自然數(shù)。
10.根據(jù)權(quán)利要求1所述的基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,其特征在于所述的包圍盒為16-D0P包圍盒。
全文摘要
本發(fā)明公開了一種基于連續(xù)法向錐剔除的柔性場(chǎng)景連續(xù)碰撞檢測(cè)方法,包括(1)構(gòu)造法向錐并構(gòu)建BVH;(2)構(gòu)建BVTT,對(duì)BVTT進(jìn)行法向錐剔除測(cè)試和包圍盒重疊測(cè)試;(3)對(duì)三角形對(duì)進(jìn)行精確連續(xù)碰撞檢測(cè)。本發(fā)明通過在包圍盒重疊測(cè)試階段,利用法向錐剔除不可能發(fā)生碰撞的自碰撞節(jié)點(diǎn),提高了包圍盒重疊測(cè)試的效率和速度,大大減少了精確碰撞檢測(cè)的次數(shù),減輕了精確碰撞檢測(cè)的負(fù)荷,進(jìn)而提升了碰撞檢測(cè)整體的速度,且具有良好的兼容性。
文檔編號(hào)G06F11/00GK102393827SQ20111020002
公開日2012年3月28日 申請(qǐng)日期2011年7月15日 優(yōu)先權(quán)日2011年7月15日
發(fā)明者唐敏, 杜鵬, 童若鋒, 趙杰伊 申請(qǐng)人:浙江大學(xué)