亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法與流程

文檔序號(hào):12722895閱讀:825來(lái)源:國(guó)知局
一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法與流程

本發(fā)明涉及計(jì)算機(jī)圖形學(xué)領(lǐng)域,尤其涉及一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法。



背景技術(shù):

碰撞檢測(cè)(Collision Detection,簡(jiǎn)稱CD)技術(shù)用于檢測(cè)空間中的一個(gè)或多個(gè)幾何物體之間是否存在重疊,如果存在則識(shí)別重疊特征。碰撞檢測(cè)算法被廣泛地應(yīng)用在計(jì)算機(jī)圖形學(xué)領(lǐng)域的多方面應(yīng)用中,包括基于物理的動(dòng)畫(huà)、幾何建模、6-DOF觸覺(jué)渲染、機(jī)器人路徑規(guī)劃、醫(yī)學(xué)成像、交互式計(jì)算機(jī)游戲等。

隨著多核圖形處理器(Graphics Processing Unit,簡(jiǎn)稱GPU)這樣的大規(guī)模并行處理器的快速發(fā)展,以及NVIDA推出的通用并行計(jì)算架構(gòu)CUDA(Compute Unified Device Architecture,簡(jiǎn)稱CUDA)。許多基于單處理器的算法已經(jīng)利用CUDA技術(shù)擴(kuò)展到GPU上。如層次包圍盒(Bounding Volume Hierarchy,簡(jiǎn)稱BVH)結(jié)構(gòu)就是提高碰撞檢測(cè)性能很好的技術(shù)。但是由于一般的串行算法對(duì)數(shù)據(jù)依賴較高,從存儲(chǔ)器結(jié)構(gòu)訪問(wèn)數(shù)據(jù)會(huì)有延遲。如BVH這類空間數(shù)據(jù)結(jié)構(gòu)的算法復(fù)雜度較高,很多都需要進(jìn)行預(yù)處理或是代價(jià)較高的數(shù)據(jù)結(jié)構(gòu)重構(gòu)。為了解決這些問(wèn)題,首先,需要將這些有效的串行算法重新設(shè)計(jì)適用于大規(guī)模的并行處理器,其次,需要在保證碰撞檢測(cè)性能提高的基礎(chǔ)上,摒棄預(yù)處理以及代價(jià)較高的數(shù)據(jù)結(jié)構(gòu)重構(gòu)操作。

因此,本領(lǐng)域的技術(shù)人員致力于開(kāi)發(fā)一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法,利用對(duì)基本的碰撞檢測(cè)算法的優(yōu)化在GPU上進(jìn)行大規(guī)模并行計(jì)算來(lái)對(duì)物體進(jìn)行快速、準(zhǔn)確的碰撞檢測(cè),算法適用于中等復(fù)雜度的模型,涉及基于分離軸的三角形相交測(cè)試、減少內(nèi)存訪問(wèn)優(yōu)化策略、共享內(nèi)存優(yōu)化策略等方法,降低了算法復(fù)雜度,提高了碰撞檢測(cè)算法的性能。



技術(shù)實(shí)現(xiàn)要素:

有鑒于現(xiàn)有技術(shù)的上述缺陷,本發(fā)明所要解決的技術(shù)問(wèn)題是開(kāi)發(fā)一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法,利用對(duì)基本的碰撞檢測(cè)算法的優(yōu)化在GPU上進(jìn)行大規(guī)模并行計(jì)算來(lái)對(duì)物體進(jìn)行快速、準(zhǔn)確的碰撞檢測(cè),算法適用于中等復(fù)雜度的模型,涉及基于分離軸的三角形相交測(cè)試、減少內(nèi)存訪問(wèn)優(yōu)化策略、共享內(nèi)存優(yōu)化策略等方法,降低了算法復(fù)雜度,提高了碰撞檢測(cè)算法的性能。

為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法,包括基本碰撞算法部分和算法優(yōu)化部分,其中,

基本碰撞算法的具體步驟包括:

步驟11、進(jìn)行三角形相交測(cè)試;

步驟12、進(jìn)行兩個(gè)物體間的碰撞檢測(cè);

算法優(yōu)化部分利用減少內(nèi)存訪問(wèn)策略和共享內(nèi)存策略,具體步驟包括:

