基于VC_的OpenGL三维虚拟漫游的实现

  • 格式:pdf
  • 大小:405.63 KB
  • 文档页数:3

基于VC++的OpenGL三维虚拟漫游的实现
贵州大学电子科学与信息技术学院 崔忠伟
[摘 要]介绍了基于VisualC++编程环境及OpenGL图形标准的三维虚拟漫游系统的开发方法。详细讨论了如何
解决虚拟漫游的一些关键技术,如DEM地形的建模和可视化、地形模型和地物模型的集成方法、纹理映射和视点漫
游技术的实现等。
[关键词]VC++ OpenGL DEM地形 模型的集成 虚拟漫游

一、引言利用地理信息系统所采集的地质数据资料,通过地形和地物的建模,纹理映射,光照模型设定,投影模式选择等技术,可实现具有高度真实感的三维场景动态显示。目前该技术已在战场环境仿真、娱乐与3D游戏、场景漫游、道路选线、土地规划、地理信息系统等诸多领域得到了广泛的应用。例如,现在正在因特网上流行的虚拟漫游,用户只需要坐在计算机前,就可以参观各大城市、旅游景点、机场等,实现了人类足不出户而四处浏览的梦想。二、虚拟漫游的实现技术真正的三维显示是一个三维空间中的体模型,这种显示类似于人类居住的物理空间,可以进行真正的三维漫游操作。目前,由于技术和设备的限制,同时考虑到三维漫游系统的实用性,一般用2.5维显示来表示三维显示。2.5维显示以模拟在某一特定点通过眼睛进行观察,使得三维目标具有真实感,在计算机屏幕上所显示的三维场景就是利用这种方式,本文的设计目标就是利用计算机实现三维虚拟漫游。从技术角度来说,最大的难点就是建立模型、不同模型的集成和三维场景的实时显示。1、模型的建立及可视化地形模型(即地面)可以通过摄影测量技术、遥感测量技术和地图数字化等方式获取数据,然后将该数据保存在文件中便于以后调用。考虑到综合因素,本文同时采用格网模型(数据量小,但不适合显示复杂地形)和不规则三角网模型(数据量大,但适合显示复杂地形)来实现地面的可视化。地面与地物模型接壤的部分采用不规则三角网模型,其余部分采用格网模型。地物模型(树木、建筑物和湖泊等)可以利用3DStudioMax(Autodesk专门开发的三维制作软件)来建立。但是考虑到工作量和通用性,本来还是通过测量技术来获取地物模型的数据,为了使得地物(如建筑物)具有真实感,在测量数据的同时,可以将地物的外观拍摄成图片,最后通过OpenGL的纹理映射功能将图片显示在地物的表面。2、开发工具的选择三维漫游系统的开发平台是Windows2000,开发工具是OpenGL和VisualC++6.0。OpenGL是美国SGI公司推出的一个三维计算机图形和模型库,利用OpenGL可以创作出具有照片质量的、独立于窗口系统、操作系统和硬件平台的三维彩色图形和动画。OpenGL现已被认为是高性能图形和交互视景处理的标准。OpenGL的核心库有100多个用于3D图形操作的函数,主要负责对象外形描述、矩阵变换、光照效果处理、着色、反走样、融合纹理处理等和三维图形图像密切相关的事情。总之,在Windows操作系统下,利用OpenGL可以实现对图形图像的控制(如旋转、移动、改变视点等),而利用VC++6.0可以生成一个窗口,这个窗口将图形图像及对它们的操作显示在计算机屏幕上。
三、虚拟漫游的具体实现
1、DEM数据的处理
DEM数据的处理,主要有以下几个步骤完成:
(1)获取DEM数据
本文利用VC++的fscanf函数直接读取已有的DEM数
据(存放在*.dem文件中)。格网型DEM文件通常由三部分组
成:文件头、数据体和文件说明。1)文件头。它包括以下内容:文
件标识符、DEM四个角点坐标、原点坐标(左下点或左上点)、
DEM的大小、DEM的采样间距、DEM
的数据采集方式等。文件
头上还可保留一定字节数作为以后扩充之用。2)数据体。数据体
是DEM的核心,即所有DEM结点坐标的记录。仅记录每结点
的高程值Zij,结点的平面坐标已经隐含在数据的行、列号和采
集间距之中。3)文件说明。该部分放在DEM的说明信息,如
DEM采集的时间、精度指标以及其它有关信息。
(2)归一化DEM高程数据
归一化DEM高程数据的目的是保证生成的格网比较美
观,具体方法是:将每一个DEM离散点的值处理到所有离散点
的最大值。
(3)利用DEM生成格网
利用循环嵌套,遍历所有的DEM高程点,将每四个邻接的
点作为顶点,并根据这四个顶点画出四边形。
2、地形模型(DEM)和地形模型的集成
地面与地物模型接壤的部分采用不规则三角网,其余的地
形部分采用格网。本文采用的Lawson算法,其基本步骤是:
1)构造一个超级三角形,包含所有散点(地物与地面接壤的
点,以及地物最小外接矩形的边界点),放入三角形链表。
2)将点集中的散点依次插入,在三角形链表中找出其外接
圆包含插入点的三角形(称为该点的影响三角形),删除影响三
角形的公共边,将插入点同影响三角形的全部顶点连接起来,从
而完成一个点在Delaunay三角形链表中的插入。
3)根据优化准则对局部新形成的三角形进行优化。将形成
的三角形放入Delaunay三角形链表。
4)循环执行上述第2步,直到所有散点插入完毕。
其中,优化准则的基本做法如下:
1)将两个具有共同边的三角形合成一个多边形。
2)以最大空圆准则作检查,看其第四个顶点是否在三角形
的外接圆之内。
3)如果在,修正对角线即将对角线对调,即完成局部优化过
程的处理。
当完成集成后,地物底部与地面接壤的部分的图形如图
(1):
下图中,内部的空白表示地物的底部,而空白的外围就是

