1.基于二維鄰域檢索的三維場景中海量模型實時調度方法,其特征在于,至少包括如下步驟:
步驟1,獲取該三維場景范圍,若不是正方形,則取該范圍的最小外接正方形,創(chuàng)建大小與該正方形范圍相等的空白二維矢量點圖層;
步驟2,從該三維場景的模型數(shù)據(jù)庫中遍歷場景中每個模型,獲取每個模型中心投影的經(jīng)緯度,根據(jù)獲取的經(jīng)緯度在步驟1創(chuàng)建的圖層上添加對應的點,所有模型添加完成后,得到該場景的模型點圖層;
步驟3,對模型點圖層建立主鄰居四叉樹;
步驟4,對構建好的主鄰居四叉樹進行先序遍歷,創(chuàng)建緩存區(qū),將當前場景可視范圍內(nèi)應顯示的節(jié)點模型存入緩存區(qū),并在場景中加載這些節(jié)點,繪制當前場景可視范圍內(nèi)的模型;
步驟5,更新緩存區(qū),漫游時根據(jù)場景可視范圍的實時變化方向,獲取在這些方向上場景可視范圍內(nèi)的邊緣節(jié)點,使用基于主鄰居四叉樹的二維鄰域檢索方法對這些邊緣節(jié)點在這些方向上的相鄰節(jié)點進行檢索,根據(jù)場景可視范圍在各個方向上的變化速度,確定需要檢索節(jié)點的范圍大小,將檢索到的節(jié)點存入緩存區(qū)域,更新緩存區(qū)域,直接對緩存區(qū)內(nèi)的節(jié)點進行遍歷,確定需要加載和卸載的節(jié)點;
步驟6,根據(jù)查詢條件進行快速查詢;如果要對場景中任一模型的某一方向上的模型進行更新,則需要先檢索到該模型所在節(jié)點;給定某一模型,選擇查詢方向,以及在方向上的具體位序,即可快速檢索到相應節(jié)點,再根據(jù)查詢到的位置在數(shù)據(jù)庫中檢索對應模型,進行更新。
2.根據(jù)權利要求1所述的基于二維鄰域檢索的三維場景中海量模型實時調度方法,其特征在于:所述步驟3,包括如下步驟:
步驟31,定義主鄰居四叉樹節(jié)點模型,在構建主鄰居四叉樹時,每個節(jié)點中應至少包括以下信息:
(1)位置編碼;
(2)節(jié)點尺寸;
(3)節(jié)點類型:三種類型,分別是:WHITE,BLACK,GRAY,其中,WHITE代表該區(qū)域沒有模型,BLACK代表該區(qū)域有且只有1個模型,GRAY代表該區(qū)域有且大于1個模型,這里的一個模型并非指的是單個物體的模型,可以代指某一小片區(qū)域的整體建模;
(4)父節(jié)點;
(5)孩子節(jié)點;
(6)當前節(jié)點在四個方向上的主鄰居;
(7)當前節(jié)點的經(jīng)緯度范圍;
步驟32,取圖層A1作為根節(jié)點;
步驟33,判斷要劃分的節(jié)點類型是否為GRAY,若是,則執(zhí)行步驟34,若否,則執(zhí)行步驟38;
步驟34,對節(jié)點進行劃分,得到四個子節(jié)點;
步驟35,更新新的子節(jié)點主鄰居,每個子節(jié)點首先繼承其父節(jié)點的外部鄰居,接著更新其內(nèi)部鄰居。
步驟36,相應更新所有原有節(jié)點的主鄰居,在對一個節(jié)點進行分解后,需要將該變化通知該節(jié)點四個方向上所有的鄰居,這樣它們才可以相應地更新其主鄰居;
步驟37,判斷當前所有的節(jié)點中是否已經(jīng)不存在GRAY類型節(jié)點,若是,完成構建;若否,執(zhí)行步驟38;
步驟38,按“Z”字形順序取下一個節(jié)點。
3.根據(jù)權利要求1所述的基于二維鄰域檢索的三維場景中海量模型實時調度方法,其特征在于:所述步驟4,包括如下步驟:
步驟41,獲取場景的可視范圍,即經(jīng)緯度范圍;
步驟42,對步驟3創(chuàng)建的主鄰居四叉樹進行先序遍歷;
步驟43,獲取當前遍歷節(jié)點的區(qū)域范圍;
步驟44,獲取當前三維場景的可視范圍;
步驟45,判斷當前遍歷節(jié)點的范圍是否完全不在當前場景可視范圍內(nèi),若是,轉步驟49,若否,轉步驟46;
步驟46,判斷當前遍歷節(jié)點的范圍是否完全在當前場景的可視范圍內(nèi),若是,轉步驟48,若否,轉步驟47;
步驟47,判斷當前節(jié)點是否已達到主鄰居四叉樹的最大深度,若是,轉步驟48,若否,轉步驟42;
步驟48,在場景中加載該節(jié)點范圍內(nèi)的模型,轉步驟410;
步驟49,創(chuàng)建緩存區(qū),將該節(jié)點加入緩存區(qū);
步驟410,判斷是否已遍歷完主鄰居四叉樹所有節(jié)點,若是,則結束遍歷,若否,則轉步驟42。
4.根據(jù)權利要求1所述的基于二維鄰域檢索的三維場景中海量模型實時調度方法,其特征在于:所述步驟5,包括如下步驟:
步驟51,獲取當前的場景可視范圍變化方向;
步驟52,獲取場景可視范圍內(nèi)在可視范圍變化方向上的邊緣節(jié)點;
步驟53,根據(jù)可視范圍變化方向,使用主鄰居檢索方法對邊緣節(jié)點遍歷,對其在可視范圍變化方向上的相鄰節(jié)點進行檢索,檢索的節(jié)點范圍由可視范圍在其變化方向上的變化速度確定;
步驟54,將步驟53中檢索到的子塊存入緩存區(qū)域;
步驟55,對緩存區(qū)內(nèi)的子節(jié)點進行遍歷;
步驟56,獲取當前遍歷節(jié)點的范圍;
步驟57,獲取當前三維場景的可視范圍;
步驟58,判斷當前遍歷節(jié)點的范圍是否完全不在當前場景可視范圍內(nèi),若是,轉步驟55,若否,轉步驟59;
步驟59,在場景中加載該節(jié)點范圍內(nèi)的模型;
步驟510,判斷緩存區(qū)遍歷是否結束,若是,轉步驟511,若否,轉步驟55;
步驟511,判斷視場是否有改變,若是,轉步驟51,若否,結束。