一種基于gpu加速的實體面片模型間碰撞檢測方法
【專利摘要】本發明公開了一種基于GPU加速的實體面片模型間碰撞檢測方法。與常規方法不同之處在于:對模型中的所有頂點創建平行射線并設定相同的射線長度作為碰撞精度,碰撞精度可根據需要進行人工調節,碰撞檢測過程中所有的碰撞射線有相同的執行程序,因而運用GPU進行所有碰撞射線與模型所有三角面片的相交計算,縮短計算時間,提高計算效率,實現實體面片模型間實時精確的碰撞檢測方法。
【專利說明】-種基于GPU加速的實體面片模型間碰撞檢測方法
【技術領域】
[0001] 本發明涉及虛擬裝配領域,特別涉及一種基于GPU加速的實體面片模型間碰撞檢 測方法。
【背景技術】
[0002] 虛擬裝配是近年來興起的重要研究方向之一,它從產品裝配設計的角度出發,利 用虛擬現實技術和計算機仿真技術,建立一個具有聽覺、視覺、觸覺的多模式虛擬環境,借 助于虛擬現實的輸入輸出設備,設計者可在虛擬環境中人機交互式地進行裝配操作和規 劃,檢驗和評價產品的裝配性能,生成經濟、合理、實用的裝配方案。
[0003] 碰撞檢測是虛擬裝配中必然面臨的技術問題,尤其是面向大規模復雜科學裝置的 裝配設計,碰撞檢測的實時性與精確性直接影響到裝配性能的優劣。然而,現有的碰撞檢測 技術難以同時滿足實時性與精確性的要求。
[0004] 基于層次包圍盒方法的碰撞檢測方法廣泛應用于復雜環境中的碰撞檢測,層 次包圍盒方法的核心思想是用體積略大而幾何特性簡單的包圍盒來近似地描述復雜的 幾何對象,從而只需對包圍盒重疊的對象進行進一步的相交測試,通過構造樹狀層次結 構可以越來越逼近對象的幾何模型,典型的層次結構樹主要包括AABB(alignedaxis boundingbox)層次樹、包圍球(spheres)層次樹、OBB(orientedboundingbox)層次樹和 k-D0Ps(discreteorientationpolytope)層次樹等。
[0005] AABB層次包圍盒的碰撞檢測在研究歷史中使用得最廣,一個給定對象的AABB被 定義為包含該對象且邊平行于坐標軸的最小長方體,它具有構造難度低、存儲量較小、相交 測試復雜度低、緊密性較差等特點。使用AABB層次包圍盒的方法在進行相交測試的過程中 復雜度低,很容易滿足實時性的要求,但其精確性卻依賴于形狀規則的物體;基于一條射線 的精確到三角面片級的碰撞檢測,僅能提高該射線的發射點與另一物體的碰撞精度,如果 模型發射點附近區域為非規則區域,則會出現發射點還未與對方發生碰撞,附近區域先與 對方發生碰撞而未進行檢測的情況,因此實時性與精確性難以同時滿足。
[0006] GPU(GraphicProcessingUnit)最初應用于圖形顯示的加速,GPU的單指令多數 據流(SIMD:SingleInstructionMultipleData)的處理方式可并行地對大規模的數據進 行操作,可大大縮短計算時間。GPU上的可編程語言出現以后,研究人員將一部分運算交由 GPU來執行,以加快程序運行的速度。基于該思路,出現了一些在GPU上執行部分檢測計算 的碰撞檢測算法,如在GPU進行三角形相交計算的方法和在GPU上進行包圍盒流計算的方 法,然而當場景中模型的復雜度較高,全部交由GPU并行處理會出現效率顯著下降,同樣無 法達到精確與實時的目的。
[0007] 本發明一方面為運動模型構建所有平行頂點射線,避免了單一射線帶來的碰撞 滯后的假象,提高了實體間碰撞檢測的精度,另一方面將GPU應用于模型頂點射線查詢的 碰撞檢測計算中,通過碰撞射線與模型所有三角面片的并行求交計算提高了碰撞檢測的速 度。
【發明內容】
[0008] 本發明要解決的技術問題為:克服現有碰撞檢測技術的不足,提供了一種基于 加速的實體面片模型間碰撞檢測方法,能實時、精確的實現模型間的碰撞檢查。
[0009] 本發明米用的技術方案為:一種基于GPU加速的實體面片模型間碰撞檢測方法, 其特征在于,實現步驟包括:
[0010] 步驟(1)、獲取第一模型A所有頂點信息,獲取第二模型B的AABB層次包圍盒位置 信息;
[0011] 步驟(2)、判斷模型B是否為實體三角面片模型,如果是,則不做處理,否則,先對 模型B進行三角面片處理;
[0012]步驟(3)、獲取模型B各三角面片的頂點信息,并將所有頂點信息構建成頂點紋理 V加載至GPU顯存中;
[0013] 步驟(4)、為模型A各個頂點創建射線,設定閾值作為碰撞精度,所有射線相互平 行,且閾值相同,由各個頂點與閾值求得射線的另一端點,將所有頂點射線兩端點位置信息 存儲至系統內存中;
[0014] 步驟(5)、在模型A向模型B運動靠近過程中,判斷模型A各頂點射線與模型B的 層次包圍盒是否相交,如果是,則模型A與模型B的包圍盒發生碰撞,否則,模型A與模型B 不發生碰撞;
[0015]步驟(6)、根據步驟(5),如果模型A與模型B的包圍盒發生碰撞,則為GPU分配存 儲空間,向GPU傳送發生碰撞的射線兩端點位置信息;
[0016] 步驟(7)、根據步驟(6),利用GPU進行碰撞射線與模型B的頂點紋理V的相交運 算,判斷碰撞射線是否與模型B任何一個三角面片都不相交,如果是,則模型A與模型B不 發生碰撞,否則,模型A與模型B發生碰撞。
[0017] 進一步的,對模型A各個頂點均創建了射線,檢測模型A各個頂點與模型B層次包 圍盒的相交情況,對發生相交的射線進行GPU加速處理。
[0018] 進一步的,在模型A與模型B的包圍盒發生碰撞時為GPU分配存儲空間,向GPU傳 送發生碰撞的頂點射線的兩端點位置信息及模型B所有三角面片頂點信息,使用每個GPU 線程進行碰撞射線與模型B所有三角面片的相交運算。
[0019] 本發明與現有技術相比的優點在于:
[0020] (1)、模型所有頂點射線的創建提高了實體間碰撞檢測的精度,尤其適用于不規則 的幾何實體,避免了單一發射點引起的碰撞檢測精度問題。
[0021](2)、利用GPU存儲每個碰撞射線的端點信息,并調用GPU線程并行處理各個碰撞 射線與第二模型所有三角面片的相交運算,提高了碰撞檢測的計算速度,增強了實時性。
【專利附圖】
【附圖說明】
[0022] 圖1是本發明的實現流程圖。
【具體實施方式】
[0023] 如圖1所示,本發明具體實現步驟如下:
[0024]步驟(1)、獲取第一模型(記作模型A)所有頂點信息,獲取第二模型(記作模型 B)AABB層次包圍盒信息;
[0025]步驟(2)、判斷模型B是否為實體三角面片模型,如果是,則不做處理,否則,對模 型B先進行三角面片處理;
[0026] 步驟(3)、獲取模型B各三角面片的頂點信息,三角面片總數記作f,并將f個三角 面頂點信息構建成頂點紋理(記作紋理V)加載至GPU顯存中;
[0027] 步驟⑷、為模型A各個頂點創建射線,假設模型A有n個頂點,第i個頂點坐標記 作(Xi,yi,Zi),設定閾值1作為碰撞精度,所有射線相互平行,射線方向與模型A移動的方向 一致,射線方向記作(Ui,Vi,Wi),其中,
【權利要求】
1. 一種基于GPU加速的實體面片模型間碰撞檢測方法,其特征在于,實現步驟包括: 步驟(1)、獲取第一模型A所有頂點信息,獲取第二模型B的AABB層次包圍盒位置信 息; 步驟(2)、判斷模型B是否為實體三角面片模型,如果是,則不做處理,否則,先對模型B 進行三角面片處理; 步驟(3)、獲取模型B各三角面片的頂點信息,并將所有頂點信息構建成頂點紋理V加 載至GPU顯存中; 步驟(4)、為模型A各個頂點創建射線,設定閾值作為碰撞精度,所有射線相互平行,且 閾值相同,由各個頂點與閾值求得射線的另一端點,將所有頂點射線兩端點位置信息存儲 至系統內存中; 步驟(5)、在模型A向模型B運動靠近過程中,判斷模型A各頂點射線與模型B層次包 圍盒是否相交,如果是,則模型A與模型B的包圍盒發生碰撞,否則,模型A與模型B不發生 碰撞; 步驟(6)、根據步驟(5),如模型A與模型B的層次包圍盒發生碰撞,則為GPU分配存儲 空間,向GPU傳送發生碰撞的射線端點位置信息; 步驟(7)、根據步驟(6),利用GPU進行碰撞射線與模型B的頂點紋理V的相交運算,判 斷碰撞射線是否與模型B任何一個三角面片都不相交,如果是,則模型A與模型B不發生碰 撞,否則,模型A與模型B發生碰撞。
2. 根據權利要求1所述的基于GPU加速的實體面片模型間碰撞檢測方法,其特征在于, 對模型A各個頂點均創建了射線,檢測模型A各個頂點與模型B層次包圍盒的相交情況,對 發生相交的射線進行GPU加速處理。
3. 根據權利要求1所述的基于GPU加速的實體面片模型間碰撞檢測方法,其特征在于, 在模型A與模型B的包圍盒發生碰撞時為GPU分配存儲空間,向GPU實時傳送發生碰撞的 頂點射線的兩端點位置信息,使用每個GPU線程進行碰撞射線與模型B所有三角面片的相 交運算。
【文檔編號】G06T1/00GK104408774SQ201410766711
【公開日】2015年3月11日 申請日期:2014年12月11日 優先權日:2014年12月11日
【發明者】趙錦波, 李廷, 何桃, 龍鵬程, 吳宜燦 申請人:中國科學院合肥物質科學研究院