欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法與流程

文檔序號(hào):11953670閱讀:680來源:國(guó)知局
基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法與流程

本發(fā)明屬于三維場(chǎng)景中模型檢索領(lǐng)域,特別是基于二維鄰域檢索的三維場(chǎng)景海量模型實(shí)時(shí)調(diào)度方法。



背景技術(shù):

在高逼真度的大規(guī)模三維場(chǎng)景仿真系統(tǒng)中,通常需要?jiǎng)討B(tài)調(diào)度和顯示高精度的地物模型,這些地物模型具有網(wǎng)格精細(xì),紋理分辨率高,且數(shù)量巨大的特點(diǎn),在場(chǎng)景中一次性加載這些模型,往往會(huì)造成內(nèi)存溢出的問題,所以需要根據(jù)可視范圍的變化在模型數(shù)據(jù)庫中高效地檢索調(diào)度模型,以保證三維場(chǎng)景中模型實(shí)時(shí)繪制的流暢性。

目前大規(guī)模三維場(chǎng)景中海量地物模型組織調(diào)度常采用的方法包括基于R樹(Real Trees)的空間索引和基于傳統(tǒng)四叉樹的空間檢索兩大類?;赗樹的空間索引方法對(duì)三維場(chǎng)景中的每個(gè)模型依次建立包圍盒,即最小外接長(zhǎng)方體,再將距離相近的模型當(dāng)作一個(gè)整體建立包圍盒,以此類推,逐漸擴(kuò)大包圍盒范圍,直至包圍盒范圍等于整個(gè)三維場(chǎng)景空間,在進(jìn)行檢索時(shí),需要將包圍盒范圍與場(chǎng)景當(dāng)前視錐體范圍比較,而三維空間的范圍比較十分復(fù)雜,計(jì)算量很大,使得檢索效率不佳?;趥鹘y(tǒng)四叉樹的檢索方法首先對(duì)每個(gè)模型投影形狀建立最小外接矩形,對(duì)這些矩形構(gòu)建四叉樹,建立檢索,為提高調(diào)用速度,在模型調(diào)度時(shí)構(gòu)建緩存區(qū),取一個(gè)比可視范圍大的矩形范圍,通過遍歷比較,將在該矩形范圍內(nèi)的節(jié)點(diǎn)存入緩存區(qū),若可視范圍改變,就從緩存區(qū)中遍歷獲取數(shù)據(jù)。該方法將三維空間的范圍比較簡(jiǎn)化為二維空間的范圍比較,并采用了緩存機(jī)制,在一定程度上提高了檢索效率,但在每次更新緩存區(qū)時(shí),需要對(duì)整個(gè)四叉樹全部遍歷,緩存區(qū)更新的速度影響了整體的檢索速度。若需要對(duì)場(chǎng)景中任一模型在某個(gè)方位上相鄰模型進(jìn)行檢索,由于傳統(tǒng)的四叉樹模型在構(gòu)建時(shí)只注重了父子節(jié)點(diǎn)的關(guān)系,所以需要先遍歷到與當(dāng)前節(jié)點(diǎn)在同一層次的相鄰節(jié)點(diǎn),再依次向下遍歷,才能得到檢索節(jié)點(diǎn),這對(duì)檢索速度造成了影響。



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

本發(fā)明的目的是提供一種基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法,以解決基于傳統(tǒng)四叉樹模型進(jìn)行模型檢索調(diào)度時(shí)效率低下的問題。

本發(fā)明的目的是這樣實(shí)現(xiàn)的,基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法,其特征在于,至少包括如下步驟:

步驟1,獲取該三維場(chǎng)景范圍,若不是正方形,則取該范圍的最小外接正方形,創(chuàng)建大小與該正方形范圍相等的空白二維矢量點(diǎn)圖層;

步驟2,從該三維場(chǎng)景的模型數(shù)據(jù)庫中遍歷場(chǎng)景中每個(gè)模型,獲取每個(gè)模型中心投影的經(jīng)緯度,根據(jù)獲取的經(jīng)緯度在步驟1創(chuàng)建的圖層上添加對(duì)應(yīng)的點(diǎn),所有模型添加完成后,得到該場(chǎng)景的模型點(diǎn)圖層;

步驟3,對(duì)模型點(diǎn)圖層建立主鄰居四叉樹;

