碰撞檢測方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機技術(shù)領(lǐng)域,具體而言,涉及一種碰撞檢測方法及裝置。
【背景技術(shù)】
[0002]隨著近年來計算機技術(shù)的高速發(fā)展,在軟件構(gòu)建的虛擬環(huán)境中模擬實際物體的運動、檢測其運動過程中的碰撞情況,已經(jīng)越來越廣泛的應(yīng)用到科學(xué)研究、工業(yè)制造等領(lǐng)域。
[0003]企業(yè)用于虛擬仿真的三維模型,其數(shù)據(jù)量龐大,運動過程中模型間的位置關(guān)系復(fù)雜。如何快速且準(zhǔn)確的進行碰撞檢測,成為該項技術(shù)能否被實際應(yīng)用的一個關(guān)鍵問題。
[0004]現(xiàn)有技術(shù)的一種解決方案是:基于包圍盒判斷模型之間的三角片是否相交,進而判斷模型之間是否發(fā)生碰撞。包圍盒可以快速過濾必然不碰撞的情況,從而提高算法效率。
[0005]三維模型的外觀形狀可以用一組三角片近似表示。三維模型輪廓(曲面)的求交運算,被轉(zhuǎn)換為三角片的求交運算。這種方法有效的降低了算法的復(fù)雜度,并且可以通過包圍盒過濾等方法,極大的提高計算的效率。
[0006]然而,由于三角片組無法完美的表示三維模型的形狀特征,在某些位置關(guān)系下,使用上述方案進行的碰撞檢測,有很大幾率會發(fā)生誤判。
[0007]例如,在圖1所示的將一根軸插入到一個孔中的碰撞檢測中,軸的圓柱面與孔的圓柱面同軸且半徑相等。這兩個圓柱面如果用三角片表示,則會轉(zhuǎn)變?yōu)槎嗬庵男螤?。兩圓柱面沿軸線方向發(fā)生相對旋轉(zhuǎn)運動時,始終不會碰撞;但兩多棱柱沿中心軸線方向發(fā)生相對旋轉(zhuǎn)運動時,則會發(fā)生碰撞,如圖2所示。因此,用三角片表示的軸模型與孔模型,用上述方案進行碰撞檢測時,有很大幾率會被誤判為有碰撞發(fā)生。
【發(fā)明內(nèi)容】
[0008]針對相關(guān)技術(shù)中在進行碰撞檢測時可能存在誤判的問題,本發(fā)明提供了一種碰撞檢測方法及裝置。
[0009]根據(jù)本發(fā)明的一個方面,提供了一種碰撞檢測方法,包括:根據(jù)待檢測的第一曲面和第二曲面的幾何信息,判斷所述第一曲面與所述第二曲面之間是否會發(fā)生碰撞;在判斷所述第一曲面與所述第二曲面不會發(fā)生碰撞的情況下,確定屬于所述第一曲面對應(yīng)的第一組三角片與屬于所述第二曲面對應(yīng)的第二組三角片之間不會發(fā)生碰撞。
[0010]可選地,如果根據(jù)所述第一曲面和第二曲面的幾何信息無法判斷所述第一曲面與所述第二曲面之間是否會碰撞,所述方法還包括:對于所述第一組三角片中每個三角片,根據(jù)該三角片的頂點位置信息以及所述第二曲面的幾何信息,檢測該三角片與所述第二曲面是否會發(fā)生碰撞,如果不會,確定該三角片與所述第二組三角片中所有三角片都不會發(fā)生碰撞。
[0011]可選地,對于所述第一組三角片中的一個三角片,如果檢測該三角片的頂點位置信息與所述第二曲面的幾何信息無法判斷該三角片是否會與所述第二曲面發(fā)生碰撞,所述方法還包括:根據(jù)所述第一組三角片中的該三角片的頂點位置信息與所述第二組三角片中各個三角片的頂點位置信息,檢測所述第一組三角片中的該三角片是否會與所述第二組三角片中各個三角片發(fā)生碰撞。
[0012]可選地,檢測該三角片與所述第二曲面是否會發(fā)生碰撞,包括以下至少之一:所述第二曲面為平面,如果所述三角片的三個頂點位于所述第二曲面的同一側(cè),則所述三角片與所述第二曲面不會發(fā)生碰撞;所述第二曲面為圓柱面,如果所述三角片的三個頂點與所述第二曲面中心軸線的距離均小于所述第二曲面半徑,則所述三角片與所述第二曲面不會發(fā)生碰撞;所述第二曲面為球面,如果所述三角片的三個頂點與所述第二曲面球心的距離均小于所述第二曲面半徑,則所述三角片與所述第二曲面不會發(fā)生碰撞。
[0013]可選地,如果所述第一曲面與所述第二曲面為平行平面,則判斷所述第一曲面與所述第二曲面之間是否會發(fā)生碰撞,包括以下至少之一:如果所述第一曲面與所述第二曲面不共面,則所述第一曲面與所述第二曲面不會發(fā)生碰撞;如果所述第一曲面與所述第二曲面共面,且所述第一曲面的法矢方向與所述第二曲面的法矢方向相反,則所述第一曲面與所述第二曲面不會發(fā)生碰撞;如果所述第一曲面與所述第二曲面共面,且所述第一曲面的法矢方向與所述第二曲面的法矢方向相同,則確定根據(jù)所述第一曲面和第二曲面的幾何信息無法判斷所述第一曲面與所述第二曲面之間是否會碰撞。
[0014]可選地,如果所述第一曲面與所述第二曲面為同軸圓柱面,則判斷所述第一曲面與所述第二曲面之間是否會發(fā)生碰撞,包括以下至少之一:如果所述第一曲面與所述第二曲面的半徑不相等,則所述第一曲面與所述第二曲面之間不會發(fā)生碰撞;如果所述第一曲面與所述第二曲面的半徑相等,且所述第一曲面和所述第二曲面的方向相反,則所述第一曲面與所述第二曲面之間不會發(fā)生碰撞;如果所述第一曲面與所述第二曲面的半徑相等,且所述第一曲面和所述第二曲面的方向相同,則確定根據(jù)所述第一曲面和第二曲面的幾何信息無法判斷所述第一曲面與所述第二曲面之間是否會碰撞。
[0015]可選地,如果所述第一曲面與所述第二曲面為同心球面,則判斷所述第一曲面與所述第二曲面之間是否會發(fā)生碰撞,包括以下至少之一:如果所述第一曲面與所述第二曲面的半徑不相等,則所述第一曲面與所述第二曲面不會發(fā)生碰撞;如果所述第一曲面與所述第二曲面的半徑相等,且所述第一曲面與所述第二曲面的方向相反,則所述第一曲面與所述第二曲面不會發(fā)生碰撞;如果所述第一曲面與所述第二曲面的半徑相等,且所述第一曲面與所述第二曲面的方向相同,則確定無法判斷所述第一曲面與所述第二曲面是否會發(fā)生碰撞O
[0016]根據(jù)本發(fā)明的另一個方面,提供了一種碰撞檢測裝置,包括:判斷模塊,用于根據(jù)待檢測的第一曲面和第二曲面的幾何信息,判斷所述第一曲面與所述第二曲面之間是否會發(fā)生碰撞;確定模塊,用于在所述判斷模塊判斷所述第一曲面與所述第二曲面不會發(fā)生碰撞的情況下,確定屬于所述第一曲面對應(yīng)的第一組三角片與屬于所述第二曲面對應(yīng)的第二組三角片之間不會發(fā)生碰撞。
[0017]可選地,所述裝置還包括:第一檢測模塊,用于在所述判斷模塊根據(jù)所述第一曲面和第二曲面的幾何信息不能判斷出所述第一曲面與所述第二曲面是否會發(fā)生碰撞時,對于所述第一組三角片中每個三角片,根據(jù)該三角片的頂點位置信息以及所述第二曲面的幾何信息,檢測該三角片與所述第二曲面是否會發(fā)生碰撞,如果不會,而確定該三角片與所述第二組三角片中所有三角片都不會發(fā)生碰撞。
[0018]可選地,所述裝置還包括:第二檢測模塊,用于在所述第一檢測模塊根據(jù)所述第一組三角片中的一個三角片的頂點位置信息與所述第二曲面的幾何信息無法判斷該三角片是否會與所述第二曲面發(fā)生碰撞的情況下,根據(jù)所述三角片的頂點位置信息與所述第二組三角片中各個三角片的頂點位置信息,檢測所述第一組三角片中的該三角片是否會與所述第二組三角片中各個三角片發(fā)生碰撞。
[0019]通過本發(fā)明,根據(jù)曲面的幾何信息,判斷兩個曲面之間是否發(fā)生碰撞,在判斷兩個曲面不會發(fā)生碰撞時,判定這兩個曲面之間的三角片也不會發(fā)生碰撞,從而減少了誤判幾率,提高了檢測的速度。
【附圖說明】
[0020]此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
[0021]圖1為將一根軸插入到一個孔中的碰撞檢測示例圖;
[0022]圖2為將一根軸插入到一個孔中的碰撞檢測結(jié)果的示意圖;
[0023]圖3為根據(jù)本發(fā)明實施例的碰撞檢測方法的流程圖;
[0024]圖4為本發(fā)明可選實施例的碰撞檢測流程圖;
[0025]圖5為根據(jù)本發(fā)明實施例的碰撞檢測裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0026]下文中將參考附圖并結(jié)合實施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
[0027]在本發(fā)明實施例中,在現(xiàn)有