一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法
【專利摘要】本發(fā)明公開了一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法,通過(guò)構(gòu)建虛擬物體的包圍盒樹,以各節(jié)點(diǎn)的包圍盒為數(shù)據(jù)庫(kù),根據(jù)計(jì)算機(jī)流程數(shù)將數(shù)據(jù)庫(kù)進(jìn)行分塊;通過(guò)數(shù)據(jù)分塊,可以有效減少每個(gè)處理器處理的任務(wù)數(shù),避免數(shù)據(jù)分配不均勻造成的延誤。流水線方法為一種典型的并行處理方法,將問(wèn)題分為若干個(gè)解決步驟,各步驟由獨(dú)立的處理器執(zhí)行,通過(guò)加速各處理器從而提高整條流水線速度。
【專利說(shuō)明】
一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及一種碰撞檢測(cè)方法,具體是一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè) 方法。
【背景技術(shù)】
[0002] 碰撞檢測(cè)是虛擬現(xiàn)實(shí)技術(shù)的重要組成部分,其主要任務(wù)是檢測(cè)各種物體模型之間 是否發(fā)生碰撞,如果發(fā)生碰撞則給出碰撞信息,同時(shí)指導(dǎo)系統(tǒng)進(jìn)行下一步的操作。碰撞檢測(cè) 的基礎(chǔ)是現(xiàn)實(shí)生活中兩個(gè)不可穿透的對(duì)象不能同時(shí)共享同一片空間區(qū)域的事實(shí)。目前,按 照檢測(cè)對(duì)象的性質(zhì),碰撞檢測(cè)可以分為基于時(shí)間域和基于空間域的檢測(cè)算法,在此基礎(chǔ)上 又可以進(jìn)一步劃分為不同的種類。
[0003] 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和虛擬現(xiàn)實(shí)技術(shù)的興起,碰撞檢測(cè)問(wèn)題再一次成為研究的熱 點(diǎn)。虛擬場(chǎng)景的規(guī)模不斷擴(kuò)大,模型的精度也越來(lái)越高,通過(guò)減少碰撞檢測(cè)的次數(shù)來(lái)加快算 法成為研究的重點(diǎn)方向。
【發(fā)明內(nèi)容】
[0004] 針對(duì)上述現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明提供一種基于數(shù)據(jù)分塊及并行處理的碰撞 檢測(cè)方法,數(shù)據(jù)分塊和并行技術(shù)引入碰撞檢測(cè)中,提高了物體碰撞檢測(cè)速度,快速識(shí)別碰撞 結(jié)果。
[0005] 為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:該種基于數(shù)據(jù)分塊及并行處理的 碰撞檢測(cè)方法,包括以下步驟:
[0006] (1)以虛擬物體幾何全集的包圍盒作為根節(jié)點(diǎn),根據(jù)與分裂平面的位置將所有元 素分為數(shù)量相當(dāng)?shù)膬刹糠?,分別建立包圍盒;其中,以包圍盒在此方向上最長(zhǎng)軸為方向軸選 擇分裂平面;
[0007] (2)以上述這兩部分為根節(jié)點(diǎn)自頂向下進(jìn)行遞歸分治,葉節(jié)點(diǎn)的個(gè)數(shù)滿足條件2m <M,m為包圍盒層數(shù),Μ為處理器數(shù);
[0008] (3)采用數(shù)據(jù)分塊技術(shù)分割包圍盒樹,以每個(gè)葉節(jié)點(diǎn)的包圍盒為一個(gè)數(shù)據(jù)塊組成 數(shù)據(jù)庫(kù),各層的每個(gè)數(shù)據(jù)塊由計(jì)算機(jī)對(duì)應(yīng)的一個(gè)處理器負(fù)責(zé),將各物體的碰撞問(wèn)題細(xì)分為 數(shù)據(jù)塊中幾何元素的碰撞檢測(cè);
[0009] (4)檢測(cè)環(huán)境中兩虛擬物體幾何全集的包圍盒,若發(fā)生碰撞,對(duì)物體的邊界進(jìn)行預(yù) 處理,以各自葉節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn);
[0010] (5)取兩物體的當(dāng)前結(jié)點(diǎn)的包圍盒逐一配對(duì)進(jìn)行碰撞測(cè)試,若不發(fā)生碰撞,則停止 遍歷,若發(fā)生碰撞,則將當(dāng)前節(jié)點(diǎn)存入鏈表中,鏈表中各數(shù)據(jù)相互獨(dú)立,由各處理器并行進(jìn) 行訪問(wèn)調(diào)用,并作為下次碰撞檢測(cè)的初選范圍;
[0011] (6)以當(dāng)前節(jié)點(diǎn)的上層根節(jié)點(diǎn)為當(dāng)前結(jié)點(diǎn),遞歸執(zhí)行步驟(5)。
[0012 ] 進(jìn)一步,所述包圍盒為軸對(duì)齊包圍盒ΑΑΒΒ或者方向包圍盒0ΒΒ或者k-dop包圍盒。
[0013]進(jìn)一步,所述各葉節(jié)點(diǎn)包圍盒的碰撞測(cè)試均為相互獨(dú)立,無(wú)直接相關(guān)聯(lián),存儲(chǔ)在數(shù) 據(jù)鏈表中,各處理器并行進(jìn)行訪問(wèn)。
[0014] 進(jìn)一步,所述步驟(5)中根據(jù)物體運(yùn)動(dòng)的連續(xù)性,下次檢測(cè)鏈表中的各節(jié)點(diǎn),由各 節(jié)點(diǎn)碰撞狀態(tài)變化確定檢測(cè)范圍;可避免后續(xù)的冗余檢測(cè)。
[0015] 與現(xiàn)有技術(shù)相比,本發(fā)明采用數(shù)據(jù)分塊和并行處理相結(jié)合的方式,通過(guò)數(shù)據(jù)分塊, 可以有效減少每個(gè)處理器處理的任務(wù)數(shù),避免數(shù)據(jù)分配不均勻造成的延誤。流水線處理為 一種典型的并行處理方法,將問(wèn)題分為若干個(gè)解決步驟,各步驟由獨(dú)立的處理器執(zhí)行,通過(guò) 加速各處理器從而提高整條流水線速度。
【附圖說(shuō)明】
[0016] 圖1是本發(fā)明的流程圖;
[0017] 圖2是本發(fā)明中包圍盒樹的示意圖。
【具體實(shí)施方式】
[0018] 下面將對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
[0019] 如圖1和圖2所示,本發(fā)明包括以下步驟:
[0020] (1)以虛擬物體幾何全集的包圍盒作為根節(jié)點(diǎn),根據(jù)與分裂平面的位置將所有元 素分為數(shù)量相當(dāng)?shù)膬刹糠?,分別建立包圍盒;其中,以包圍盒在此方向上最長(zhǎng)軸為方向軸選 擇分裂平面;
[0021] (2)以上述這兩部分為根節(jié)點(diǎn)自頂向下進(jìn)行遞歸分治,葉節(jié)點(diǎn)的個(gè)數(shù)滿足條件2m <M,m為包圍盒層數(shù),Μ為處理器數(shù);
[0022] (3)采用數(shù)據(jù)分塊技術(shù)分割包圍盒樹,以每個(gè)葉節(jié)點(diǎn)的包圍盒為一個(gè)數(shù)據(jù)塊組成 數(shù)據(jù)庫(kù),各層的每個(gè)數(shù)據(jù)塊由計(jì)算機(jī)對(duì)應(yīng)的一個(gè)處理器負(fù)責(zé),將各物體的碰撞問(wèn)題細(xì)分為 數(shù)據(jù)塊中幾何元素的碰撞檢測(cè)(碰撞檢測(cè)即為檢測(cè)各包圍盒是否有交集);
[0023] (4)檢測(cè)環(huán)境中兩虛擬物體幾何全集的包圍盒,若發(fā)生碰撞,對(duì)物體的邊界進(jìn)行預(yù) 處理,以各自葉節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn);
[0024] (5)取兩物體的當(dāng)前結(jié)點(diǎn)的包圍盒逐一配對(duì)進(jìn)行碰撞測(cè)試,若不發(fā)生碰撞,則停止 遍歷,若發(fā)生碰撞,則將當(dāng)前節(jié)點(diǎn)存入鏈表中,鏈表中各數(shù)據(jù)相互獨(dú)立,由各處理器并行進(jìn) 行訪問(wèn)調(diào)用,并作為下次碰撞檢測(cè)的初選范圍;
[0025] (6)以當(dāng)前節(jié)點(diǎn)的上層根節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),遞歸執(zhí)行步驟(5)。
[0026]進(jìn)一步,所述包圍盒為軸對(duì)齊包圍盒ΑΑΒΒ或者方向包圍盒0ΒΒ或者k-dop包圍盒。
[0027] 進(jìn)一步,所述各葉節(jié)點(diǎn)包圍盒的碰撞測(cè)試均為相互獨(dú)立,無(wú)直接相關(guān)聯(lián),存儲(chǔ)在數(shù) 據(jù)鏈表中,各處理器并行進(jìn)行訪問(wèn)。
[0028] 進(jìn)一步,所述步驟(5)中根據(jù)物體運(yùn)動(dòng)的連續(xù)性,下次檢測(cè)鏈表中的各節(jié)點(diǎn),由各 節(jié)點(diǎn)碰撞狀態(tài)變化確定檢測(cè)范圍。
[0029] 整個(gè)檢測(cè)過(guò)程中,需要多次執(zhí)行操作各數(shù)據(jù)塊,各節(jié)點(diǎn)包圍盒的碰撞測(cè)試是相互 獨(dú)立、算法相同的,沒(méi)有直接相關(guān)聯(lián),應(yīng)用流水線技術(shù)動(dòng)態(tài)劃分總?cè)蝿?wù)進(jìn)程,避免數(shù)據(jù)分配 不均勻造成的延誤,操作同步執(zhí)行,不需要對(duì)任務(wù)加鎖,加速檢測(cè)速度。算法如下:
【主權(quán)項(xiàng)】
1. 一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法,其特征在于,包括以下步驟: (1) 以虛擬物體幾何全集的包圍盒作為根節(jié)點(diǎn),根據(jù)與分裂平面的位置將所有元素分 為數(shù)量相當(dāng)?shù)膬刹糠?,分別建立包圍盒; (2) 以上述這兩部分為根節(jié)點(diǎn)自頂向下進(jìn)行遞歸分治,葉節(jié)點(diǎn)的個(gè)數(shù)滿足條件2m<M,m 為包圍盒層數(shù),Μ為處理器數(shù); (3) 采用數(shù)據(jù)分塊技術(shù)分割包圍盒樹,以每個(gè)葉節(jié)點(diǎn)的包圍盒為一個(gè)數(shù)據(jù)塊組成數(shù)據(jù) 庫(kù),各層的每個(gè)數(shù)據(jù)塊由計(jì)算機(jī)對(duì)應(yīng)的一個(gè)處理器負(fù)責(zé),將各物體的碰撞問(wèn)題細(xì)分為數(shù)據(jù) 塊中幾何元素的碰撞檢測(cè); (4) 檢測(cè)環(huán)境中兩虛擬物體幾何全集的包圍盒,若發(fā)生碰撞,對(duì)物體的邊界進(jìn)行預(yù)處 理,以各自葉節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn); (5) 取兩物體的當(dāng)前結(jié)點(diǎn)的包圍盒逐一配對(duì)進(jìn)行碰撞測(cè)試,若不發(fā)生碰撞,則停止遍 歷,若發(fā)生碰撞,則將當(dāng)前節(jié)點(diǎn)存入鏈表中,鏈表中各數(shù)據(jù)相互獨(dú)立,由各處理器并行進(jìn)行 訪問(wèn)調(diào)用,并作為下次碰撞檢測(cè)的初選范圍; (6) 以當(dāng)前節(jié)點(diǎn)的上層根節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),遞歸執(zhí)行步驟(5)。2. 根據(jù)權(quán)利要求1所述的一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法,其特征在于, 所述包圍盒為軸對(duì)齊包圍盒ΑΑΒΒ或者方向包圍盒ΟΒΒ或者k-dop包圍盒。3. 根據(jù)權(quán)利要求1所述的一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法,其特征在于, 所述各葉節(jié)點(diǎn)包圍盒的碰撞測(cè)試均為相互獨(dú)立,無(wú)直接相關(guān)聯(lián),存儲(chǔ)在數(shù)據(jù)鏈表中,各處理 器并行進(jìn)行訪問(wèn)。4. 根據(jù)權(quán)利要求1所述的一種基于數(shù)據(jù)分塊及并行處理的碰撞檢測(cè)方法,其特征在于, 所述步驟(5)中根據(jù)物體運(yùn)動(dòng)的連續(xù)性,下次檢測(cè)鏈表中的各節(jié)點(diǎn),由各節(jié)點(diǎn)碰撞狀態(tài)變化 確定檢測(cè)范圍。
【文檔編號(hào)】G06F17/50GK106096082SQ201610368306
【公開日】2016年11月9日
【申請(qǐng)日】2016年5月24日
【發(fā)明人】許啟金, 于啟萬(wàn), 別長(zhǎng)報(bào), 吳翔, 葉輝, 鄭浩, 吳偉, 廖志斌
【申請(qǐng)人】國(guó)網(wǎng)安徽省電力公司宿州供電公司, 國(guó)家電網(wǎng)公司