步驟4,對(duì)構(gòu)建好的主鄰居四叉樹進(jìn)行先序遍歷,創(chuàng)建緩存區(qū),將當(dāng)前場(chǎng)景可視范圍內(nèi)應(yīng)顯示的節(jié)點(diǎn)模型存入緩存區(qū),并在場(chǎng)景中加載這些節(jié)點(diǎn),繪制當(dāng)前場(chǎng)景可視范圍內(nèi)的模型;

步驟5,更新緩存區(qū),漫游時(shí)根據(jù)場(chǎng)景可視范圍的實(shí)時(shí)變化方向,獲取在這些方向上場(chǎng)景可視范圍內(nèi)的邊緣節(jié)點(diǎn),使用基于主鄰居四叉樹的二維鄰域檢索方法對(duì)這些邊緣節(jié)點(diǎn)在這些方向上的相鄰節(jié)點(diǎn)進(jìn)行檢索,根據(jù)場(chǎng)景可視范圍在各個(gè)方向上的變化速度,確定需要檢索節(jié)點(diǎn)的范圍大小,將檢索到的節(jié)點(diǎn)存入緩存區(qū)域,更新緩存區(qū)域,直接對(duì)緩存區(qū)內(nèi)的節(jié)點(diǎn)進(jìn)行遍歷,確定需要加載和卸載的節(jié)點(diǎn);

步驟6,根據(jù)查詢條件進(jìn)行快速查詢;如果要對(duì)場(chǎng)景中任一模型的某一方向上的模型進(jìn)行更新,則需要先檢索到該模型所在節(jié)點(diǎn);給定某一模型,選擇查詢方向,以及在方向上的具體位序,即可快速檢索到相應(yīng)節(jié)點(diǎn),再根據(jù)查詢到的位置在數(shù)據(jù)庫中檢索對(duì)應(yīng)模型,進(jìn)行更新。

所述步驟3,包括如下步驟:

步驟31,定義主鄰居四叉樹節(jié)點(diǎn)模型,在構(gòu)建主鄰居四叉樹時(shí),每個(gè)節(jié)點(diǎn)中應(yīng)至少包括以下信息:

(1)位置編碼;

(2)節(jié)點(diǎn)尺寸;

(3)節(jié)點(diǎn)類型:三種類型,分別是:WHITE,BLACK,GRAY,其中,WHITE代表該區(qū)域沒有模型,BLACK代表該區(qū)域有且只有1個(gè)模型,GRAY代表該區(qū)域有且大于1個(gè)模型,這里的一個(gè)模型并非指的是單個(gè)物體的模型,可以代指某一小片區(qū)域的整體建模;

(4)父節(jié)點(diǎn);

(5)孩子節(jié)點(diǎn);

(6)當(dāng)前節(jié)點(diǎn)在四個(gè)方向上的主鄰居;

(7)當(dāng)前節(jié)點(diǎn)的經(jīng)緯度范圍;

步驟32,取圖層A1作為根節(jié)點(diǎn);

步驟33,判斷要?jiǎng)澐值墓?jié)點(diǎn)類型是否為GRAY,若是,則執(zhí)行步驟34,若否,則執(zhí)行步驟38;

步驟34,對(duì)節(jié)點(diǎn)進(jìn)行劃分,得到四個(gè)子節(jié)點(diǎn);

步驟35,更新新的子節(jié)點(diǎn)主鄰居,每個(gè)子節(jié)點(diǎn)首先繼承其父節(jié)點(diǎn)的外部鄰居,接著更新其內(nèi)部鄰居。

步驟36,相應(yīng)更新所有原有節(jié)點(diǎn)的主鄰居,在對(duì)一個(gè)節(jié)點(diǎn)進(jìn)行分解后,需要將該變化通知該節(jié)點(diǎn)四個(gè)方向上所有的鄰居,這樣它們才可以相應(yīng)地更新其主鄰居;

步驟37,判斷當(dāng)前所有的節(jié)點(diǎn)中是否已經(jīng)不存在GRAY類型節(jié)點(diǎn),若是,完成構(gòu)建;若否,執(zhí)行步驟38;

步驟38,按“Z”字形順序取下一個(gè)節(jié)點(diǎn)。

所述步驟4,包括如下步驟:

步驟41,獲取場(chǎng)景的可視范圍,即經(jīng)緯度范圍;

步驟42,對(duì)步驟3創(chuàng)建的主鄰居四叉樹進(jìn)行先序遍歷;