步驟21、通過(guò)減少內(nèi)存訪問(wèn)次數(shù)的策略,對(duì)基本碰撞算法進(jìn)行優(yōu)化;

步驟22、通過(guò)內(nèi)存共享的策略,對(duì)基本碰撞算法進(jìn)行優(yōu)化;

步驟23、結(jié)合減少內(nèi)存訪問(wèn)的次數(shù)和內(nèi)存共享,對(duì)基本碰撞算法進(jìn)行優(yōu)化。

進(jìn)一步地,步驟11具體為:

步驟111、尋找三角形對(duì)之間所有的潛在分離軸;

步驟112、利用分離軸方式進(jìn)行三角形相交測(cè)試。

尋找潛在的分離軸方式:假設(shè)有三角形x1x2x3和三角形x4x5x6,π1、π2分別是三角形x1x2x3和三角形x4x5x6的平面法線,ei(i=1,…6)為三角形x1x2x3和三角形x4x5x6的邊,令L為潛在的分離軸,對(duì)于三維空間的兩個(gè)三角形,分離測(cè)試只要考慮有限集合的潛在的分離軸,這里的分離軸包括π1,π2,ei×ej(i=1,2,3;j=4,5,6),π1×ei(i=1,2,3),π2×ej(j=4,5,6)。

進(jìn)一步地,如果存在一條潛在分離軸L,通過(guò)將兩個(gè)三角形投影到分離軸L上進(jìn)行相交測(cè)試。三角形x1x2x3在L上的投影區(qū)間被設(shè)置為三角形x4x5x6在L上的投影區(qū)間被設(shè)置為當(dāng)I0與I1兩個(gè)投影區(qū)間不相交,判定兩個(gè)三角形不相交。特別的,當(dāng)兩個(gè)三角形在L上的投影區(qū)間滿足或者時(shí),這兩個(gè)三角形顯然是不相交的。

進(jìn)一步地,利用分離軸理論進(jìn)行三角形相交測(cè)試時(shí),相交測(cè)試的投影和區(qū)間測(cè)量方式操作類似,所以,已知任意一個(gè)投影區(qū)間不相交,就不用進(jìn)行剩余的分離軸測(cè)試。如果所有分離軸測(cè)試結(jié)束,沒(méi)有一個(gè)區(qū)間是分離的,那么這兩個(gè)凸集必定相交。

進(jìn)行物體碰撞檢測(cè),由于測(cè)試的物體是由三角形構(gòu)成的網(wǎng)狀物體,所以利用三角形相交測(cè)試方法,將任意物體A和B之間的碰撞檢測(cè)轉(zhuǎn)化為A與B之間兩組三角形之間的相交計(jì)算。

進(jìn)一步地,兩個(gè)物體間的碰撞檢測(cè)具體為:每一個(gè)CUDA線程讀取物體A中的一個(gè)三角形a和物體B中的一個(gè)三角形b,然后計(jì)算它們對(duì)應(yīng)的相交狀態(tài);當(dāng)三角形a和三角形b相交,它們對(duì)應(yīng)的三角形索引號(hào)被存儲(chǔ)。

進(jìn)一步地,步驟21具體為:三角形數(shù)據(jù)被設(shè)置為讀取一次,多次使用;每一個(gè)CUDA線程讀取物體A中的一個(gè)三角形,同時(shí)讀取物體B中的K個(gè)三角形,每一個(gè)CUDA線程進(jìn)行K次基礎(chǔ)碰撞檢測(cè)。

進(jìn)一步地,步驟22具體為:從設(shè)備內(nèi)存加載三角形數(shù)據(jù)到共享內(nèi)存,然后將數(shù)據(jù)同步給其他所有CUDA線程,使得每個(gè)CUDA線程都可以安全讀取到不同CUDA線程填充的共享內(nèi)存地址;由于共享內(nèi)存時(shí)稀缺資源,每次只能加載兩個(gè)物體的部分三角形數(shù)據(jù)進(jìn)入共享內(nèi)存。從物體A和B中分別加載K個(gè)三角形數(shù)據(jù)進(jìn)入共享內(nèi)存,利用共享內(nèi)存的數(shù)據(jù)進(jìn)行碰撞測(cè)試,最后將結(jié)果寫(xiě)回設(shè)備內(nèi)存。

