一種面向虛擬應(yīng)急演練的三維地理場景仿真方法
【專利摘要】本發(fā)明涉及一種面向虛擬應(yīng)急演練的三維地理場景仿真方法。首先,利用GIS軟件獲得DEM中的高程數(shù)據(jù),利用配準過的高分辨率遙感影像解譯地表附屬物信息,或者利用已有的實測圖層獲得地物和土地利用信息;接著,在游戲引擎中利用這些具有真實地理意義的信息建立地形地貌,其中的關(guān)鍵技術(shù)過程是游戲引擎中的直角坐標系與GIS軟件中地理坐標系之間的轉(zhuǎn)換;最后,在游戲引擎平臺上組合重構(gòu)具有真實地理意義的三維地形與地理要素模型,實現(xiàn)逼真三維場景的建立。本發(fā)明操作方便,不需要限制區(qū)域的形狀大小,且保證DEM高程準確性,能自動生成具有真實地理意義的三維場景。
【專利說明】一種面向虛擬應(yīng)急演練的三維地理場景仿真方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種面向虛擬應(yīng)急演練的三維地理場景仿真方法。
【背景技術(shù)】
[0002]嚴肅游戲自20世紀80年代誕生至今,一直被廣泛應(yīng)用于軍事、醫(yī)學、教育、科研等各個領(lǐng)域。嚴肅游戲是一種不以娛樂為目的的游戲。嚴肅游戲與娛樂游戲的關(guān)鍵區(qū)別在于游戲是否具有真實性和科學性。利用嚴肅游戲可以對現(xiàn)實中可能發(fā)生的一些事故災(zāi)害進行模擬,例如地震、火災(zāi)、地鐵反恐等,并且可以讓用戶以任意角色的形式進入這些游戲場景中,身臨其境地感受事故發(fā)生的過程,從而達到對用戶進行教育和培訓的目的。因此,嚴肅游戲一直被廣泛應(yīng)用于突發(fā)事件和應(yīng)急推演中,是目前該領(lǐng)域的研究熱點,也將是未來應(yīng)急推演領(lǐng)域的發(fā)展趨勢。嚴肅游戲中要求場景貼近真實,游戲邏輯具有科學依據(jù),并且游戲中的角色行為具有真實的物理意義,如行走的速度、距離,角色所處的位置等。而要保證嚴肅游戲的科學性和真實性的前提是在游戲中用戶所處的環(huán)境是具有真實意義的,因此,搭建逼真的三維地理場景是進行基于嚴肅游戲的三維仿真系統(tǒng)的關(guān)鍵步驟和基礎(chǔ)工作。
[0003]與自然災(zāi)害等事件相關(guān)的仿真應(yīng)急演練往往需要建立大區(qū)域范圍的虛擬場景,這與一般的虛擬現(xiàn)實游戲場景存在很大的差別。而目前的游戲引擎例如Cry Engine, UnrealEngine, Unity3D等都還不像地理信息系統(tǒng)(GIS)軟件一樣能快速的建立起大區(qū)域范圍并且具有真實意義的三維地理場景。
[0004]在游戲引擎中現(xiàn)有的建立三維地理場景的方法有兩種:
第一種方法:利用三維建模軟件建立三維地形再導入游戲引擎。首先利用三維建模軟件建立三維場景,再導出為游戲引擎中可以支持的文件格式,然后導入游戲引擎中建立三維模型。以 Unity3D 游戲引擎為例,在《A new method of virtual reality based onUnity3D》, 《The research of making scenic wandering system based on Unity 3D》,《基于Unity3D的虛擬漫游系統(tǒng)》等文獻中報道的研究案例均使用了這個方法建立地形。一般模式是利用3D Max建立三維場景后導出成FBX文件;然后將FBX文件導入到Unity3D中;接著,人工在Unity3D中調(diào)整每個塊的地理位置,使每個塊能無縫連接起來;最后,在三維地形上添加房屋等其他的三維模型。
[0005]第二種方法:利用灰度圖制作三維地形。該方法需要提供灰度圖(RAW格式)作為高程數(shù)據(jù),而且圖片形狀必須為正方形,邊長必須是2的指數(shù)冪,灰度從O到255共256級;區(qū)域的高程進行分級,灰度O表示最低處的高程,灰度255表示最高的高程。在文獻《試驗場三維GIS實現(xiàn)的新方法》,《三維圖形引擎大規(guī)模場景實時渲染技術(shù)研究與應(yīng)用》和專利《一種自動生成Torque引擎中三維地形的方法》中,均使用了灰度圖的方式建立地形。其具體實施步驟為:提取地形圖中等高線、高程點數(shù)據(jù)構(gòu)建約束Delaunay三角網(wǎng);根據(jù)地形范圍確定一個正方形區(qū)域以對應(yīng)長寬均為256象素的高度圖,在三角網(wǎng)中內(nèi)插出每個象素所對應(yīng)點的高程值,遍歷得到高程范圍,生成具有256等級的灰度圖,O表示最低,255表示最聞。
[0006]第一種利用三維軟件建立三維地形再導入游戲引擎的方法,缺點是:
①操作繁瑣;
②需要在引擎中調(diào)整每個塊地理位置,使每個塊能無縫連接起來,這樣的方法會帶來塊之間的接縫誤差;
③生成的三維場景不具備真實的地理意義,沒有原始坐標。
[0007]第二種利用灰度圖的方式來制作三維地形的方法,缺點是:
①需要提供灰度圖作為高程數(shù)據(jù)來源,所提供的灰度圖有形狀和大小的限制,要求形狀必須為正方形,邊長必須是2的指數(shù)冪;
②用灰度值表示高程值,將區(qū)域的高程劃分為256級,O表示最低,255表示最高,這樣的高程數(shù)據(jù),其三維地形的誤差會隨著相對高差的增加而增大,1000米高差即可達近4米,不能符合實際演練(如應(yīng)急疏散)的需求;
③生成的三維場景不具備真實的地理意義。
[0008]針對以上兩種方法中存在的缺點,本發(fā)明的目的是解決以上兩種方法中存在的制作步驟繁瑣、數(shù)據(jù)來源限制多,且不能在真正意義上構(gòu)建起具有真實地理意義的三維地理場景的問題。
【發(fā)明內(nèi)容】
[0009]本發(fā)明的目的在于提供一種操作方便,不需要限制區(qū)域的形狀大小,且保證DEM高程準確性,能自動生成具有真實地理意義的三維場景的面向虛擬應(yīng)急演練的三維地理場景仿真方法。
[0010]為實現(xiàn)上述目的,本發(fā)明的技術(shù)方案是:一種面向虛擬應(yīng)急演練的三維地理場景仿真方法,包括如下步驟,
步驟S1:獲取需仿真區(qū)域的遙感影像及通過GIS軟件獲取DEM中的高程數(shù)據(jù),并對需仿真區(qū)域進行實地考察或找到更大比例尺的地形圖、更高精度的幾何校正過的遙感影像,以獲取用于配準遙感影像的特征控制點坐標;
步驟S2:對步驟SI中的遙感影像和DEM中的高程數(shù)據(jù)進行預處理:對遙感影像先配準后裁剪,對DEM中的高程數(shù)據(jù)先裁剪后重采樣,以得到空間參考一致、大小匹配、空間分辨率相同的遙感影像和DEM ;
步驟S3:以行序優(yōu)先的方式讀取遙感影像和DEM的行列數(shù)及分辨率信息,并以List列表文本文件的形式存儲行列矩陣,存儲格式為List={hl,h2, h3,…,hi,…,hn};其中,hi表示對應(yīng)第i個DEM網(wǎng)格的高程值;讀取順序是場景西南角第一個網(wǎng)格點的開始為1,以行序優(yōu)先的方式向東方向逐個讀取各個網(wǎng)格點的高程值至文本文件中;
步驟S4:構(gòu)建具有準確的相對地理位置的網(wǎng)格化三維地形,具體如下:
因DEM網(wǎng)格為正方形,游戲引擎中的地形網(wǎng)格為三角形;以Mesh來表示網(wǎng)格類,并以Mesh, vertices, Mesh, triangles和Mesh, uv這三個數(shù)組分別用于存儲三角形網(wǎng)格的頂點位置、所有三角形頂點的索引和網(wǎng)格基礎(chǔ)紋理坐標;并將DEM的正方形網(wǎng)格的中心點坐標及其高程相應(yīng)轉(zhuǎn)換為游戲引擎中三角形網(wǎng)格的頂點坐標及其高程值:
設(shè)頂點的集合為{ vertices [O], vertices [I], vertices [2], …,vertices[vertices_count]},其中每個頂點均為三維坐標,如式(I)?(5)所示: Mesh, vertices = vertices公式(I)
Vector3[] vertices = new Vector3[vertices_count]公式(2)
vertices [index] = new Vector3 (Xindexj Yindexj Zindex)公式(3)
Xindex- Xindex-1 = Cel I Si ΖΘ公式(4)
Zindex- Zindex-! = CellSize公式(5)
在公式(I)?(5)中,vertices [index]表示每個頂點的三維坐標數(shù)組,index為頂點的索引值,vertices_count表示頂點的個數(shù);Mesh.vertices中的數(shù)組由三維向量數(shù)組vertices [index]組成;Xindex為經(jīng)度,Yindex為高程,Zindex為緯度;在建立地形時將Z軸設(shè)為指向正北方向,沿X軸或Z軸方向相鄰的兩個頂點之間的距離與DEM分辨率大小相等;CellSize為DEM的分辨率大??;
Mesh, triangles是一個存儲頂點數(shù)組索引的三角形列表,該數(shù)組的長度只能是3的整數(shù)倍,數(shù)組中的id和vertices數(shù)組中的頂點ID--對應(yīng),triangle數(shù)組的表示如下:
int sum = col * row * 6公式(6)
Mesh, triangles = triangles公式(7)
int [] triangles = new int [sum]公式(8)
在公式(6)?(8)中,triangles為整數(shù)型數(shù)組,sum為triangles數(shù)組的長度,row和col表示DEM的行列數(shù),數(shù)組儲存每個三角形對應(yīng)的頂點索引ID值;
Mesh, uv是表示網(wǎng)格基礎(chǔ)紋理坐標的二維數(shù)組,紋理的集合為{UV[0],UV[1], UV[2],…,UV[vertices_count]}, UV[i]由二維向量組成;如公式(9)?(13)所示:
Mesh, vertices = UV公式(9)
Vector2[] UV= new Vector2 (VERTICES_COUNT)公式(10)
UV [index] = new Vector2 (j * v, i * u);公式(11)
u = l/ row公式(12)
v = l/ col公式(13)
在公式(9)?(13)中,row為DEM的行數(shù),col為DEM的列數(shù);i, j分別表示頂點所在的DEM柵格位置的行、列號;Vector2(j * v, i * u)表示紋理的坐標數(shù)組;
步驟S5:根據(jù)上述方法將三維地形轉(zhuǎn)換到游戲引擎中,使其具有三維地形層次細節(jié)管理功能;
步驟S6:將游戲引擎中的直角坐標系轉(zhuǎn)換為地理坐標系,具體如下:
一般情況下應(yīng)急演練的場景大小相比于地球而言可以不考慮地球曲率,故此處忽略地球曲率,所以在步驟S4建立完具有相對位置準確的地形后,定義Z軸為正北方向,將場景西南角移動到游戲坐標原點(0,0,O)位置,場景中角色的實際空間位置坐標,根據(jù)公式(14)?(16)確定:
player_x = (playercur.x _ southwest, x) * x_offset / x—w—offset+ geo _x 公式(14)
player—z = (playercur.z - southwest, z) * z—offset / z—w—offset + geo _z 公式(15)
player—height = playercur.y公式(16)
在公式(14)?(16)中,player—x,player—z和player—height分別表示角色所在位置的真實世界的經(jīng)度、諱度和高程值;playercur.x和playercur.z表示角色在游戲引擎的虛擬場景中的X軸和Z軸的坐標值;(southwest, x,southwest, z)表示區(qū)域西南角點在游戲虛擬場景坐標中的坐標值,即為(0,0) ;x_offset和z_offset表示場景對應(yīng)實際地理區(qū)域的經(jīng)度跨度和纟韋度跨度;x_w_offset和z_w_offset分別表示游戲虛擬場景的x軸方向的寬度和y軸方向的長度;geo _x和geo _z表示場景的西南角點的真實世界經(jīng)度和緯度;游戲場景中的高程值與真實世界的高程值不必轉(zhuǎn)換,因此playercur.y表示角色在游戲引擎中的高度值(即Y軸的值),也就是角色在真實世界中的高度值player_height ;
步驟S7:在步驟S6建立的具有真實地理意義的三維地形上添加地理要素,完成具有真實地理意義的仿真場景的建立。
[0011]在本發(fā)明實施例中,所述步驟S2中,對遙感影像和DEM中的高程數(shù)據(jù)進行預處理的軟件包括ENV1、Maplnfo、ERDAS和PCI軟件。
[0012]在本發(fā)明實施例中,所述游戲引擎包括Unity3D、Cry Engine和Unreal Engine引擎。
[0013]相較于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
1、本發(fā)明是以實測的DEM信息為基礎(chǔ),在游戲引擎中自動化地創(chuàng)建具有地理位置和區(qū)域大小相對準確的網(wǎng)格地形,所以,與利用在三維軟件建立完的三維地形導入游戲引擎建立三維地形的方法相比,更加方便,而且可以避免由于軟件之間的兼容性問題而產(chǎn)生的在游戲引擎導入的三維地形被切割為很多塊的問題;
2、與利用RAW格式高度圖制作三維地形的方式相比,由于本發(fā)明的方法是利用GIS軟件獲取實測的DEM數(shù)據(jù),沒有對高程數(shù)據(jù)進行分級量化,從而保證地形高程的準確性,并且不需要限定場景的形狀大小。
【專利附圖】
【附圖說明】
[0014]圖1為本發(fā)明的總體技術(shù)實現(xiàn)方案。
[0015]圖2為本發(fā)明一實施例技術(shù)實現(xiàn)方案。
[0016]圖3為本發(fā)明對遙感影像和DEM數(shù)據(jù)的處理技術(shù)路線圖。
[0017]圖4為本發(fā)明經(jīng)過“0bject2Terrain.cs”轉(zhuǎn)換后具有Unity3D地形系統(tǒng)的地形。
[0018]圖5為本發(fā)明道路生成后的場景。
[0019]圖6為本發(fā)明FBX文件導入到Unity3D后的建筑三維模型。
[0020]圖7為本發(fā)明Unity3D中第三人稱視角的仿真地理場景。
【具體實施方式】
[0021 ] 下面結(jié)合附圖,對本發(fā)明的技術(shù)方案進行具體說明。
[0022]如圖1所示,一種面向虛擬應(yīng)急演練的三維地理場景仿真方法,包括如下步驟,步驟S1:獲取需仿真區(qū)域的遙感影像及通過GIS軟件獲取DEM中的高程數(shù)據(jù),并對需仿真區(qū)域進行實地考察或找到更大比例尺的地形圖、更高精度的幾何校正過的遙感影像,以獲取用于配準遙感影像的特征控制點坐標;
步驟S2:對步驟SI中的遙感影像和DEM中的高程數(shù)據(jù)進行預處理:對遙感影像先配準后裁剪,對DEM中的高程數(shù)據(jù)先裁剪后重采樣,以得到空間參考一致、大小匹配、空間分辨率相同的遙感影像和DEM ;所述步驟S2中,對遙感影像和DEM中的高程數(shù)據(jù)進行預處理的軟件包括 ENV1、Maplnfo、ERDAS 和 PCI 軟件; 步驟S3:以行序優(yōu)先的方式讀取遙感影像和DEM的行列數(shù)及分辨率信息,并以List列表文本文件的形式存儲行列矩陣,存儲格式為List={hl,h2, h3,…,hi,…,hn};其中,hi表示對應(yīng)第i個DEM網(wǎng)格的高程值;讀取順序是場景西南角第一個網(wǎng)格點的開始為1,以行序優(yōu)先的方式向東方向逐個讀取各個網(wǎng)格點的高程值至文本文件中;
步驟S4:構(gòu)建具有準確的相對地理位置的網(wǎng)格化三維地形,具體如下:
因DEM網(wǎng)格為正方形,游戲引擎中的地形網(wǎng)格為三角形;以Mesh來表示網(wǎng)格類,并以Mesh, vertices, Mesh, triangles和Mesh, uv這三個數(shù)組分別用于存儲三角形網(wǎng)格的頂點位置、所有三角形頂點的索引和網(wǎng)格基礎(chǔ)紋理坐標;并將DEM的正方形網(wǎng)格的中心點坐標及其高程相應(yīng)轉(zhuǎn)換為游戲引擎中三角形網(wǎng)格的頂點坐標及其高程值:
設(shè)頂點的集合為{ vertices [O], vertices [I], vertices [2], …,vertices[vertices_count]},其中每個頂點均為三維坐標,如式(I)?(5)所示:
Mesh, vertices = vertices公式(I)
Vector3[] vertices = new Vector3[vertices_count]公式(2)
vertices [index] = new Vector3 (Xindex, Yindex, Zindex)公式(3)
Xindex- Xindex-1 = Cel I Si ΖΘ公式(4)
Zindex- Zindex-! = CellSize公式(5)
在公式(I)?(5)中,vertices [index]表示每個頂點的三維坐標數(shù)組,index為頂點的索引值,vertices_count表示頂點的個數(shù);Mesh.vertices中的數(shù)組由三維向量數(shù)組vertices [index]組成;Xindex為經(jīng)度,Yindex為高程,Zindex為緯度;在建立地形時將Z軸設(shè)為指向正北方向,沿X軸或Z軸方向相鄰的兩個頂點之間的距離與DEM分辨率大小相等;CellSize為DEM的分辨率大??;
Mesh, triangles是一個存儲頂點數(shù)組索引的三角形列表,該數(shù)組的長度只能是3的整數(shù)倍,數(shù)組中的id和vertices數(shù)組中的頂點ID--對應(yīng),triangle數(shù)組的表示如下:
int sum = col * row * 6公式(6)
Mesh, triangles = triangles公式(7)
int [] triangles = new int [sum]公式(8)
在公式(6)?(8)中,triangles為整數(shù)型數(shù)組,sum為triangles數(shù)組的長度,row和col表示DEM的行列數(shù),數(shù)組儲存每個三角形對應(yīng)的頂點索引ID值;
Mesh, uv是表示網(wǎng)格基礎(chǔ)紋理坐標的二維數(shù)組,紋理的集合為{UV[0],UV[1], UV[2],…,UV[vertices_count]}, UV[i]由二維向量組成;如公式(9)?(13)所示:
Mesh, vertices = UV公式(9)
Vector2[] UV= new Vector2 (VERTICES_COUNT)公式(10)
UV [index] = new Vector2 (j * v, i * u);公式(11)
u = l/ row公式(12)
v = l/ col公式(13)
在公式(9)?(13)中,row為DEM的行數(shù),col為DEM的列數(shù);i, j分別表示頂點所在的DEM柵格位置的行、列號;Vector2(j * v, i * u)表示紋理的坐標數(shù)組;
步驟S5:根據(jù)上述方法將三維地形轉(zhuǎn)換到游戲引擎中,使其具有三維地形層次細節(jié)管理功能; 步驟S6:將游戲引擎中的直角坐標系轉(zhuǎn)換為地理坐標系,具體如下:
一般情況下應(yīng)急演練的場景大小相比于地球而言可以不考慮地球曲率,故此處忽略地球曲率,所以在步驟S4建立完具有相對位置準確的地形后,定義Z軸為正北方向,將場景西南角移動到游戲坐標原點(O,O,O)位置,場景中角色的實際空間位置坐標,根據(jù)公式(14)?
(16)確定:
player_x = (playercur.x _ southwest, x) * x_offset / x—w—offset+ geo _x 公式(14)
player—z = (playercur.z _ southwest, z) * z—offset / z_w_offset + geo _z 公式(15)
player_height = playercur.y公式(16)
在公式(14)?(16)中,player_x, player_z和player_height分別表示角色所在位置的真實世界的經(jīng)度、纟韋度和高程值;playercur.x和playercur.z表示角色在游戲引擎的虛擬場景中的X軸和Z軸的坐標值;(southwest, x, southwest, z)表示區(qū)域西南角點在游戲虛擬場景坐標中的坐標值,即為(0,0) ;x_offset和z_offset表示場景對應(yīng)實際地理區(qū)域的經(jīng)度跨度和纟韋度跨度;x_w_offset和z_w_offset分別表示游戲虛擬場景的x軸方向的寬度和y軸方向的長度;geo _x和geo _z表示場景的西南角點的真實世界經(jīng)度和緯度;游戲場景中的高程值與真實世界的高程值不必轉(zhuǎn)換,因此playercur.y表示角色在游戲引擎中的高度值(即Y軸的值),也就是角色在真實世界中的高度值player_height ;
步驟S7:在步驟S6建立的具有真實地理意義的三維地形上添加地理要素,完成具有真實地理意義的仿真場景的建立。
[0023]所述游戲引擎包括Unity3D、Cry Engine 和 Unreal Engine 引擎。
[0024]以下為本發(fā)明的具體實施例。
[0025]為了便于本領(lǐng)域技術(shù)人員的理解,下面以利用最常用的GIS軟件ArcGIS Desktop(美國ESRI公司開發(fā))與游戲引擎Unity3D相結(jié)合,構(gòu)建仿真地理場景為例,對本發(fā)明的方法步驟進行詳細描述。圖2是案例的技術(shù)流程圖。具體實施步驟如下
1.圖3說明了在ArcGIS Desktop處理遙感影像和DEM數(shù)據(jù)的技術(shù)路線。以實地外業(yè)調(diào)查得到的GPS數(shù)據(jù)為參考控制點,利用Georeferencing工具對影像進行配準,將原本偏移的影像校正到正確的位置;將DEM數(shù)據(jù)重采樣成40米分辨率。
[0026]2.讀取DHM的行列數(shù)和分辨率信息,并將高程數(shù)據(jù)導入到文本文件中。
[0027]3.在Unity3D中應(yīng)用Mesh類,根據(jù)DEM分辨率、行列數(shù)和高程數(shù)據(jù)確定網(wǎng)格中各個頂點的位置和網(wǎng)格基本紋理坐標,從而創(chuàng)建具有地理位置和區(qū)域大小相對準確的網(wǎng)格地形。
[0028]4.利用“0bject2Terrain.cs”將網(wǎng)格地形轉(zhuǎn)換為Unity3D地形系統(tǒng)。利用地形編輯器進一步設(shè)置遙感影像的解譯結(jié)果為地形紋理貼圖。轉(zhuǎn)換后得到的Unity3D地形系統(tǒng)具有(Level Of Detail, L0D)層次細節(jié)管理功能;結(jié)果如圖4所示。
[0029]5.將游戲引擎中的直角坐標系轉(zhuǎn)換為地理坐標系。在場景不大的情況下,可以不考慮地球曲率,在Unity3D中利用UpDate ()中的方法實時獲取角色的位置信息,并實時根據(jù)轉(zhuǎn)換公式計算出角色所在位置的真實地理坐標和高程。
[0030]6.對地理要素的建模,主要包括道路、河流、建筑物等。其中道路與河流利用EasyRoad3D插件進行制作,根據(jù)遙感影像解譯出道路,并設(shè)置相應(yīng)的路面貼圖材質(zhì),需要適當?shù)貙⒌缆纺P吞Ц咭欢ǜ叨?,以保證道路完全覆蓋在地形表面,效果如圖5所示。三維建筑模型在3DS Max2012中完成制作,3DS Max中的單位設(shè)置為厘米,將遙感影像作為底圖確定每個建筑物的具體位置,對研究區(qū)中居民區(qū)、工廠、景區(qū)等進行建模。以研究區(qū)中的古堡建筑為例,在3DMax中完成三維模型后導出成FBX文件,然后再導入到Unity3D中,結(jié)果如圖6所示。
[0031]7.在具有真實地理意義的三維地形上,根據(jù)地理要素在遙感影像中的位置,將相應(yīng)的地理要素模型整合進來,完成區(qū)域三維仿真地理場景的建立。圖7是在Unity3D中整合所有數(shù)據(jù)后的第三人稱角色的界面視圖,圖中右上角為場景的小地圖,小地圖中的紅點為角色所在的位置,左上角是角色的生命值,左下角顯示角色的所在的地理坐標、高程值。
[0032]以上是本發(fā)明的較佳實施例,凡依本發(fā)明技術(shù)方案所作的改變,所產(chǎn)生的功能作用未超出本發(fā)明技術(shù)方案的范圍時,均屬于本發(fā)明的保護范圍。
【權(quán)利要求】
1.一種面向虛擬應(yīng)急演練的三維地理場景仿真方法,其特征在于:包括如下步驟, 步驟S1:獲取需仿真區(qū)域的遙感影像及通過GIS軟件獲取DEM中的高程數(shù)據(jù),并對需仿真區(qū)域進行實地考察或找到更大比例尺的地形圖、更高精度的幾何校正過的遙感影像,以獲取用于配準遙感影像的特征控制點坐標; 步驟S2:對步驟SI中的遙感影像和DEM中的高程數(shù)據(jù)進行預處理:對遙感影像先配準后裁剪,對DEM中的高程數(shù)據(jù)先裁剪后重采樣,以得到空間參考一致、大小匹配、空間分辨率相同的遙感影像和DEM ; 步驟S3:以行序優(yōu)先的方式讀取遙感影像和DEM的行列數(shù)及分辨率信息,并以List列表文本文件的形式存儲行列矩陣,存儲格式為List={hl,h2, h3,…,hi,…,hn};其中,hi表示對應(yīng)第i個DEM網(wǎng)格的高程值;讀取順序是場景西南角第一個網(wǎng)格點的開始為1,以行序優(yōu)先的方式向東方向逐個讀取各個網(wǎng)格點的高程值至文本文件中; 步驟S4:構(gòu)建具有準確的相對地理位置的網(wǎng)格化三維地形,具體如下: 因DEM網(wǎng)格為正方形,游戲引擎中的地形網(wǎng)格為三角形;以Mesh來表示網(wǎng)格類,并以Mesh, vertices, Mesh, triangles和Mesh, uv這三個數(shù)組分別用于存儲三角形網(wǎng)格的頂點位置、所有三角形頂點的索引和網(wǎng)格基礎(chǔ)紋理坐標;并將DEM的正方形網(wǎng)格的中心點坐標及其高程相應(yīng)轉(zhuǎn)換為游戲引擎中三角形網(wǎng)格的頂點坐標及其高程值: 設(shè)頂點的集合為{ vertices [O], vertices [I], vertices [2], …,vertices[vertices_count]},其中每個頂點均為三維坐標,如式(I)?(5)所示: Mesh, vertices = vertices公式(I) Vector3[] vertices = new Vector3[vertices_count]公式(2) vertices [index] = new Vector3 (Xindex, Yindex, Zindex)公式(3) Xindex - Xindex-1 = Cel I Si ΖΘ公式(4) Zindex - Zindex-! = CellSize公式(5) 在公式(I)?(5)中,vertices [index]表示每個頂點的三維坐標數(shù)組,index為頂點的索引值,vertices_count表示頂點的個數(shù);Mesh.vertices中的數(shù)組由三維向量數(shù)組vertices [index]組成;Xindex為經(jīng)度,Yindex為高程,Zindex為緯度;在建立地形時將Z軸設(shè)為指向正北方向,沿X軸或Z軸方向相鄰的兩個頂點之間的距離與DEM分辨率大小相等;CellSize為DEM的分辨率大??; Mesh, triangles是一個存儲頂點數(shù)組索引的三角形列表,該數(shù)組的長度只能是3的整數(shù)倍,數(shù)組中的id和vertices數(shù)組中的頂點ID--對應(yīng),triangle數(shù)組的表示如下: int sum = col * row * 6公式(6) Mesh, triangles = triangles公式(7) int [] triangles = new int [sum]公式(8) 在公式(6)?(8)中,triangles為整數(shù)型數(shù)組,sum為triangles數(shù)組的長度,row和col表示DEM的行列數(shù),數(shù)組儲存每個三角形對應(yīng)的頂點索引ID值; Mesh, uv是表示網(wǎng)格基礎(chǔ)紋理坐標的二維數(shù)組,紋理的集合為{UV[0],UV[1], UV[2],…,UV[vertices_count]}, UV[i]由二維向量組成;如公式(9)?(13)所示: Mesh, vertices = UV公式(9) Vector2[] UV= new Vector2 (VERTICES_COUNT)公式(10) UV [index] = new Vector2 (j * v, i * u);公式(11) u = l/ row公式(12) v = l/ col公式(13) 在公式(9)?(13)中,row為DEM的行數(shù),col為DEM的列數(shù);i, j分別表示頂點所在的DEM柵格位置的行、列號;Vector2(j * v, i * u)表示紋理的坐標數(shù)組; 步驟S5:根據(jù)上述方法將三維地形轉(zhuǎn)換到游戲引擎中,使其具有三維地形層次細節(jié)管理功能; 步驟S6:將游戲引擎中的直角坐標系轉(zhuǎn)換為地理坐標系,具體如下: 一般情況下應(yīng)急演練的場景大小相比于地球而言可以不考慮地球曲率,故此處忽略地球曲率,所以在步驟S4建立完具有相對位置準確的地形后,定義Z軸為正北方向,將場景西南角移動到游戲坐標原點(0,0,O)位置,場景中角色的實際空間位置坐標,根據(jù)公式(14)?(16)確定:
player_x = (playercur.x _ southwest, x) * x_offset / x—w—offset+ geo _x 公式(14)
player—z = (playercur.z - southwest, z) * z—offset / z_w_offset + geo _z 公式(15)
player_height = playercur.y公式(16) 在公式(14)?(16)中,player_x, player_z和player_height分別表示角色所在位置的真實世界的經(jīng)度、纟韋度和高程值;playercur.x和playercur.z表示角色在游戲引擎的虛擬場景中的X軸和Z軸的坐標值;(southwest, x, southwest, z)表示區(qū)域西南角點在游戲虛擬場景坐標中的坐標值,即為(0,0) ;x_offset和z_offset表示場景對應(yīng)實際地理區(qū)域的經(jīng)度跨度和纟韋度跨度;x_w_offset和z_w_offset分別表示游戲虛擬場景的x軸方向的寬度和y軸方向的長度;geo _x和geo _z表示場景的西南角點的真實世界經(jīng)度和緯度;游戲場景中的高程值與真實世界的高程值不必轉(zhuǎn)換,因此playercur.y表示角色在游戲引擎中的高度值(即Y軸的值),也就是角色在真實世界中的高度值player_height ; 步驟S7:在步驟S6建立的具有真實地理意義的三維地形上添加地理要素,完成具有真實地理意義的仿真場景的建立。
2.根據(jù)權(quán)利要求1所述的一種面向虛擬應(yīng)急演練的三維地理場景仿真方法,其特征在于:所述步驟S2中,對遙感影像和DEM中的高程數(shù)據(jù)進行預處理的軟件包括ENV1、Map Info、ERDAS 和 PCI 軟件。
3.根據(jù)權(quán)利要求1所述的一種面向虛擬應(yīng)急演練的三維地理場景仿真方法,其特征在于:所述游戲引擎包括Unity3D、Cry Engine和Unreal Engine引擎。
【文檔編號】G06T17/05GK104318617SQ201410551640
【公開日】2015年1月28日 申請日期:2014年10月17日 優(yōu)先權(quán)日:2014年10月17日
【發(fā)明者】林廣發(fā), 劉鑫垚, 張明鋒, 李清遠, 楊城 申請人:福建師范大學