步驟43,獲取當(dāng)前遍歷節(jié)點(diǎn)的區(qū)域范圍;

步驟44,獲取當(dāng)前三維場(chǎng)景的可視范圍;

步驟45,判斷當(dāng)前遍歷節(jié)點(diǎn)的范圍是否完全不在當(dāng)前場(chǎng)景可視范圍內(nèi),若是,轉(zhuǎn)步驟49,若否,轉(zhuǎn)步驟46;

步驟46,判斷當(dāng)前遍歷節(jié)點(diǎn)的范圍是否完全在當(dāng)前場(chǎng)景的可視范圍內(nèi),若是,轉(zhuǎn)步驟48,若否,轉(zhuǎn)步驟47;

步驟47,判斷當(dāng)前節(jié)點(diǎn)是否已達(dá)到主鄰居四叉樹的最大深度,若是,轉(zhuǎn)步驟48,若否,轉(zhuǎn)步驟42;

步驟48,在場(chǎng)景中加載該節(jié)點(diǎn)范圍內(nèi)的模型,轉(zhuǎn)步驟410;

步驟49,創(chuàng)建緩存區(qū),將該節(jié)點(diǎn)加入緩存區(qū);

步驟410,判斷是否已遍歷完主鄰居四叉樹所有節(jié)點(diǎn),若是,則結(jié)束遍歷,若否,則轉(zhuǎn)步驟42。

所述步驟5,包括如下步驟:

步驟51,獲取當(dāng)前的場(chǎng)景可視范圍變化方向;

步驟52,獲取場(chǎng)景可視范圍內(nèi)在可視范圍變化方向上的邊緣節(jié)點(diǎn);

步驟53,根據(jù)可視范圍變化方向,使用主鄰居檢索方法對(duì)邊緣節(jié)點(diǎn)遍歷,對(duì)其在可視范圍變化方向上的相鄰節(jié)點(diǎn)進(jìn)行檢索,檢索的節(jié)點(diǎn)范圍由可視范圍在其變化方向上的變化速度確定;

步驟54,將步驟53中檢索到的子塊存入緩存區(qū)域;

步驟55,對(duì)緩存區(qū)內(nèi)的子節(jié)點(diǎn)進(jìn)行遍歷;

步驟56,獲取當(dāng)前遍歷節(jié)點(diǎn)的范圍;

步驟57,獲取當(dāng)前三維場(chǎng)景的可視范圍;

步驟58,判斷當(dāng)前遍歷節(jié)點(diǎn)的范圍是否完全不在當(dāng)前場(chǎng)景可視范圍內(nèi),若是,轉(zhuǎn)步驟55,若否,轉(zhuǎn)步驟59;

步驟59,在場(chǎng)景中加載該節(jié)點(diǎn)范圍內(nèi)的模型;

步驟510,判斷緩存區(qū)遍歷是否結(jié)束,若是,轉(zhuǎn)步驟511,若否,轉(zhuǎn)步驟55;

步驟511,判斷視場(chǎng)是否有改變,若是,轉(zhuǎn)步驟51,若否,結(jié)束。

在創(chuàng)建和更新緩存區(qū)時(shí),應(yīng)設(shè)定幾個(gè)閾值,通過判斷場(chǎng)景可視范圍內(nèi)應(yīng)顯示的節(jié)點(diǎn)個(gè)數(shù)所屬的范圍,或根據(jù)視點(diǎn)距離場(chǎng)景中模型的距離,決定從模型數(shù)據(jù)庫中調(diào)用模型的精細(xì)程度,屬于三維場(chǎng)景模型調(diào)度中層次化細(xì)節(jié)相關(guān)技術(shù),不進(jìn)行詳細(xì)描述。

本發(fā)明提出的基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法將三維場(chǎng)景中的模型用點(diǎn)來表示,得到對(duì)應(yīng)的二維模型點(diǎn)圖層,通過對(duì)該圖層構(gòu)建主鄰居四叉樹,結(jié)合二維鄰域檢索算法,實(shí)現(xiàn)快速對(duì)相鄰節(jié)點(diǎn)的索引,大大降低了緩存創(chuàng)建時(shí)間,從而提高三維場(chǎng)景中模型的檢索速度,保證了三維場(chǎng)景漫游的流暢性。