進(jìn)一步地,步驟23具體為:利用共享內(nèi)存的方式,先從物體A和物體B中分別加載K個(gè)三角形數(shù)據(jù)進(jìn)入共享內(nèi)存,然后利用共享內(nèi)存中的三角形數(shù)據(jù)進(jìn)行碰撞檢測(cè)。碰撞檢測(cè)時(shí),利用減少內(nèi)存訪問(wèn)的策略,讀取物體A中的一個(gè)三角形與物體B中的所有三角形進(jìn)行碰撞檢測(cè),減少不必要數(shù)據(jù)的傳輸。

技術(shù)效果

1、減少內(nèi)存的訪問(wèn)次數(shù),保證全局內(nèi)存和設(shè)備內(nèi)存之間的數(shù)據(jù)傳輸頻率;

2、使用共享內(nèi)存,充分利用共享內(nèi)存中的資源,共享內(nèi)存的速度比全局內(nèi)存快,在共享內(nèi)存中進(jìn)行碰撞檢測(cè),最后將碰撞結(jié)果寫(xiě)回設(shè)備內(nèi)存;

3、實(shí)現(xiàn)在GPU上進(jìn)行大規(guī)模并行計(jì)算來(lái)對(duì)物體進(jìn)行快速、準(zhǔn)確的碰撞檢測(cè),算法適用于中等復(fù)雜度的模型,涉及基于分離軸的三角形相交測(cè)試、減少內(nèi)存訪問(wèn)優(yōu)化策略、共享內(nèi)存優(yōu)化策略等方法,降低了算法復(fù)雜度,提高了碰撞檢測(cè)算法的性能。

以下將結(jié)合附圖對(duì)本發(fā)明的構(gòu)思、具體結(jié)構(gòu)及產(chǎn)生的技術(shù)效果作進(jìn)一步說(shuō)明,以充分地了解本發(fā)明的目的、特征和效果。

附圖說(shuō)明

圖1是本發(fā)明的一個(gè)較佳實(shí)施例的分離軸方式進(jìn)行三角形相交測(cè)試的示意圖,其中(a)給出三維空間中的兩個(gè)三角形面片,(b)為兩個(gè)三角形其中一條分離軸測(cè)試示意圖。

圖2是本發(fā)明的一個(gè)較佳實(shí)施例的物體A和物體B在GPU上進(jìn)行碰撞檢測(cè)示意圖。

圖3是本發(fā)明的一個(gè)較佳實(shí)施例的利用減少內(nèi)存訪問(wèn)優(yōu)化策略,物體A和物體B在GPU上進(jìn)行碰撞檢測(cè)示意圖;

圖4是本發(fā)明的一個(gè)較佳實(shí)施例的利用共享內(nèi)存優(yōu)化策略,物體A和物體B在GPU上進(jìn)行碰撞檢測(cè)示意圖;

圖5是本發(fā)明的一個(gè)較佳實(shí)施例的結(jié)合減少內(nèi)存訪問(wèn)策略和共享內(nèi)存優(yōu)化策略,物體A和B在GPU上進(jìn)行碰撞檢測(cè)示意圖。

圖6是本發(fā)明的一較佳實(shí)施例的從物體A和物體B中分別加載K個(gè)三角形進(jìn)入共享內(nèi)存進(jìn)行碰撞檢測(cè)示意圖。

具體實(shí)施方式

如圖1所示,本發(fā)明的一較佳實(shí)施例的一種面向GPU的三角網(wǎng)格碰撞檢測(cè)方法,包括基本碰撞算法部分和算法優(yōu)化部分,其中,

基本碰撞算法的具體步驟包括:

步驟11、進(jìn)行三角形相交測(cè)試;優(yōu)選的,使用分離軸進(jìn)行三角形相交測(cè)試;

具體地,步驟11包括:

步驟111、尋找三角形對(duì)之間所有的潛在分離軸;

步驟112、利用分離軸方式進(jìn)行三角形相交測(cè)試。

步驟12、進(jìn)行兩個(gè)物體間的碰撞檢測(cè);

