[发明专利]一种面向虚拟应急演练的三维地理场景仿真方法有效
申请号: | 201410551640.1 | 申请日: | 2014-10-17 |
公开(公告)号: | CN104318617A | 公开(公告)日: | 2015-01-28 |
发明(设计)人: | 林广发;刘鑫垚;张明锋;李清远;杨城 | 申请(专利权)人: | 福建师范大学 |
主分类号: | G06T17/05 | 分类号: | G06T17/05 |
代理公司: | 福州元创专利商标代理有限公司 35100 | 代理人: | 蔡学俊 |
地址: | 350007 *** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种面向虚拟应急演练的三维地理场景仿真方法。首先,利用GIS软件获得DEM中的高程数据,利用配准过的高分辨率遥感影像解译地表附属物信息,或者利用已有的实测图层获得地物和土地利用信息;接着,在游戏引擎中利用这些具有真实地理意义的信息建立地形地貌,其中的关键技术过程是游戏引擎中的直角坐标系与GIS软件中地理坐标系之间的转换;最后,在游戏引擎平台上组合重构具有真实地理意义的三维地形与地理要素模型,实现逼真三维场景的建立。本发明操作方便,不需要限制区域的形状大小,且保证DEM高程准确性,能自动生成具有真实地理意义的三维场景。 | ||
搜索关键词: | 一种 面向 虚拟 应急 演练 三维 地理 场景 仿真 方法 | ||
【主权项】:
一种面向虚拟应急演练的三维地理场景仿真方法,其特征在于:包括如下步骤,步骤S1:获取需仿真区域的遥感影像及通过GIS软件获取DEM中的高程数据,并对需仿真区域进行实地考察或找到更大比例尺的地形图、更高精度的几何校正过的遥感影像,以获取用于配准遥感影像的特征控制点坐标;步骤S2:对步骤S1中的遥感影像和DEM中的高程数据进行预处理:对遥感影像先配准后裁剪,对DEM中的高程数据先裁剪后重采样,以得到空间参考一致、大小匹配、空间分辨率相同的遥感影像和DEM;步骤S3:以行序优先的方式读取遥感影像和DEM的行列数及分辨率信息,并以List列表文本文件的形式存储行列矩阵,存储格式为List={h1, h2, h3, …, hi, …, hn};其中,hi表示对应第i个DEM网格的高程值;读取顺序是场景西南角第一个网格点的开始为1,以行序优先的方式向东方向逐个读取各个网格点的高程值至文本文件中;步骤S4:构建具有准确的相对地理位置的网格化三维地形,具体如下:因DEM网格为正方形,游戏引擎中的地形网格为三角形;以Mesh来表示网格类,并以Mesh.vertices,Mesh.triangles和Mesh.uv这三个数组分别用于存储三角形网格的顶点位置、所有三角形顶点的索引和网格基础纹理坐标;并将DEM的正方形网格的中心点坐标及其高程相应转换为游戏引擎中三角形网格的顶点坐标及其高程值:设顶点的集合为{ vertices[0], vertices[1], vertices[2], …, vertices[vertices_count]},其中每个顶点均为三维坐标,如式(1)~(5)所示:Mesh.vertices = vertices 公式(1)Vector3[] vertices = new Vector3[vertices_count] 公式(2)vertices[index] = new Vector3(Xindex, Yindex, Zindex) 公式(3)Xindex ‑ Xindex‑1 = CellSize 公式(4)Zindex ‑ Zindex‑1 = CellSize 公式(5)在公式(1)~(5)中,vertices[index]表示每个顶点的三维坐标数组,index为顶点的索引值,vertices_count表示顶点的个数;Mesh.vertices中的数组由三维向量数组vertices[index]组成;Xindex为经度,Yindex为高程,Zindex为纬度;在建立地形时将Z轴设为指向正北方向,沿X轴或Z轴方向相邻的两个顶点之间的距离与DEM分辨率大小相等;CellSize为DEM的分辨率大小;Mesh.triangles是一个存储顶点数组索引的三角形列表,该数组的长度只能是3的整数倍,数组中的id和vertices数组中的顶点ID一一对应,triangle数组的表示如下:int sum = col * row * 6 公式(6)Mesh.triangles = triangles 公式(7)int[] triangles = new int[sum] 公式(8)在公式(6)~(8)中,triangles为整数型数组,sum为triangles数组的长度,row和col表示DEM的行列数,数组储存每个三角形对应的顶点索引ID值;Mesh.uv是表示网格基础纹理坐标的二维数组,纹理的集合为{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 = 1 / row 公式(12)v = 1 / col 公式(13)在公式(9)~(13)中,row为DEM的行数,col为DEM的列数;i, j分别表示顶点所在的DEM栅格位置的行、列号;Vector2(j * v, i * u)表示纹理的坐标数组;步骤S5:根据上述方法将三维地形转换到游戏引擎中,使其具有三维地形层次细节管理功能;步骤S6:将游戏引擎中的直角坐标系转换为地理坐标系,具体如下:一般情况下应急演练的场景大小相比于地球而言可以不考虑地球曲率,故此处忽略地球曲率,所以在步骤S4建立完具有相对位置准确的地形后,定义Z轴为正北方向,将场景西南角移动到游戏坐标原点(0,0,0)位置,场景中角色的实际空间位置坐标,根据公式(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分别表示角色所在位置的真实世界的经度、纬度和高程值;playercur.x和playercur.z表示角色在游戏引擎的虚拟场景中的X轴和Z轴的坐标值;(southwest.x,southwest.z)表示区域西南角点在游戏虚拟场景坐标中的坐标值,即为(0,0);x_offset和z_offset表示场景对应实际地理区域的经度跨度和纬度跨度;x_w_offset和z_w_offset分别表示游戏虚拟场景的x轴方向的宽度和y轴方向的长度;geo _x和geo _z表示场景的西南角点的真实世界经度和纬度;游戏场景中的高程值与真实世界的高程值不必转换,因此playercur.y表示角色在游戏引擎中的高度值(即Y轴的值),也就是角色在真实世界中的高度值player_height;步骤S7:在步骤S6建立的具有真实地理意义的三维地形上添加地理要素,完成具有真实地理意义的仿真场景的建立。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建师范大学,未经福建师范大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201410551640.1/,转载请声明来源钻瓜专利网。