本發(fā)明的優(yōu)點(diǎn)在于首先根據(jù)三維場(chǎng)景的經(jīng)緯度范圍創(chuàng)建一個(gè)空白的二維矢量點(diǎn)圖層,將場(chǎng)景中的每個(gè)模型用一個(gè)二維點(diǎn)來表示,點(diǎn)的坐標(biāo)是模型中心點(diǎn)投影的經(jīng)緯度坐標(biāo),將三維場(chǎng)景中所有模型對(duì)應(yīng)的點(diǎn)一一繪制在該矢量點(diǎn)圖層上,得到二維模型圖層,再對(duì)該模型圖層創(chuàng)建主鄰居四叉樹,在漫游時(shí),使用基于主鄰居四叉樹的二維鄰域檢索算法可以快速更新緩存區(qū)的數(shù)據(jù),并且可以實(shí)現(xiàn)對(duì)場(chǎng)景中模型快速檢索。

附圖說明

下面結(jié)合實(shí)施例附圖對(duì)本發(fā)明作進(jìn)一步說明:

圖1本發(fā)明實(shí)施例流程圖;

圖2本發(fā)明實(shí)施例主鄰居四叉樹編碼方式說明圖;

圖3主鄰居四叉樹節(jié)點(diǎn)的四個(gè)主鄰居說明圖;

圖4(A)新子節(jié)點(diǎn)NW的主鄰居更新說明圖;

圖4(B)確定孩子節(jié)點(diǎn)[21]在N方向上的主鄰居說明圖;

圖5構(gòu)建主鄰居四叉樹流程圖;

圖6采用主鄰居四叉樹先序遍歷確定顯示節(jié)點(diǎn)流程圖;

圖7緩存區(qū)構(gòu)建遍歷更新流程圖;

圖8(A)三維場(chǎng)景模型圖層建立的主鄰居四叉樹示意圖;

圖8(B)三維場(chǎng)景可視范圍顯示示意圖。

具體實(shí)施方式

實(shí)施例1

基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法,其特征在于,至少包括如下步驟:

步驟1,獲取該三維場(chǎng)景范圍,若不是正方形,則取該范圍的最小外接正方形,創(chuàng)建大小與該正方形范圍相等的空白二維矢量點(diǎn)圖層;

步驟2,從該三維場(chǎng)景的模型數(shù)據(jù)庫中遍歷場(chǎng)景中每個(gè)模型,獲取每個(gè)模型中心投影的經(jīng)緯度,根據(jù)獲取的經(jīng)緯度在步驟1創(chuàng)建的圖層上添加對(duì)應(yīng)的點(diǎn),所有模型添加完成后,得到該場(chǎng)景的模型點(diǎn)圖層;

步驟3,對(duì)模型點(diǎn)圖層建立主鄰居四叉樹;

步驟4,對(duì)構(gòu)建好的主鄰居四叉樹進(jìn)行先序遍歷,創(chuàng)建緩存區(qū),將當(dāng)前場(chǎng)景可視范圍內(nèi)應(yīng)顯示的節(jié)點(diǎn)模型存入緩存區(qū),并在場(chǎng)景中加載這些節(jié)點(diǎn),繪制當(dāng)前場(chǎng)景可視范圍內(nèi)的模型;

步驟5,更新緩存區(qū),漫游時(shí)根據(jù)場(chǎng)景可視范圍的實(shí)時(shí)變化方向,獲取在這些方向上場(chǎng)景可視范圍內(nèi)的邊緣節(jié)點(diǎn),使用基于主鄰居四叉樹的二維鄰域檢索方法對(duì)這些邊緣節(jié)點(diǎn)在這些方向上的相鄰節(jié)點(diǎn)進(jìn)行檢索,根據(jù)場(chǎng)景可視范圍在各個(gè)方向上的變化速度,確定需要檢索節(jié)點(diǎn)的范圍大小,將檢索到的節(jié)點(diǎn)存入緩存區(qū)域,更新緩存區(qū)域,直接對(duì)緩存區(qū)內(nèi)的節(jié)點(diǎn)進(jìn)行遍歷,確定需要加載和卸載的節(jié)點(diǎn);

步驟6,根據(jù)查詢條件進(jìn)行快速查詢;如果要對(duì)場(chǎng)景中任一模型的某一方向上的模型進(jìn)行更新,則需要先檢索到該模型所在節(jié)點(diǎn);給定某一模型,選擇查詢方向,以及在方向上的具體位序,即可快速檢索到相應(yīng)節(jié)點(diǎn),再根據(jù)查詢到的位置在數(shù)據(jù)庫中檢索對(duì)應(yīng)模型,進(jìn)行更新。

