2 三维虚拟战场地形的可视化数字建模
2.1 DEM地形数据的组织和表达
地表数字地形模型(Digital Terrain model,即DTM)是虚拟战场地形模型的重要组成部分。三维地形数据结构是构造虚拟战场地形环境的基础,关键技术是DEM(数字高程模型)的表达。对DEM数据的组织较多的用不规则三角网(Triangulated Irregular Network,即TIN)模型或规则网格(GRID)模型(如图3)。TIN模型是由分散的地形点按照一定的规则构成的一系列不相交的三角形网组成,所表示的地形表面的真实程度由地形点的密度决定,并能充分表现高程细节的变化,适合于地形复杂的地区。TIN可以利用原始高程点重建地形表面,地形平坦的地方多边形较少;复杂的地区多边形较多,对地形的描述具有很好的合理性。GRID模型具有较小的存贮量和简单的数据结构。
对复杂的战场地形的建立一般用TIN。TIN的存贮采用文件集的形式,每个文件存贮网格的节点坐标,高程坐标,节点号,空间索引标识,边界,渲染和文件指针等信息。建立地形实体DTM一般由地形等高线原始数据按一定的算法生成TIN。算法包括Delaunay三角形的分治算法,点插入法和三角网生长法。这些算法都遵循以下原则:
a)TIN的唯一性。
b)使每个三角形尽最大可能接近等边三角形。
c)三角形的边长总和最小。
对初始的TIN,应消除由于等高线数据过于密集或采集信息缺少而形成的细小的,狭长的三角形,来提高TIN的精度。
根据GIS地形信息组织的基本原理,对TIN的数据结构的组织,采用了面向对象的程序设计思想,以Visual C++6.0 为开发语言,设计了CTinLine三个点的主要成员。
1. 测量点类:
Class CsurveyPoint: Public CObject
{.............
Float x, y, z; //点x ,y ,z的三维坐标,由数字勘测系统外业获取
Int SvyPtID //点的ID号隐含属性信息
CsurvyPoint *Next; //单向链表,用于数据管理
..........操作函数.......
}
2. 三角形边类
Class CtinLine: Public CObject
{.............
CsurvyPoint *P1, *P2; //指向三角形的两端点
int TinLineID; //三角形边的ID号
int left , right; //三角形的左右三角形号
CtinLine *Next; //指向下一个节点索引的指针,形成单向链表
................
}
3. 三角形CTIN类
Class CTin: Public CObject;
{.............
CsuryPoint *P1, *P2, *P3;
或CtinLine *TL1, *TL2, *TL3; //三角形三个点或三条边的指针
int Tr1, Tr2, Tr3; //三角形三个相邻的三角形的索引值
Ctin *Next //下一个三角形的索引,形成单向链表
..............
}
所开发三维地形仿真成图系统建立的不同的TIN数目的地形平面模型图(含高程值)如图4 图5所示。
2.2 地形实体的数字建模
用GIS的空间数据组织结构实现地形环境实体的数字建模。按照地形对象的属性,可以将地形对象分为点,线,面,体四类数据结构来表达。
下面给出某山体地形环境的存贮结构:
Struct HillPart {
int Part_ID; //山体局部标识
char Part_Code; //山体局部编号
Struct Body *BodyList; //山体局部数组
Attributes_List //山体局部属性列表}
Struct Body {
int Body_ID; //体标识
int Part_ID; //包含该体的山体局部标号
char Patt_Code; //山体局部编号
int Body_Type; //体构造类型
Struct Mesh *MeshList; //构成体的面数组
Attributes_List; } //体属性列表
Sruct Mesh {
int Mesh_ID; //面标识
int Body_ID; //包含该面的体标识
char Part_Code; //山体局部编号
int Mesh_Type; //面构造类型
Srucut Line *LineList; //构成面的线数组
Attributes_List; //面属性列表
}
Struct Line {
int Line_ID; //线标识号
int Mesh_ID; //包含该线的面标识
char Part_Code; //山体局部编号
char Line_Type; //线构造类型
Struct Point *PointList; //构成线的点的有向数组
AttributesList; //线属性列表
}
Srtuct Point {
int Point_ID; //点标识号
int Line_ID; //包含该点的线标识
char Part_Code; //山体局部编号
double x; //x, y, z
double y; // 坐标
double z;
AttributesList //点属性列表
}
3 三维数字地形模型的可视化操作与分析
3.1 三维数字地形的动态显示
为了达到逼真的显示效果,在三维几何模型上叠加实物影象数据。地形的纹理的构造可由TIN模型中的三角形与山体的正射影象图的扫描坐标匹配,从而取得三角形内影象的恢度值或RGB值,然后把数据叠加到TIN模型上,由此得到真实光照和表面纹理的显示效果。为了提高三维地形模型的显示速度和效果,以及为了降低纹理贴图时,影响数据的量,使用视点相关的动态多分辨率纹理模型(View-dependent and Multi-resolution Texture Model)。距离观察者远近不同的区域其纹理分辨率不同,即影射的距离观察者较远的区域,其纹理具有较低的分辨率,相反具有较高的分辨率,这也符合视觉原理。(具体算法可参照文献[4])
观察者远距离(在高空中)观察看到的是粗略的地形;近距离观察的是细微的地形。在虚拟的战场地形环境中要表现这一特点,实现地形的动态地近乎人性化的显示用了一种叫做视相关的实时Lod地形模型的多分辨率显示技术(View-dependent and real-time LoD model of Multi-resolution terrain Rendering)。
在距离视点较近时用较多的多边形描述;较远时用较少的多边形描述。可以平衡图形负载,符合场景的真实地表现的特点。(该技术的详细介绍可参阅参考文献[5])
3.2 可视化的三维数字地形查询
实现查询的前提是数字模型的空间数据与属性数据的一一对应。问题是二维屏幕显示的点和三维模型的实际点不是一一对应的。这就必须用计算机图形学的知识进行二维到三维的转化。若屏幕捕获到的点对应着地形点的坐标,到对应的真实三维坐标。 即
(其中为三维到二维投影的变换矩阵)。若鼠标捕捉到对应的属性信息为山体的ID号。则由以下语句可实现山体属性的查询。
Select ( *, * , from datebase , where ID="***")
这样就实现了数字地形的空间图到属性的查询。
3.3 三维空间地形数据的分析
主要给出地形剖面绘制及空间距离量测的方法。由鼠标在显示的三维数字地形DTM上任取两点由可视点判别法得到对应的实际的地形的三维坐标,。 根据它们的平面位置和TIN模型存贮的数据结构和所在的TIN模型的三角形编号,由起点和终点的三角形位置和连线,可以得到与该连线相交的三角形的编号,从而求得剖线与一系列三角形相交的点的三维坐标把这些点两两相连构成一条三维曲线。选取合适的比例尺可以绘制出 两点的地形剖面图。并由公式:
计算出两点的空间距离(沿地形面的两点直线距离)。
4 结束语
把GIS的三维动态可视化技术引进到虚拟战场地形环境中去,以数据的直观可视 化为出发点来形象地描述战场地形的特征,并能实现查询 分析 功能,为全面准确快速掌握战场的实时地形信息,提供了有力的工具。
6参考文献:
[1] 邬伦 刘瑜 马修军 韦中亚 田原,地理信息系统原理方法和应用 科学出版社,2002。
[2] 刘建永 王源等,战场环境信息学 理工大学工程兵工程学院 2002
[3] 王源,数字勘测技术 理工大学工程兵工程学院 2001
[4] 杨必胜 李清泉 史文中 三维GIS中多分辨率文理模型研究 中国图形图象学报
2003 3
[5] 潭兵 徐青 马东洋 用约束四叉树实现地形的实时多分辨率绘制 计算机辅助设计与图形学报 2003 3
[6] 马安鹏 Visual C++6 程序设计导学 清华大学出版社2002