—551—

科技信息
计算机与网络

Delaunay
三角网。3、纹理的载入地形的纹理和建筑物外表面的纹理都可以用数码相机拍摄,然后利用OpenGL的纹理贴图功能,将这些纹理粘贴到地形和地物的表面,使它们更具真实感。其中,向地形添加纹理的具体代码如下:voidAddTextureToDem(GLenummode){……………………………i=0;for(n=0;n作为一个漫游系统,应当能够根据用户的各种交互操作作
出相应的场景漫游,对于普通配置的微机,主要交互工具是键盘
和鼠标,本来有两种漫游方式:利用键盘来实现手工漫游和利用
鼠标设置漫游路径实现自动漫游。
(1)利用键盘实现手工漫游
在OpenGL中,通过改变gluLookAt函数的参数,以改变
视点的坐标来实现漫游,按键盘的“↑”键,表示前进,按“↓”键
表示后退,“←”和“→”键分别表示逆时针和顺时针旋转。漫游的
原理如图(2),代码是gluLookAt(eyex,eyey,eyez,centerx,cen-
tery,centerz,0.0,0.0,1.0)。其中eyex=distance*sin(ang
),
eyey=distance*cos(ang),eyez表示视点的高度,根据求出的
eyex和eyey可以判断出视点所在格网的平面方程,将eyex

eyey带入平面方程即可以求出eyez值。变量eyex和eyey一直
位于视线方向的直线上。变量distance表示当前视点到坐标原
点的距离,例如,按键盘的“↑”键后,distance应该加上步长,步
长一般可以取格网边长的三分之一。centerx和centery表示圆
形上的某一个点的坐标,圆的半径R远远大于格网所组成的矩
形的任何一边的长度。

(2)利用鼠标设置漫游路径实现自动漫游
这种方式的漫游,要求在漫游前利用鼠标设置好漫游路径,
即用鼠标在DEM格网上画出一系列线段。当单击鼠标时,可以
确定线段的一个端点,这就需要利用OpenGL的鼠标拾取功
能,并且为每一个格网设置一个编号。当用鼠标设置完漫游路径
后,可以得到所有线段端点的坐标,然后,使用样条曲线对漫游
路径进行插值,将所有的插值点都存放到漫游路径链表中。自动
漫游时,利用VIEW类的定时器,实时计算视点坐标和目标点
坐标,使用指针遍历链表中的所有结点,指针指向的结点的坐标
作为视点坐标,下一个结点的坐标作为目标点坐标,从而实现实
时漫游。
四、结束语
本文在VC++6.0下,利用OpenGL三维图形库实现了一
个简单的三维漫游系统,运行结果如图(3),虽然场景比较简单,
而且有待进一步美化,但是利用测量数据和图片直接实现集成
和漫游,所以,简化了场景的绘制工作,具有一定的实际意义。

—552—

科技信息
计算机与网络