實(shí)施例2

如圖1所示,基于二維鄰域檢索的三維場(chǎng)景中海量模型實(shí)時(shí)調(diào)度方法包括如下步驟:

步驟1,獲取該三維場(chǎng)景范圍,若不是正方形,則取該范圍的最小外接正方形,邊長(zhǎng)為d(單位:按經(jīng)緯度單位度),創(chuàng)建一個(gè)邊長(zhǎng)為d的空白二維矢量點(diǎn)圖層A0;

步驟2,從該三維場(chǎng)景的模型數(shù)據(jù)庫中遍歷場(chǎng)景中每個(gè)模型,獲取每個(gè)模型中心投影的經(jīng)緯度,根據(jù)獲取的經(jīng)緯度在圖層A0上添加對(duì)應(yīng)的點(diǎn),所有模型添加完成后,得到該場(chǎng)景的模型點(diǎn)圖層A1;

步驟3,對(duì)圖層A1建立主鄰居四叉樹;

步驟4,對(duì)構(gòu)建好的主鄰居四叉樹進(jìn)行先序遍歷,創(chuàng)建緩存區(qū),將當(dāng)前場(chǎng)景可視范圍內(nèi)應(yīng)顯示的節(jié)點(diǎn)模型存入緩存區(qū),并在場(chǎng)景中加載這些節(jié)點(diǎn),繪制當(dāng)前場(chǎng)景可視范圍內(nèi)的模型;

步驟5,更新緩存區(qū),漫游時(shí)根據(jù)場(chǎng)景可視范圍的實(shí)時(shí)變化方向,獲取在這些方向上場(chǎng)景可視范圍內(nèi)的邊緣節(jié)點(diǎn),使用基于主鄰居四叉樹的二維鄰域檢索方法對(duì)這些邊緣節(jié)點(diǎn)在這些方向上的相鄰節(jié)點(diǎn)進(jìn)行檢索,根據(jù)場(chǎng)景可視范圍在各個(gè)方向上的變化速度確定需要檢索節(jié)點(diǎn)的范圍大小,將檢索到的節(jié)點(diǎn)存入緩存區(qū)域,隨著可視區(qū)域的變化,不斷更新緩存區(qū)域,直接對(duì)緩存區(qū)內(nèi)的節(jié)點(diǎn)進(jìn)行遍歷,確定需要加載和卸載的節(jié)點(diǎn);

步驟6,根據(jù)查詢條件進(jìn)行快速查詢。如果要對(duì)某一模型的某一方向上的模型進(jìn)行更新,則需要先檢索到該模型所在節(jié)點(diǎn)。給定某一模型,選擇查詢方向,以及在方向上的具體位序,即可快速檢索到相應(yīng)模型,再根據(jù)查詢到的位置在數(shù)據(jù)庫中找到對(duì)應(yīng)模型,進(jìn)行更新。

如圖5所示,步驟3包括如下步驟:

步驟31,定義主鄰居四叉樹節(jié)點(diǎn)模型,在構(gòu)建主鄰居四叉樹時(shí),每個(gè)節(jié)點(diǎn)應(yīng)至少包括以下信息:

(1)位置編碼:用一串四進(jìn)制數(shù)表示,根節(jié)點(diǎn)不進(jìn)行編碼,如圖2所示,將根節(jié)點(diǎn)分為四等分,則四個(gè)節(jié)點(diǎn)的編碼按“Z”字形順序依次為0,1,2,3,四個(gè)節(jié)點(diǎn)可以依次表示為[0],[1],[2],[3];繼續(xù)對(duì)子節(jié)點(diǎn)進(jìn)行四等分,子節(jié)點(diǎn)的四個(gè)子節(jié)點(diǎn)仍然按“Z”字形順序編號(hào)為0,1,2,3,但其編碼應(yīng)為父節(jié)點(diǎn)編碼加上該節(jié)點(diǎn)在兄弟節(jié)點(diǎn)中的編號(hào),如圖2中對(duì)[0]劃分后,[0]的四個(gè)子節(jié)點(diǎn)編碼分別00,01,02,03,[0]的四個(gè)子節(jié)點(diǎn)分別表示為[00],[01],[02],[03],依次類推,所有的節(jié)點(diǎn)可以表示為[節(jié)點(diǎn)編碼];

