基于OpenGL的三维地形图显示方法和应用
来源:第三维度
作者:郭立波 (长江大学地球科学学院)
赵海燕 (北京联合大学继续教育学院)
王新海 (长江大学地球科学学院)
在三维绘图蓬勃发展的过程中 , 计算机公司推出了大量的三维绘图软件包。其中 SGI 公司推出的Open GL , 作为一个性能优越的图形应用程序设计界面 (API) 异军突起 , 取得了很大的成就。它以高图 1 OpenGL 进行地形显示的基本框架性能的交互式三维图形建模能力和易于编程开发 , 得到了 Microsoft , IBM , DEC, Sun ,HP 等大公司的认同。因此 , Open GL 已经成为一种三维图形开发标准 , 是从事三维图形开发工作的必要工具[1] 。
基于 Open GL 可以很方便地实现地形三维透 视投影变换 , 建立光照模型 , 以及消隐和裁剪 , 最终实现地形图的三维显示 (图 1) 。
图 1 OpenGL 进行地形显示的基本框架
1 地形模型的映射
地形模型的映射实际上是一个转化过程 ,是把数字高程模型转化成为 Open GL 的基本格式。目前数字高程模式的表达主要有 3 种 : 不规则三角网 ( TIN) , 规则格网 ( GRID) 和等值线。前面 2 种是应用最广泛的结构形式。但是这些结构形式Open GL 本身是不能识别的 , 所以首先要把 DEM 用 Open GL 原语描述出来 , 转化成 Open GL 可以识别的图形函数。
Open GL 本身提供了点、线、多边形等基本的建模原语 , 利用这些原语还可以把地形模型数据表示成点形的、线形的以及多边形的原语序列。三角形是最小的图形基元 , 基于三角形面片的各种几何算法最简单、最可靠 , 构成的系统性能最优。另外 , 由于 Open GL 只能够处理凸多边形 , 因此 , 选用三角形来构造地面模型[2] 。下面是对于不规则三角网 ( TIN) 表达的数据直接用 Open GL 原语的描述 :
glBejin ( GL1 TRIAN GL ES) ;
glVertex ( x1 , y1 , z1 ) ; glVertes ( x2 , y2 , z2 ) ; glVertes ( x3 , y3 , z3 ) ;
glEnd ( ) ;
2 三维真实感地形的生成
在 Open GL 环境下 , 经过一系列的变换以及光照处理 , 浓淡阴影处理 , 就可以生成具有真实感的三维地形。在用 Open GL 绘制三维地形模型和进行纹理映射前 , 需要设置相关的景观参数值。这些参数包括光源性质 (镜射光、漫射光和环境光) 、光源方位 (距离和方向) 、颜色模式 (索引或 RGBA) 、明暗处理方式 (平缓处理或平面处理) 、纹理映射方式等等。此外 , 还要设定视点位置和视线方向[3] 。
地形图是采用 DEM 数据生成的 , DEM 数据用一系列等间距的地形高程值来表示 , 代表一块方形网格地形 , 网格交叉点就是对应地面某点的高程值。各点的 X , Y 值可从方形区域的行列号和间距值中推算出来。遥感图像是对地面景象的一种真实记录 , 所含的信息量丰富、现势性好。因此 , 采用纹理映射算法将遥感图像映射到三维地形表面 , 将产生与实地一致的纹理特征。
在 Open GL 环境下遥感图像和数字地形相套合时 , 地形与遥感影像的配合是关键。为了获取较为逼真的视觉效果 , 配准方案可采取数字地形向遥感图像配准 , 通过控制点 , 建立匹配方案 , 将数字地形由大地坐标系转到影像坐标系中。另一配准方案是将遥感影像经重采样等处理获得和数字地形相应的新影像 , 此方案不足之处是重采样处理中颜色量化可能失真 , 影响最后的三维效果 , 但影像的生成速度较快。通常 , 为了避免纹理映射复杂的纹理坐标计算 , 提高纹理映射的计算速度和效率 , 直接采用经过微分纠正的正射影像作为纹理影像 , 地面坐标和纹理坐标间的对应关系变得十分简单。Open GL 进行纹理映射的基本步骤是 : 定义纹理 , 纹理控制 , 说明纹理的隐映射方式和定义三维模型顶点的纹理坐标与几何坐标 , 绘制场景。
此外 , 三维地形要适当的显示出来 , 还要进行投影变换和视口变换。投影变换是生成三维模型的重要基础 , 一般分为透 视投影和正射投影 , 投影的方式选择显示的内容和用途。视口是指计算机屏幕中的矩形区域 , 视口变换的目的是将三维空间坐标映射为计算机屏幕上的二维平面坐标[2] 。
在 VC 编辑器下引用 Open GL 函数库需要进行以下设置 : 进入 Project 菜单 , 选择 Setting 项 , 弹出Project Setting 对话框 , 选择 Link 项 , 在 Libaray 栏目中加入 Open GL 提供的函数库 : “opengl321libglu321lib glaux1lib”。注意 : 在执行时 , Windows 的 system 目录下要包含 opengl321 dll 和 glu321 dll 两个动态连接库。
经过上面一系列的处理和变换 , 一个有真实感的三维地形景观图便显示出来 , 如图 2 所示。
图 2 基于 OpenGL 绘制的三维地形图架
3 结 论
用 Open GL 建立三维地形模型的基本过程 , 包括了地形数据的读取和模型的建立以及地貌图片的输入和地形模型的显示 , 若需建立更为光滑的三维地形 , 还需考虑计算顶点和三角面的法向矢量。另外 , 还可加入飞行、旋转等控制功能 , 使得三维地形图的显示得到更大的应用。
[参考文献]
[1] 白燕斌 , 史惠康1 OpenGL 三维图形库编程指南 [M] 1 北京 : 机械工业出版社 , 19981
[2] 刘敏莺 , 黄文骞1 基于 OpenGL 的地形三维可视化 [J ] 1 海洋测绘 , 2002 , 22 (2) : 26~291
[3] 李芳玉 , 陈传波 , 钟宝荣1 基于 OpenGL 的地层模型三维可视化图形显示方法 [J ] 1 江汉石油学院学报 , 2001 , 23 (1) : 20~211