進(jìn)行物體碰撞檢測(cè),由于測(cè)試的物體是由三角形構(gòu)成的網(wǎng)狀物體,所以利用三角形相交測(cè)試方法,將任意物體A和物體B之間的碰撞檢測(cè)轉(zhuǎn)化為物體A和物體B之間兩組三角形之間的相交計(jì)算。

算法優(yōu)化部分利用減少內(nèi)存訪問(wèn)策略和共享內(nèi)存策略,具體步驟包括:

步驟21、通過(guò)減少內(nèi)存訪問(wèn)次數(shù)的策略,對(duì)基本碰撞算法進(jìn)行優(yōu)化;

步驟22、通過(guò)內(nèi)存共享的策略,對(duì)基本碰撞算法進(jìn)行優(yōu)化;

步驟23、結(jié)合減少內(nèi)存訪問(wèn)的次數(shù)和內(nèi)存共享,對(duì)基本碰撞算法進(jìn)行優(yōu)化。

基本碰撞算法部分,具體地,如圖2(a)所示,x1x2x3為第一個(gè)三角形,x4x5x6為第二個(gè)三角形。π1,π2分別是第一個(gè)三角形和第二個(gè)三角形的平面法線。ei(i=1,…,6)為這兩個(gè)三角形的邊。令L為潛在的分離軸,三維場(chǎng)景的兩個(gè)三角形,分離測(cè)試只需要考慮有限個(gè)可能的分離軸,這里包括π1,π2,ei×ej(i=1,2,3,j=4,5,6),π1×ei(i=1,2,3),π2×ej(j=4,5,6)。

利用分離軸方式進(jìn)行三角形的相交測(cè)試就是,判斷三角形對(duì)在所有可能的分離軸上的投影區(qū)間是否相交,如果存在一個(gè)分離軸上兩個(gè)投影區(qū)間不相交,則這兩個(gè)三角形不相交;如果找不到一個(gè)分離軸使得兩個(gè)三角形的投影區(qū)間不相交,則這兩個(gè)三角形相交。所以,在利用分離軸進(jìn)行三角形相交測(cè)試時(shí),只要找到兩個(gè)三角形在任意一個(gè)分離軸上不相交,則剩余的分離軸測(cè)試就不用進(jìn)行。

如圖2(b)所示,分別為x1x2x3,x4x5x6兩個(gè)三角形的投影區(qū)間。如果存在一個(gè)潛在的分離軸L,使得I0,I1不相交,那么判定兩個(gè)三角形不相交。特別地,當(dāng)或者時(shí),顯然,兩個(gè)三角形不相交。完整的分離測(cè)試是,判斷三角形對(duì)在所有可能的分離軸上的投影區(qū)間是否相交,如果沒(méi)有一個(gè)區(qū)間是分離的,那么兩個(gè)三角形是相交的。實(shí)際上,如果任意一個(gè)區(qū)間已知不相交,那么兩個(gè)三角形就是不相交的,就不需要再進(jìn)行剩余的分離軸測(cè)試。

如圖3所示,物體A和物體B的三角形列表分別在左側(cè)和上側(cè)。每一個(gè)CUDA線程讀取物體A中的一個(gè)三角形a和物體B中的一個(gè)三角形b,然后計(jì)算他們的相應(yīng)的相交狀態(tài)。如果兩個(gè)三角形相交,他們對(duì)應(yīng)的三角形索引號(hào)會(huì)被存儲(chǔ)以備之后使用。結(jié)果的存儲(chǔ)利用CUDA線程中的原子內(nèi)存訪問(wèn)。物體A和物體B分別包含n和m個(gè)三角形,三角形成對(duì)交叉測(cè)試需要nm次。每個(gè)物體的頂點(diǎn)以一維數(shù)組的形式被存儲(chǔ)在設(shè)備全局內(nèi)存。一個(gè)頂點(diǎn)需要三個(gè)浮點(diǎn)數(shù),一個(gè)三角形需要九個(gè)浮點(diǎn)數(shù)。因此物體A和物體B分別需要分配9n和9m個(gè)全局內(nèi)存。每個(gè)線程塊需要進(jìn)行K×K次碰撞測(cè)試,測(cè)試塊內(nèi)每個(gè)線程進(jìn)行一個(gè)基本的碰撞測(cè)試。對(duì)于一個(gè)可變形物體的自碰撞,物體A和物體B是完全相同的,碰撞測(cè)試T(i,j)=T(j,i)。為了避免重復(fù)的碰撞測(cè)試,相交測(cè)試只在三角形對(duì)中B的索引值大于A的索引時(shí)進(jìn)行。如圖3所示,自碰撞檢測(cè)我們約定j>i。