(2)節(jié)點(diǎn)尺寸:代表區(qū)域的邊長(zhǎng)(度);

(3)節(jié)點(diǎn)類型:三種類型,分別是:WHITE,BLACK,GRAY(WHITE代表該區(qū)域沒有模型,BLACK代表該區(qū)域有且只有1個(gè)模型,GRAY代表該區(qū)域有且大于1個(gè)模型,這里的一個(gè)模型并非指的是單個(gè)物體的模型,可以代指某一小片區(qū)域的整體建模);

(4)父節(jié)點(diǎn):當(dāng)前節(jié)點(diǎn)的直接父節(jié)點(diǎn);

(5)孩子節(jié)點(diǎn):當(dāng)前節(jié)點(diǎn)的四個(gè)孩子節(jié)點(diǎn);

(6)當(dāng)前節(jié)點(diǎn)在四個(gè)方向上的主鄰居:如圖3所示,在創(chuàng)建主鄰居四叉樹時(shí),為每個(gè)節(jié)點(diǎn)定義西,北,東,南四個(gè)方向的主鄰居指針,分別用符號(hào)CN0,CN1,CN2,CN3表示,這四個(gè)指針分別指向節(jié)點(diǎn)西,北,東,南四個(gè)方向上的主鄰居,主鄰居是指:若節(jié)點(diǎn)在某個(gè)方向上只有一個(gè)相鄰節(jié)點(diǎn),則該相鄰節(jié)點(diǎn)即為該節(jié)點(diǎn)在該方向上的主鄰居;若節(jié)點(diǎn)在某個(gè)方向上相鄰節(jié)點(diǎn)大于一個(gè),則該節(jié)點(diǎn)的主鄰居指節(jié)點(diǎn)在某方向上的第一個(gè)相鄰節(jié)點(diǎn)。第一個(gè)相鄰節(jié)點(diǎn)規(guī)定如下:節(jié)點(diǎn)在西邊的主鄰居是節(jié)點(diǎn)在西邊的相鄰塊中最北邊的節(jié)點(diǎn);節(jié)點(diǎn)在北邊的主鄰居是節(jié)點(diǎn)在北邊的相鄰節(jié)點(diǎn)中最西邊的節(jié)點(diǎn);節(jié)點(diǎn)在東邊的主鄰居是節(jié)點(diǎn)在東邊相鄰節(jié)點(diǎn)中最南邊的節(jié)點(diǎn);節(jié)點(diǎn)在南邊的主鄰居是節(jié)點(diǎn)在南邊的相鄰節(jié)點(diǎn)中最東邊的節(jié)點(diǎn);

(7)當(dāng)前節(jié)點(diǎn)的范圍:經(jīng)度最小值(該節(jié)點(diǎn)區(qū)域的經(jīng)度最小值),經(jīng)度最大值(該節(jié)點(diǎn)區(qū)域的經(jīng)度最大值),緯度最小值(該節(jié)點(diǎn)區(qū)域的緯度最小值),緯度最大值(該節(jié)點(diǎn)區(qū)域的緯度最大值);

步驟32,取圖層A1作為根節(jié)點(diǎn);

步驟33,判斷要?jiǎng)澐值墓?jié)點(diǎn)類型是否為GRAY,若是,則轉(zhuǎn)步驟34,若否,則轉(zhuǎn)步驟38;

步驟34,對(duì)節(jié)點(diǎn)進(jìn)行劃分,得到四個(gè)子節(jié)點(diǎn);

步驟35,更新新的子節(jié)點(diǎn)主鄰居,每個(gè)子節(jié)點(diǎn)首先繼承其父節(jié)點(diǎn)的外部鄰居,接著更新其內(nèi)部鄰居。舉例來說,如圖4(A)所示,對(duì)于節(jié)點(diǎn)NW的更新為:CN0=父節(jié)點(diǎn)的CN0,CN1=父節(jié)點(diǎn)的CN1,CN2=節(jié)點(diǎn)NE,CN3=節(jié)點(diǎn)SW。具體更新方法為(下文中將西,北,東,南分別用W,N,E,S來表示):

(1)有些孩子節(jié)點(diǎn)可以繼承其父節(jié)點(diǎn)的主鄰居,如圖4(A)所示,父節(jié)點(diǎn)W方向和N方向上的主鄰居對(duì)于NW節(jié)點(diǎn)依然有效,同理父節(jié)點(diǎn)E方向和S方向的對(duì)SW節(jié)點(diǎn)依然有效;

(2)有些孩子節(jié)點(diǎn)需要?jiǎng)t需要進(jìn)行更新來反映有效的主鄰居,如節(jié)點(diǎn)NE和節(jié)點(diǎn)SW,對(duì)于節(jié)點(diǎn)NE和節(jié)點(diǎn)SW又分為兩種情況:父節(jié)點(diǎn)的主鄰居尺寸比父節(jié)點(diǎn)的尺寸大或者相等;父節(jié)點(diǎn)的主鄰居尺寸比父節(jié)點(diǎn)的尺寸小。在第一種情況下,不需要進(jìn)行更新,孩子節(jié)點(diǎn)的主鄰居可以直接繼承父節(jié)點(diǎn)的主鄰居,而在第二種情況下,孩子節(jié)點(diǎn)的主鄰居需要被更新。如圖4(B),表示了[21]是如何確定其在N方向上的主鄰居,[21]首先繼承其父節(jié)點(diǎn)在N方向上的主鄰居[022],但是正確的主鄰居是[03]。所以[21]的CN1需要被更新。通過從W到E方向?qū)21]在N方向上的鄰居進(jìn)行水平遍歷,直到第一次到達(dá)一個(gè)[21]的直接鄰居,即[03]。其中在從W方向到E方向的遍歷步驟中,終止檢索的標(biāo)準(zhǔn)是:當(dāng)所有遍歷過的鄰居節(jié)點(diǎn)的尺寸之和比該節(jié)點(diǎn)的尺寸大,停止遍歷。其它類似情況下處理方法相同。

步驟36,相應(yīng)更新所有原有節(jié)點(diǎn)的主鄰居,在對(duì)一個(gè)節(jié)點(diǎn)進(jìn)行分解后,需要將該變化通知該節(jié)點(diǎn)四個(gè)方向上所有的鄰居,這樣它們才可以相應(yīng)地更新其主鄰居。

步驟37,判斷當(dāng)前所有的節(jié)點(diǎn)中是否已經(jīng)不存在GRAY類型節(jié)點(diǎn),若是,完成構(gòu)建;若否,執(zhí)行步驟38;

步驟38,按“Z”字形順序取下一個(gè)節(jié)點(diǎn)。

如圖6所示,所述步驟4,包括如下步驟:

步驟41,獲取場(chǎng)景的可視范圍,即經(jīng)緯度范圍;

步驟42,對(duì)步驟3創(chuàng)建的主鄰居四叉樹進(jìn)行先序遍歷;

步驟43,獲取當(dāng)前遍歷節(jié)點(diǎn)的區(qū)域范圍;

步驟44,獲取當(dāng)前三維場(chǎng)景的可視范圍;

步驟45,判斷當(dāng)前遍歷節(jié)點(diǎn)的范圍是否完全不在當(dāng)前場(chǎng)景可視范圍內(nèi),若是,轉(zhuǎn)步驟49,若否,轉(zhuǎn)步驟46;

步驟46,判斷當(dāng)前遍歷節(jié)點(diǎn)的范圍是否完全在當(dāng)前場(chǎng)景的可視范圍內(nèi),若是,轉(zhuǎn)步驟48,若否,轉(zhuǎn)步驟47;

步驟47,判斷當(dāng)前節(jié)點(diǎn)是否已達(dá)到主鄰居四叉樹的最大深度,若是,轉(zhuǎn)步驟48,若否,轉(zhuǎn)步驟42;

步驟48,在場(chǎng)景中加載該節(jié)點(diǎn)范圍內(nèi)的模型,轉(zhuǎn)步驟410;

步驟49,創(chuàng)建緩存區(qū),將該節(jié)點(diǎn)加入緩存區(qū);

步驟410,判斷是否已遍歷完主鄰居四叉樹所有節(jié)點(diǎn),若是,則結(jié)束遍歷,若否,則轉(zhuǎn)步驟42;

如圖7所示,所述步驟5,包括如下步驟:

步驟51,獲取當(dāng)前的場(chǎng)景可視范圍變化方向;

步驟52,獲取場(chǎng)景可視范圍內(nèi)在可視范圍變化方向上的邊緣節(jié)點(diǎn)B1,B2,B3,…,Bn