算法優(yōu)化部分,具體地,用步驟12中的碰撞檢測(cè)算法,進(jìn)行基本碰撞檢測(cè)時(shí),物體A中的每個(gè)三角形從全局內(nèi)存讀取m次,物體B中三角形被讀取n次。所有的三角形從全局內(nèi)存讀取了2n×m次。為了減少數(shù)據(jù)在全局內(nèi)存和設(shè)備之間的傳輸次數(shù),如圖4所示,從物體A中讀取一個(gè)三角形與物體B中所有三角形進(jìn)行碰撞檢測(cè)。每個(gè)線程同時(shí)讀取物體A中一個(gè)三角形和物體B中的K個(gè)三角形,每個(gè)線程進(jìn)行K個(gè)基礎(chǔ)碰撞測(cè)試。

利用共享內(nèi)存同樣也能減少數(shù)據(jù)在全局內(nèi)存和設(shè)備之間的傳輸次數(shù)。只有計(jì)算能力2.X或以上的GPU上才能使用。我們從設(shè)備內(nèi)存中加載三角形數(shù)據(jù)到共享內(nèi)存,然后同步給線程塊內(nèi)所有其他線程。使得每個(gè)線程都能安全地讀取到不同地共享內(nèi)存地址。利用共享內(nèi)存中的數(shù)據(jù)進(jìn)行碰撞檢測(cè),最后將碰撞檢測(cè)結(jié)果寫(xiě)回設(shè)備內(nèi)存。由于共享內(nèi)存時(shí)稀缺資源,每次只能加載兩個(gè)物體的部分三角形數(shù)據(jù)進(jìn)入共享內(nèi)存。如圖5所示,從物體A和物體B中分別加載K個(gè)三角形進(jìn)入共享內(nèi)存,進(jìn)行碰撞檢測(cè),每個(gè)線程需要進(jìn)行K×K個(gè)基礎(chǔ)碰撞檢測(cè),最后將結(jié)果寫(xiě)回設(shè)備內(nèi)存。

結(jié)合步驟21和步驟22中的兩種優(yōu)化方式,如圖6所示,從物體A和物體B中分別加載K個(gè)三角形進(jìn)入共享內(nèi)存進(jìn)行碰撞檢測(cè)。碰撞檢測(cè)時(shí),利用步驟21中提到的減少內(nèi)存訪問(wèn)的方式,同時(shí)讀取A中一個(gè)三角形和B中K個(gè)三角形進(jìn)行碰撞檢測(cè)。

綜上所述,通過(guò)對(duì)基本碰撞算法的優(yōu)化,有效的將物體的碰撞檢測(cè)在GPU下進(jìn)行大規(guī)模的并行計(jì)算方式實(shí)現(xiàn)。在降低算法復(fù)雜度、提高碰撞檢測(cè)性能的前提下,能夠有效的對(duì)中等復(fù)雜度的模型進(jìn)行快速、準(zhǔn)確的碰撞檢測(cè),同時(shí)摒棄了預(yù)處理以及代價(jià)較高的數(shù)據(jù)結(jié)構(gòu)重構(gòu)操作。

以上詳細(xì)描述了本發(fā)明的較佳具體實(shí)施例。應(yīng)當(dāng)理解,本領(lǐng)域的普通技術(shù)人員無(wú)需創(chuàng)造性勞動(dòng)就可以根據(jù)本發(fā)明的構(gòu)思作出諸多修改和變化。因此,凡本技術(shù)領(lǐng)域中技術(shù)人員依本發(fā)明的構(gòu)思在現(xiàn)有技術(shù)的基礎(chǔ)上通過(guò)邏輯分析、推理或者有限的實(shí)驗(yàn)可以得到的技術(shù)方案,皆應(yīng)在由權(quán)利要求書(shū)所確定的保護(hù)范圍內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1