步驟53,根據(jù)可視范圍變化方向,使用主鄰居檢索方法對(duì)節(jié)點(diǎn)B1,B2,B3,…,Bn遍歷,對(duì)其在可視范圍變化方向上的相鄰節(jié)點(diǎn)進(jìn)行檢索,檢索的節(jié)點(diǎn)范圍由可視范圍在其變化方向上的變化速度確定,例如,檢索Bi,i∈{1,2,3,…,n}在N方向上的所有直接鄰居,為了查找Bi在N方向的鄰居,首先可以得到Bi的CN1,以CN1為起始點(diǎn),利用幾個(gè)函數(shù)進(jìn)行一個(gè)簡(jiǎn)單的遍歷就可以得到N方向上所有的鄰居。

Bi在N方向上任意一個(gè)鄰居(記為X)可以通過以下的主鄰居檢索算法檢索到:

令如果(Size(X)<Size(Bi)),當(dāng)則令

其中,Size(X)返回節(jié)點(diǎn)X的邊長(zhǎng),j為0,1,2,3時(shí),分別返回節(jié)點(diǎn)X的CN0,CN1,CN2,CN3;

如果節(jié)點(diǎn)在N方向上的鄰居尺寸等于或大于該節(jié)點(diǎn)的尺寸,則一步完成檢索,否則,則會(huì)從W方向開始按順序依次檢索。

在所有其他方向上,鄰域檢索也是相同的原則。對(duì)W方向上的主鄰居,應(yīng)從N方向至S方向逐次檢索;對(duì)E方向上的主鄰居,應(yīng)從S方向至N方向逐次檢索;對(duì)S方向上的主鄰居,應(yīng)從E方向至W方向逐次檢索,即可得到模型的某一方向上某一具體序位的子塊。

步驟54,將步驟53中檢索到的子塊存入緩存區(qū)域;

步驟55,對(duì)緩存區(qū)內(nèi)的子塊進(jìn)行遍歷;

步驟56,獲取當(dāng)前遍歷節(jié)點(diǎn)的范圍;

步驟57,獲取當(dāng)前三維場(chǎng)景的可視范圍;

步驟58,判斷當(dāng)前遍歷節(jié)點(diǎn)的范圍是否完全不在當(dāng)前場(chǎng)景可視范圍內(nèi),若是,轉(zhuǎn)步驟55,若否,轉(zhuǎn)步驟59;

步驟59,在場(chǎng)景中加載該節(jié)點(diǎn)范圍內(nèi)的模型;

步驟510,判斷緩存區(qū)遍歷是否結(jié)束,若是,轉(zhuǎn)步驟511,若否,轉(zhuǎn)步驟55;

步驟511,判斷視場(chǎng)是否有改變,若是,轉(zhuǎn)步驟51,若否,結(jié)束。如圖8(A)中所示為三維場(chǎng)景中模型圖層構(gòu)建的主鄰居四叉樹示意圖,其中點(diǎn)陰影部分801表示當(dāng)可視范圍的向東變化時(shí)的應(yīng)更新的緩存節(jié)點(diǎn),斜劃線陰影部分803表示當(dāng)前加載到場(chǎng)景中的節(jié)點(diǎn),矩形粗線框802表示當(dāng)前場(chǎng)景的可視范圍(矩形線框長(zhǎng)寬分別由經(jīng)度范圍和緯度范圍確定),點(diǎn)804代表模型圖層中的模型點(diǎn);圖8(B)中所示為對(duì)應(yīng)圖8(A)中矩形粗線框802中的三維場(chǎng)景,矩形粗線框802中的模型點(diǎn)分別對(duì)應(yīng)三維場(chǎng)景中的房子模型805,樹模型806,飛機(jī)模型807,點(diǎn)畫線808示意了三維場(chǎng)景中加載的各個(gè)節(jié)點(diǎn)范圍。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
武陟县| 怀安县| 宾川县| 秦皇岛市| 于田县| 那曲县| 互助| 凌海市| 屯昌县| 崇文区| 闸北区| 临沭县| 吉水县| 务川| 哈巴河县| 盘锦市| 利川市| 长治市| 桂阳县| 台中县| 如东县| 光山县| 武威市| 宁化县| 黄石市| 龙岩市| 饶阳县| 开阳县| 潼南县| 闽清县| 介休市| 黎平县| 凭祥市| 迁西县| 金溪县| 白沙| 大方县| 卫辉市| 双辽市| 阳泉市| 岳普湖县|