三维地形漫游系统的OPENGL实现
基于OpenGL的三维模拟地形的实现
法 向量 N=N+ 2N+ 44 r( lN + 3N ) 。 /
N
使用 D M( 字 高程 模 型 ) 式 的地 形 高度 数 据 , E 数 格 即 按矩形 网格采样 的地形 高度数值[ 1 1 。
OeG p n L是 S I 司开发 的 。可独 立于操 作 系统 G 公 和硬 件环境 的三维 图形库 。 强大 的图形 操作 功能 和跨
面是最 小 的图形基元 . 于三角 面 的各 种几何 算法 最 基
简单 、 可靠 , 最 构成 的系统性 能最优 。又 由于 O e G pn L 只 能处理 凸多边形 . 因此常常选 用三 角面构 造地 形模 型。 三角 形的 明亮 程度 除取决 于光源 和明暗处理 方式
代 计 成是 三维地形 网格点 的高程值 。 而三维地 形 的颜色也 算 可 以用原始记 录 的相 关函数来 表示 ,采用 纹理 映射 。 机
环并传递 这些 多边形 。 那速 度是很 慢 的。 因此为 了加 快 显 示速 度 , 以使 用 空间 分割 , 可 只对 摄像 机 漫游 时 看见 的多边形 所在 区域进行作 画 。 在调用 显示 区域之 前 , 过旋 转 、 移 、 照 、 质 的设 定来 实 现需要 的 通 平 光 材
维普资讯
实 践 与经 验
蒋 亚 军
( 湖南科 技学 院计算 机与信 息科 学系 , 永州 4 5 0 ) 20 6
摘 要 :在 Wid ws 台上 。 用 Vi a C+ no 平 利 s l +集成 环境 , u 结合 Op n L图形 函数库构 建三 雏模拟 地形 , eG
总
第
二
外 , 受到点 与面 的法 向量 的影响 。一般 点 的法 向量 还 取 值为其 周 围法 向量 的均值四 如 图 1 。 所示 , 顶点 P的
基于openGL的三维地形场景的生成
基于openGL的三维地形场景的生成1、背景介绍 (3)2、openGL中地形动态显示 (3)3、程序的主要功能 (4)3.1 三维地形的生成 (4)3.2 天空盒的生成 (8)3.3 树的生成 (9)3.4 3DS模型的读入 (11)3.5 键盘交互实现漫游 (11)3.6汉字的显示 (12)4、总结 (13)4.1 项目总结 (13)4.2 小组成员分工 (14)参考文献 (15)1、背景介绍地形是自然界最复杂的景物之一,对其三维显示和漫游一直是计算机图形学、地理信息系统、数字摄影测量和遥感研究的热点之一。
但由于受地形结构复杂,数据量大等条件的制约,要实时模拟具有真实感的大范围三维地形,最大的难点是,如何精简并有效地组织地形数据,以达到高速度、高精确度的可视化目的。
openGL是开放式图形工业标准,是绘制高度真实感三维图形,实现交互式视景仿真和虚拟现实的高性能开发软件包。
利用openGL进行地形动态显示的基本框架如图1所示:图1 openGL地形现实基本框架2、openGL中地形动态显示利用openGL进行地形的三维可视化,包含以下几个步骤:(1)openG L模型映射:利用openGL 制作三维立体地形图,就要将数字地面模型格网用openGL提供的点,线,多边形等建模原语描述为openGL图形函数所识别。
(2)遥感图像与地形融合:openGL提供两类纹理:一类纹理图像的大小必须是几何级数;另一类Mipmaps 纹理可为任意大小。
在Mipmaps纹理映射的基础上,可将遥感图像与地形融合。
在遥感影像与数字地形相套合时,地形与遥感影像的配准是关键。
为了获取更好的视觉效果,配准方案可采取数字地形向遥感图像配准,通过控制点,建立匹配方程,将数字地形由大地坐标系转到影像坐标系中。
(3)观察路线设置与视点计算:为了达到三维交互控制的目的,可在正射的遥感数字影像上任意选择观察路线,对路线上的采样点记录其平面坐标,根据采样点的平面位置从DEM 中采用一定的插值方法,确定观察路线上采样点的高程和平面坐标,当采用Fly-through方式观察时,观察路线上每个视点的高度可由观察点地面高程加上飞行高度确定当采用walk-through方式观察时观察路线上每个视点的高度可由观察点地面高程加上身高来确定(4)实时显示Opengl 提供了双缓存技术,通过它可实现地形实时动态显示。
电子论文-基于OpenGL技术的实时漫游系统研究及实现
基于OpenG L技术的实时漫游系统研究及实现僧德文1,2,王红霞1(1.浙江水利水电专科学校,浙江杭州 310018;2.北京科技大学土木与环境工程学院,北京 100083)摘 要:结合水利行业的需求和当前可行的技术,讨论了基于桌面系统及通用平台开发实时漫游系统的技术关键和难点,给出了模型建立、转换及调用方法,并利用OpenG L技术基于Visual C++6.0集成开发环境开发了一个实用的实时漫游系统.关键词:水利工程;漫游;数据模型;开放的图形程序接口中图分类号:TP391 文献标识码:A 文章编号:1008-536X(2007)022*******Study and Implementation of Real T ime Navigation System Ba sed on Open G LS ENG De2wen1,2,WANG Hong2xia1(1.Zhejiang Water C onservancy and Hydropower C ollege,Hangzhou310018,China;2.Civil and Environmental Engineering School,Beijing University of Science and T echnology,Beijing100083,China)Abstract:C ombined with the needs of water conservancy and feasible technology,this paper discusses the techniques and the difficulties in the development of a real time desktop navigation system based on comm on developing platform.The methods of construction,transi2 tion and usage of the visualized3D m odels are provided.A practical system is implemented by OpenG L on the Visual C++6.0inte2 grated development environment.K ey w ords:water conservancy w orks;navigation;data m odel;OpenG L0 引 言现实世界是在三维空间延伸的,过去人们由于受认知能力、技术手段和硬件水平的限制,对现实世界的仿真基本上是二维形式.然而,二维仿真是一种抽象和简化,很多情况下不能有效地表达现实世界中的物体和现象,在某种程度上给人们的思维带来了一定的局限.近年来,可视化仿真技术的发展和硬件能力的提高,为人们更好地模拟和描述现实世界提供了方便[1].OpenG L是SGI公司开发的一套高性能图形处理系统,它以高性能的交互式三维图形建模能力和易于编程开发,得到了Micros oft、I BM、DEC、S UN、HP等大公司的认同.目前它已经成为开放的国际图形标准[2].本研究结合水利工程特点,探讨基于PC机平台,在Visu2收稿日期:2006212205基金项目:浙江省教育厅科研立项项目(21205);浙江省水利厅科技项目(RC0605);浙江省高校青年教师资助计划项目(21223);浙江省教育厅科研立项项目(20060001)作者简介:僧德文(1977-),男,福建漳州人,博士/博士后研究人员,主要研究方向为地学可视化、系统建模与仿真.al C++6.0集成开发环境下利用OpenG L技术开发三维实时漫游系统的实现方法.1 三维仿真场景的构造场景(Scene)是系统所有可视化对象的集合.一般来讲这些对象的形状可以通过点、线、面(多边形)进行拟合,对象的真实感则通过对三维物体进行裁剪、反走样、消隐并赋予阴影、光照、纹理和材质等属性来表现.三维空间虚拟场景的构造一般要经过以下步骤[3]:(1)几何构模 就是对整个场景模型进行几何重建,主要运用数学方法建立所需场景的几何描述,并将它们输入计算机.这部分工作可由三维立体造型或曲面造型系统来完成.(2)物理构模 所谓物理构模就是进行颜色、光照、材质和纹理等的处理,最终将几何图素及其视觉特征转换为可供显示的图形或图像.(3)场景设置 在对三维场景进行渲染前,需要设置相关的场景参数值.这些参数一般包括光源性质(镜射光、漫射光和环境光)、光源方位(距离和方向)、明暗处理方式(平滑处理或平面处理)、纹理映射方式 第19卷 第2期浙江水利水电专科学校学报V ol.19 N o.2 2007年6月J.Zhejiang Wat.C ons&Hydr.C ollege Jun.2007等.除此之外还需设定视点位置和视线方向.(4)模型渲染 主要通过投影变换将三维空间场景转换为二维计算机屏幕上的图像.虚拟场景中一般都采用透视投影,以更好地模拟真实世界的情况.2 虚拟漫游系统框架通过可视化技术构造出三维虚拟场景后,系统必须提供一定的人机交互功能,使用户能够更好的理解和认识场景中的对象以及对象间的关系.在所有人机交互手段中,交互式漫游是最重要的一种虚拟观测手段[4].本研究设计了的虚拟漫游系统框架(见图1).图1 三维场景虚拟漫游系统框架整个系统由用户的交互输入控制场景的绘制与显示.用户的输入主要指键盘、鼠标等输入设备的输入,经输入解释后将变成一系列的控制命令,进行场景数据的管理、几何模型的加载、物体光照、材质属性、不透明度以及视点方向、位置的设置等.之后,模型渲染模块能够根据用户的输入进行场景的实时绘制与动态显示.在这个过程中,还能够根据视点与物体之间的距离进行碰撞检测.3 漫游功能的实现三维场景漫游中,观察者可以通过鼠标或键盘来控制视点的位置、视向和参考方向.当视点的位置、视向和参考方向发生改变时,场景中的物体相对于观察者的方位也发生了改变,从而产生了“动感”.系统中,视点即为人眼的“化身”,其功能与现实世界的照相机类似,视线方向可由参考点位置确定(参考点位置减去视点位置即可得到视线方向的向量).漫游过程的实质就是通过不断移动视点或改变视线方向而产生三维动画的过程.3.1 键盘漫游命令的处理键盘漫游就是通过操纵键盘实现用户在三维场景中的任意漫游.通过键盘漫游用户可以灵活、准确地对场景进行全方位的观察.键盘漫游的过程就是一个根据键盘命令连续不断地改变视点位置或视线方向并渲染场景的过程.通常,键盘漫游命令包括左转、右转、前进、后退、上升、下降、仰视、俯视、左移、右移等.本系统中使用的是Z 轴朝上的左手坐标系,Z 值代表场景的高度,响应左转、右转、仰视、俯视命令时视点均保持不变,只改变视线方向.对左转、右转视线分别绕Z 轴逆、顺时针旋转一定角度,对仰视、俯视则增、减视线与XY 平面的夹角(仰角);前进、后退时将视点分别沿视线方向、视线反方向移动一定距离(视行进速度而定);上升、下降时则只增、减视点高度值(Z 坐标值);左移、右移时只将视点进行平移,视线方向则保持不变.按照这种响应方法,通过空间向量分解运算,即可计算出新的视点和参考点坐标.例如当响应前进(后退)命令时视点与参考点坐标的计算公式为:(1)视点坐标(speed 表示行进速度,anglez 表示视线绕Z 轴旋转的角度)vEyePt.x =vEyePt.x +(-)speed ×sin (anglez );vEyePt.y =vEyePt.y +(-)speed ×cos (anglez );vEyePt.z =vEyePt.z ;(2)参考点坐标(updown -angle 表示视线与XY 平面的夹角即仰角)v LookPt.x =vEyePt.x +150×sin (anglez );v LookPt.y =vEyePt.y +150×cos (anglez );v LookPt.z =vEyePt.z +150×sin (updown -angle );上式中常数150是为了使视点和参考点之间保持一定距离而设置的.3.2 记录漫游路径通过键盘操作实现对三维场景实时漫游虽然灵活、方便,但用户不断地按下键盘显得有些烦琐.特别是当需要重复前一漫游过程时更是如此.为此,系统可设计一种对键盘漫游过程进行记录的功能(记录漫游路径).所记录的键盘漫游过程称为历史记录,通过重新播放历史记录便可实现对键盘漫游过程的再现[5].记录键盘漫游过程的处理如下:首先记录下初始的视点、观察点、视线绕Z 轴旋转的角度、仰角等,然后对每种连续的键盘操作命令按“动作类型,执行次数”的格式进行记录,其中动作类型为上述的10种键盘漫游命令之一,目的就是将键盘漫游的整个过程解释为漫游命令序列.最后以一个相反的过程播放历史记录,即从文件中读取上述初始化参数并按照这些参 64 浙江水利水电专科学校学报第19卷数对系统进行设置,而后读取键盘操作命令的序列并调用相应的命令处理函数进行处理.4 系统优化要达到真实模拟环境系统,对各类复杂的自然以及人造工程的真实模拟,需要借助于计算机真实感图形绘制技术才能完成,主要包括反走样、消隐、光照、阴影、材质纹理、融合、雾化等技术.图形真实感绘制直接影响到场景的真实性及其可视化效果,然而,真实感与实时性是相互对立的两个问题,很多情况下要在两者之间取得一个平衡[5].本系统的优化着重于降低场景的复杂度在编程时采取了以下措施:(1)对象的重复引用 场景中经常需要多个相同的虚拟物体,如相同的树木等,对于这类需重复出现的物体,采用了重复引用的方法,再通过几何变换得到其他位置的物体,该方法大大节省了内存,提高了动态显示的速度.(2)可见消隐 由于屏幕只显示观察者的视野,即使系统的整个仿真场景都被绘制,落在观察者视野之外的物体也是不可见的.因此,只要绘制观察者当前所能看见的场景便能达到要求.当观察者仅能看到场景的很少一部分时,由于系统只显示相应部分的场景,从而大大减少了所需显示的物体的数目.5 结 论作者在最近开发的水利工程三维可视化仿真系统中,运用前面介绍的方法方便而高效地实现了水利工程三维场景的交互虚拟漫游.系统漫游速度快、画面流畅、真实感强,实践效果良好.图2体现了用户在交互漫游过程中,从不同视点位置和视线方向观察的仿真场景三维效果.进一步的研究工作正在进行之中,目标是将各种人造工程实体集成显示到仿真场景中,并提供其它方式的交互漫游功能.图2 三维仿真场景虚拟漫游系统参考文献:[1] 汪成为,高 文,王行仁.灵境(虚拟现实)技术的理论、实现及应用[M].北京:清华大学出版社,1997.[2] 僧德文,李仲学,李春民.基于OpenG L 的真实感图形绘制技术研究与实现[J ].计算机应用研究,2005,22(3):173-175.[3] 僧德文,李仲学,李春民,等.地矿三维场景虚拟漫游技术及其应用[J ].东北大学学报,2004,25(S2):35-37.[4] 尚建嘎,刘修国,郑 坤.三维场景交互漫游的研究与实现[J ].计算机工程,2003,29(2):61-63.[5] 彭群生,鲍虎军,金小刚.计算机真实感图形的算法基础[M].北京:科学出版社,1999. 第2期僧德文等.基于OpenG L 技术的实时漫游系统研究及实现65 。
基于OpenGL的三维场景多视角实时漫游与观察
v i CC mea: ttViw(o ta CV co3 v xs od a r: ae e f a , e tr A i Ro l ) {GL tx fMR; mar l i6 V co3 oae txa A i,MR : e trDR ttMar (,v xs i )
Co p tr Er o 0 8 m u e a N .1 2 0 1
基于 O e L p n 的三维场景多视角实时漫游与观察 G
傅 由甲
( 工 学院计 算机科 学与工 程 学院 ,重庆 4051 重庆 000
摘 要 :主要 介 绍 三 维场 景 中景 内和 景 外摄 影机 控 制 的原 理 和 实现 方 法 。 方 法克 服 了 O eGL场 景观 察 缺 乏 交互 功 能 该 pn
_
CVeco 3 m v Ve t r I 摄 影 机 向 上 方 位 向 量 tr Up co ; I
_
Cv c or e t 3 m v t f ; / 影 机 侧 向 向 量 S r e /摄 a
_
l f t oa m
_
f p e ;/摄影机步速 大小 Sed , flv t n /摄影机的仰 角(Z平 面)范围 01 0 Ee ai ; / o Y , -8
1 Ca r 的定义 mea类
C me a r a类变量和主要 函数定义如下 :
CCamem
{ p bc u l: i
CVe t 3 cor m v o i n / 点 位 置 P s i ;/视 t o
_
R t e i (n l . _ Srf) /以 v t f oa Ve a g Z m v t e; / S r e为轴旋转 t w e a a
基于openGL的三维地形场景的生成
基于openGL的三维地形场景的生成1、背景介绍 (3)2、openGL中地形动态显示 (3)3、程序的主要功能 (4)3.1 三维地形的生成 (4)3.2 天空盒的生成 (8)3.3 树的生成 (9)3.4 3DS模型的读入 (11)3.5 键盘交互实现漫游 (11)3.6汉字的显示 (12)4、总结 (13)4.1 项目总结 (13)4.2 小组成员分工 (14)参考文献 (15)1、背景介绍地形是自然界最复杂的景物之一,对其三维显示和漫游一直是计算机图形学、地理信息系统、数字摄影测量和遥感研究的热点之一。
但由于受地形结构复杂,数据量大等条件的制约,要实时模拟具有真实感的大范围三维地形,最大的难点是,如何精简并有效地组织地形数据,以达到高速度、高精确度的可视化目的。
openGL是开放式图形工业标准,是绘制高度真实感三维图形,实现交互式视景仿真和虚拟现实的高性能开发软件包。
利用openGL进行地形动态显示的基本框架如图1所示:图1 openGL地形现实基本框架2、openGL中地形动态显示利用openGL进行地形的三维可视化,包含以下几个步骤:(1)openG L模型映射:利用openGL 制作三维立体地形图,就要将数字地面模型格网用openGL提供的点,线,多边形等建模原语描述为openGL图形函数所识别。
(2)遥感图像与地形融合:openGL提供两类纹理:一类纹理图像的大小必须是几何级数;另一类Mipmaps 纹理可为任意大小。
在Mipmaps纹理映射的基础上,可将遥感图像与地形融合。
在遥感影像与数字地形相套合时,地形与遥感影像的配准是关键。
为了获取更好的视觉效果,配准方案可采取数字地形向遥感图像配准,通过控制点,建立匹配方程,将数字地形由大地坐标系转到影像坐标系中。
(3)观察路线设置与视点计算:为了达到三维交互控制的目的,可在正射的遥感数字影像上任意选择观察路线,对路线上的采样点记录其平面坐标,根据采样点的平面位置从DEM 中采用一定的插值方法,确定观察路线上采样点的高程和平面坐标,当采用Fly-through方式观察时,观察路线上每个视点的高度可由观察点地面高程加上飞行高度确定当采用walk-through方式观察时观察路线上每个视点的高度可由观察点地面高程加上身高来确定(4)实时显示Opengl 提供了双缓存技术,通过它可实现地形实时动态显示。
OpenGL绘图 简单3D空间 3D漫游的实现
主要参考了NEHE的Opengl教程所有物体都是直接用代码画的,没有经过建模。
主要部分有详细注释。
适合刚接触图形学或OpenGL的新手。
老鸟勿来。
部分效果图:全部代码,VC6.0环境:/*主要实现简单的3D空间搭建,添加物体旋转效果,光照,纹理映射,3D漫游,雾化效果*/#include <windows.h>// Header File For Windows#include <math.h>// Math Library Header File#include <stdio.h>// Header File For Standard Input/Output#include <gl\gl.h>// Header File For The OpenGL32 Library#include <gl\glu.h>// Header File For The GLu32 Library#include <gl\glaux.h>// Header File For The Glaux LibraryHDC hDC=NULL;// Private GDI Device ContextHGLRC hRC=NULL;// Permanent Rendering ContextHWND hWnd=NULL;// Holds Our Window HandleHINSTANCE hInstance;// Holds The Instance Of The Applicationbool keys[256];// Array Used For The Keyboard Routinebool active=TRUE;// Window Active Flag Set To TRUE By Defaultbool fullscreen=TRUE;// Fullscreen Flag Set To Fullscreen Mode By Defaultbool blend;// Blending ON/OFFbool bp;// B Pressed?bool fp;// F Pressed?bool gp;// G Pressed?bool light;bool lp;GLuint fogMode[]= { GL_EXP, GL_EXP2, GL_LINEAR };// 雾气的三种模式GLuint fogfilter = 0;// Which Fog Mode To UseGLfloat fogColor[4] = {0.5f,0.5f,0.5f,1.0f};// Fog ColorGLfloat walkbias = 0;GLfloat walkbiasangle = 0;GLfloat lookupdown = 0.0f;float x;float z;GLfloat eye[]={0.0f,0.0f,0.0f};GLfloat lookat[]={0.0f,0.0f,0.0f};GLfloat angle=-90.0;GLfloat speed=0.5;float PI=3.14159f;GLuint filter;// Which Filter To UseGLuint texture[7];// 储存7个纹理LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);// Declaration For WndProcAUX_RGBImageRec *LoadBMP(char *Filename) // 加载一个位图{FILE *File=NULL; // File Handleif (!Filename) // Make Sure A Filename Was Given{return NULL; // If Not Return NULL }File=fopen(Filename,"r"); // Check To See If The File Existsif (File) // Does The File Exist?{fclose(File); // Close The Handlereturn auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer}return NULL; // If Load Failed Return NULL }int LoadGLTextures() // 加载位图并将其转化为纹理{int Status=FALSE; // Status IndicatorAUX_RGBImageRec *TextureImage[1]; // Create Storage Space For The Texturememset(TextureImage,0,sizeof(void *)*1); // Set The Pointer To NULLif (TextureImage[0]=LoadBMP("Data/zhou.bmp")) //指定风扇轴的纹理{Status=TRUE; // Set The Status To TRUEglGenTextures(1, &texture[0]);glBindTexture(GL_TEXTURE_2D,texture[0]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if(TextureImage[0]=LoadBMP("Data/yepian.bmp")) //指定风扇叶的纹理{Status=TRUE;glGenTextures(1,&texture[1]);glBindTexture(GL_TEXTURE_2D,texture[1]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if(TextureImage[0]=LoadBMP("Data/qiang.bmp")) //指定左右墙壁的纹理{Status=TRUE;glGenTextures(1,&texture[2]);glBindTexture(GL_TEXTURE_2D,texture[2]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if(TextureImage[0]=LoadBMP("Data/diban.bmp")) //指定地板的纹理{Status=TRUE;glGenTextures(1,&texture[3]);glBindTexture(GL_TEXTURE_2D,texture[3]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if(TextureImage[0]=LoadBMP("Data/tianhuaban.bmp")) //指定天花板的纹理{Status=TRUE;glGenTextures(1,&texture[4]);glBindTexture(GL_TEXTURE_2D,texture[4]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if(TextureImage[0]=LoadBMP("Data/qiang2.bmp")) //指定对面墙的纹理{Status=TRUE;glGenTextures(1,&texture[5]);glBindTexture(GL_TEXTURE_2D,texture[5]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if(TextureImage[0]=LoadBMP("Data/shafa.bmp")) //指定沙发的纹理{Status=TRUE;glGenTextures(1,&texture[6]);glBindTexture(GL_TEXTURE_2D,texture[6]);glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_ UNSIGNED_BYTE,TextureImage[0]->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}if (TextureImage[0]) // If Texture Exists{if (TextureImage[0]->data) // If Texture Image Exists{free(TextureImage[0]->data); // Free The Texture Image Memory}free(TextureImage[0]); // Free The Image Structure }return Status; // Return The Status}GLvoid ReSizeGLScene(GLsizei width, GLsizei height)// Resize And Initialize The GLWindow{if (height==0)// Prevent A Divide By Zero By {height=1;// Making Height Equal One }glViewport(0,0,width,height);// Reset The Current ViewportglMatrixMode(GL_PROJECTION);// Select The Projection Matrix glLoadIdentity();// Reset The Projection Matrix// Calculate The Aspect Ratio Of The WindowgluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,120.0f);glMatrixMode(GL_MODELVIEW);// Select The Modelview MatrixglLoadIdentity();// Reset The Modelview Matrix }//设置0—6号光源位置GLfloat sun_light_position0[] = {0.0f, -5.0f, 2.0f, 1.0f};GLfloat sun_light_position1[] = {0.0f, 7.0f, 2.0f, 1.0f};GLfloat sun_light_position2[] = {-10.0f, -5.0f, -30.0f, 1.0f};GLfloat sun_light_position3[] = {10.0f, 7.0f, -30.0f, 1.0f};GLfloat sun_light_position4[] = {10.0f, 5.0f, -50.0f, 1.0f};GLfloat sun_light_position5[] = {-10.0f, -5.0f, -50.0f, 1.0f};GLfloat sun_light_ambient[] = {0.5f, 0.5f, 0.5f, 1.0f}; //环境光GLfloat sun_light_diffuse[] = {1.0f, 1.0f, 1.0f, 1.0f}; //漫射光GLfloat sun_light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f}; //反射光int InitGL(GLvoid)// 开始对OpenGL进行所有的设置{if (!LoadGLTextures())// Jump To Texture Loading Routine{return FALSE;// If Texture Didn't Load Return FALSE}glEnable(GL_TEXTURE_2D);// 开启纹理映射glBlendFunc(GL_SRC_ALPHA,GL_ONE);// Set The Blending Function For TranslucencyglClearColor(0.0f, 0.0f, 0.0f, 0.0f);// 清理背景颜色为黑色glClearDepth(1.0);// 开启清理深度缓存glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); //透视修正glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position0); //0号光源glLightfv(GL_LIGHT0, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);glLightfv(GL_LIGHT1, GL_POSITION, sun_light_position1); //1号光源glLightfv(GL_LIGHT1, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT1, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT1, GL_SPECULAR, sun_light_specular);glLightfv(GL_LIGHT2, GL_POSITION, sun_light_position2); //2号光源glLightfv(GL_LIGHT2, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT2, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT2, GL_SPECULAR, sun_light_specular);glLightfv(GL_LIGHT3, GL_POSITION, sun_light_position3); //3号光源glLightfv(GL_LIGHT3, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT3, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT3, GL_SPECULAR, sun_light_specular);glLightfv(GL_LIGHT4, GL_POSITION, sun_light_position4); //4号光源glLightfv(GL_LIGHT4, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT4, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT4, GL_SPECULAR, sun_light_specular);glLightfv(GL_LIGHT5, GL_POSITION, sun_light_position5); //5号光源glLightfv(GL_LIGHT5, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT5, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT5, GL_SPECULAR, sun_light_specular);glEnable(GL_LIGHTING); //启用光源glEnable(GL_LIGHT0); //启用0号光源glEnable(GL_LIGHT1); //启用1号光源glEnable(GL_LIGHT2);glEnable(GL_LIGHT3);glEnable(GL_LIGHT4);glEnable(GL_LIGHT5);glFogi(GL_FOG_MODE, fogMode[fogfilter]);// Fog ModeglFogfv(GL_FOG_COLOR, fogColor);// Set Fog ColorglFogf(GL_FOG_DENSITY, 0.1f);// 雾气的浓度glHint(GL_FOG_HINT, GL_DONT_CARE);// 系统如何计算雾气glFogf(GL_FOG_START, -10.0f);// 雾气的开始位置glFogf(GL_FOG_END, -58.0f);// 雾气的结束位置glEnable(GL_FOG);return TRUE;// Initialization Went OK}void DrawGLfengshanzhou() //画一个四边形作为风扇轴{glBindTexture(GL_TEXTURE_2D, texture[0]); //绑定0号纹理,即风扇轴的纹理glBegin(GL_QUADS); //画四边形glNormal3f( 0.0f, 0.0f, 1.0f); //设置法向量glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, -2.5f, 0.0f); //纹理和四边形左下坐标glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.1f, -2.5f, 0.0f); //纹理和四边形右下坐标glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.1f, 2.5f, 0.0f); //纹理和四边形右上坐标glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.1f, 2.5f, 0.0f); //纹理和四边形左上坐标glEnd();}void DrawGLfengshanye() //画一个四边形作为风扇叶片{glBindTexture(GL_TEXTURE_2D, texture[1]); //绑定1号纹理,即叶片的纹理glBegin(GL_QUADS);glNormal3f(0.0f,1.0f,0.0f);glTexCoord2f(0.0f, 0.0f);glVertex3f( 4.0f, 0.0f, 1.0f);glTexCoord2f(1.0f, 0.0f);glVertex3f(-4.0f, 0.0f, 1.0f);glTexCoord2f(1.0f, 1.0f);glVertex3f(-4.0f, 0.0f, -1.0f);glTexCoord2f(0.0f, 1.0f);glVertex3f( 4.0f, 0.0f, -1.0f);glEnd();}void DrawGLfengshan(GLfloat x) //画风扇,由柱和叶片组合而成,有一个浮点型参数,代表旋转增量{glPushMatrix();glTranslatef(0.0,2.5f,0.0); //轴长5.0,开始在中心原点,所以先向上平移2.5DrawGLfengshanzhou(); //画风扇轴glPopMatrix();glPushMatrix();glRotatef(x,0.0f,1.0f,0.0f); //使风扇叶片绕Y轴旋转,x表示旋转增量glPushMatrix();glTranslatef(4.0f,0.0f,0.0f); //风扇叶长8.0,开始在中心原点,所以先向右平移4.0DrawGLfengshanye(); //画第一个叶片glPopMatrix();glPushMatrix();glRotatef(120,0.0f,1.0f,0.0f); //旋转120度glTranslatef(4.0f,0.0f,0.0f); //注意:编码时变换的顺序和实际变换的顺序刚好相反。
基于OpenGL的三维立体校园地图系统关键技术的研究与实现
分类号TP 学校代码10590 U D C密 级公开深圳大学硕士学位论文基于OpenGL的三维立体校园地图系统关键技术的研究与实现刘志荣学科门类工学专业名称计算机应用技术学院(系、所)信息工程学院指导教师黄培之教授基于OpenGL的三维立体校园地图系统关键技术的研究与实现摘 要目前传统的印刷地图和平面电子地图主要表现出二维的地理空间信息,而用户则越来越多地需要三维地图可视化来观察、分析和处理各种相关的三维问题,二维平面地图无法体现三维空间信息,具有很大的局限性。
近年来,随着计算机图形、图像学理论及计算机软、硬件技术的迅速发展,使得二维地图信息无法满足当今实际需要的问题得到解决成为可能,这就是计算机三维立体地图需要研究的目的所在。
计算机三维立体图像显示技术,是虚拟现实(VR)的一个重要分支,并且应用到建筑、旅游、游戏、航空航天、医学等众多方面,自从上个世纪八十年代以来就备受人们的关注,而且取得了相当好的成果。
计算机三维立体地图的研究包括许多的学科知识,包括地理信息、计算机图形学、计算机数字图像学、虚拟现实、计算机数据库、计算机编程等相关的学科。
本文首先对OpenGL的三维图形显示技术几个关键技术进行了研究,包括OpenGL图形的绘制、OpenGL的颜色与纹理映射和OpenGL的三维变换等技术。
然后研究了采用3ds Max建模工具对建筑物进行建模,并用OpenGL技术进行三维重建,同时还对三维立体校园地图的其它构成要素进行了研究,包括地图地形的建立、真实感天空的绘制、平面树木在三维空间中的动态显示以及粒子系统在三维景观喷泉中的应用等。
从研究得知三维立体地图并不是二维平面地图的简单扩展,还要从三维模型数据、空间关系、显示技术和对它的操作等方面进行系统的研究。
在基于三维立体技术研究的同时,本文还以深圳大学校园为例,对三维立体地图的地形数据的获取、建立和显示,建筑物模型的建模、转换及可视化,自然界景观的模拟等相关技术进行了研究和系统实现,该系统是基于OpenGL的图形显示技术,并借助3ds Max软件工具进行建模,采用面向对象编程技术在Microsoft Visual C++ 6.0下实现。
基于OPENGL的三维地形的实现
图 3 剔除后的部分 上面对四叉树的剔除的过程进行了介绍,可以看到,相 当大的领域可以一次完成对视景体的判定及剔除。不使用四 叉树直接对视景体进行剔出的话,所有节点都必须进行视景 体的判定,利用四叉树的特点可以一次完成相当大领域的剔 除操作,这也是地形处理时使用四叉树的理由。 3.LOD LOD 就是分阶段调整网格建模数据的精密度,可以分为 静态 LOD 和动态 LOD。 静态 LOD 的特点就是在最初就确定的网格的精密度,它 的优点在于运算简单速度快但是需要分几个阶段,存储器严 重浪费,距离不同,网格的阶段急剧变化,很容易出现这样 现象。动态 LOD 技术则可以解决走样现象。 动态 LOD 的技术是根据摄像机与物体的距离实时调整 网格精密度,该方法一般可以分为网格分割技巧和网格精简 技巧,其优点在于可以自然生成 LOD,不会出现走样现象, 也不会浪费存储器,但是网格分割和网格精简,需要增加运 算量,速度相对有所减慢。地形处理中常用的是动态 LOD, 由于我们需要在画面上对地形建筑物等进行实时绘制,尽管 在一定程度上降低了的质量、渲染速度有了很大提高;仔细 观察一下 LOD 分割形成的阶段;可以发现于四叉树子节点分 割十分相似;由于我们使用了四叉树,也就有了可以相当简 便的使用 LOD 的方法下图表现了摄像机和各个节点的中点 距离不同时得子节点分割关系,与摄像机距离远的节点不进 行之子节点的渲染,只是在各自阶段进行渲染,相对来讲与 摄像机距离越近,就越需要对下层子节点进行渲染。
[2] (韩)金荣俊.3D 游戏编程.[M].北京:电子工业出版 社.2006.
可以防止龟裂的产生,需要按照上下左右四个方向在 LOD 阶
段不同的所以节点添加不同的三角形。 三、性能对比和总结
1.性能对比 (配置:显卡:ATI RADEON 7000;
基于OpenGL的虚拟漫游系统研究与实现
研生名 呜够 究签:
时 : D年 了 1 间 夕 月 日
关于学位论文使用授权的说明
本人完全 了解新疆农业大学有关保 留、使用学位论文的规定,即:新 疆农业大学有权保留并向国家有关部门或机构送交论文的复 印 件和 电 子文 档, 以 可 采用影 印、缩 印或扫描等复制手段保存 、汇编学位论文,允许论 文被查阅和借 阅。本人授权新疆农业大学将学位论文的全部或部分 内 容编 入有关数据库进行检索 ,可以公布 ( 包括刊登)论文的全部或部分内容。
信息处理的主要工具,成为人类与信息空间交流的主要通道。而在这其中,人机交互的界面是一个
主 障 从 算 明 现 人 面 还是 要的 碍. 计 机发 到 在, 机界 主要 通过窗口 基于 盘、 标的wM Wno , , 键 鼠 IP d w ( i s
I , e , ii , ec 模式, n o c M n Pn n Dv ) u ot g i e 这种模式是间 接的、 接的、 非直 有限的, 这极大地影响了 用户
对计算机的 使用,甚至影响到人们的工作与生活。如今每天面对着大量的信息资讯,如何智能处理
和高效利用这些来自 客观世界的海量信息?如何扩展人类的感知通道, 提高人类对跨越时空事物和
复杂动态事件的感知能力,实现人与信息空间的自 然、和谐的交互? 这些都己渐渐成为人类面临的
新挑战, 而虚拟现实技术是 这个挑战最有效的 解决 方法途径‘ 如图1 所示。 . 1 , 一 1
w lh uh ot l ie co. a r g cn o f n r tn i ko ro t i r a
T e u o s n C 十a p G ee P ri n ui V + ndo n Ldvl aP l i 口 山e Dc P n i i ssm h al r g h e o S em a r 一 a u a g n y ・ e m sv a g 比 t
基于VC_的OpenGL三维动画仿真及场景漫游的实现
1
1.1
虚拟场景的可视化分析
虚 拟 地 理 环 境 的分 析
虚拟导弹试验场的地理位置、 形状特征随时间变化比较
收稿日期:2005-07-21。 作者简介:刘升 (1966-),男,湖北大冶人,博士研究生,副教授,研究方向为智能系统、模式识别; 王行愚,男,博士,教授,博士生导师; 游晓明,女,博士研究生,副教授,研究方向为计算机软件工程和分布式
的位置, 可以通过下列函数来完成 glPushMatrix();
- 3236 -
粒子从系统中删除。 步骤 4 显示粒子系统中所有现存的粒子。 在本系统中采用统一的数据结构如下所示,它描述了粒 子的属性, 各个变量在不同的应用中表示的意义不完全相同 typedef struct { bool active; // 粒子是否被激活 float x; float y; float z; float dx; float dy; float dz; float anx; float any; float anz; float dim; float r; float g; float b; } SMOKE; 导弹飞行的尾焰具有不规则的几何外形和内在的不确定 性, 由它的初始位置和导弹发射的位置决定, 单个粒子采用单 个像素赋予适当的颜色, 加上光照来模拟。 导弹爆炸时的烟雾和碎片都是以目标靶为中心向四面八 方散开, 粒子的初始状态由特定的伪随机函数产生, 它的发展 相对于中心由特定的算法产生偏移量和角度,爆炸烟雾采用 像素赋予适当的颜色, 加上光照来模拟; 爆炸随片采用小的三 角形来模拟, 并赋予适当的颜色, 加上光照。 烟 雾 和 爆 炸 碎 片 的 初 始 化 将 在 CMissileTestView:: OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中实现 [3]。 // 粒子的生命周期 // 粒子颜色 float ddim; // 生命周期变化因子 // 偏移角度 // 粒子位移距离 // 粒子的位置
基于OpenGL的三维地形的模拟
s o tee ce c fag rtm shg ot mea d m mo a d teag rtm u p rssm ua o flr esae3 tran. h w h f in y o l o i i h i ih onb h t n i e  ̄ n oi h l h sp o t i lt n o ag c D eri i l
ZOU i XU un, Ha , J CHU e -c i W i u
( co l f o u rSi c n eh o g 。 n u nvri - ee 20 3 , hn ) S ho mp t c n eadT cn l y A h i iesy H fi 3 0 9 C ia oC e e o U t
( 安徽 大学 计算机科学与技术学院, 安徽 合肥 203 ) 309
摘 要: 三维 地形模 拟一 直是 虚拟 现实 、 地理信 息 系统 ( I) GS 等领 域 的研 究热 点 。提 出了一 种基 于不 同层 次 的多 边形 网格
模 型 的地形 生成算 法 , 采用多 重纹 理映 射技术 , 插值 对应 网格基 本 元 素 的位 置 实 现模 型 之 间 的平 滑过 渡 并 生成 地形 通过
Abtat3 r i i l ini aw y o pci egahcifr t nss m (S ,iu lelyadS n Ana oi m r s c:D t r ns a o s l a s h to i ngo rp i noma o yt GI vr a rai n Oo . g rh f r e a mu t a t i e J t t l t o
,
网格模 型 , 怎样建立不 同层次 细节 的模 型 以及 相邻 层
基于OpenGL的三维地形场景漫游系统
虚拟现实技术最先是从美国开始进行研究的,美国在虚拟现实技术上研究的进城就 代表了全球范围内的虚拟现实技术发展水平。在洛杉矶和费城开发和构建的虚拟漫游系 统被称为是国际上最成功地虚拟漫游系统其中之一。
北卡罗来纳大学(UNC)开发创建了可以在建筑设计上使用的 Walk-through 漫游 系统,参与者可以在虚拟的建筑环境里实现漫游功能。
5 总结 ..................................................................23 参考文献 ................................................................24 附录 ....................................................................25 致谢 ....................................................................26
3 系统设计 ...............................................................6 3.1 设计思想 ............................................................6 3.2 生成地形 ............................................................6 3.3 生成天空盒 ..........................................................7
1
潍坊学院本科毕业设计
三维地形漫游系统地OPENGL实现
三维地形漫游系统的OPENGL实现引言 (2)1地形可视化的概念: (2)2 三维地形的生成技术: (3)2.1 基于真实数据的地形生成 (3)2.2 基于分形技术的地形生成 (3)2.3 Diamond一Square算法: (4)3基于OpenGL的地形渲染: (5)3.1:OpenGL的基本操作 (6)4 三维地形的简化技术: (7)4.1四叉树的LOD简化算法 (7)4.2自适应实时网格优化算法(ROAM) (9)5三维地形的漫游系统: (10)5.1各个类之间的类视图,如图所示: (10)5.2各个类的具体实现: (11)5.2.1数据采集和处理 (11)5.2.2Lod 类,封装LOD技术 (11)5.3系统实现 (12)引言本系统是基于OpenGL的三维地形漫游,系统主要包括三个方面:地形数据的采集与计算,由于本系统是采用随机中点位移法得到地形高度图数据。
采用Diamond一Square算法得到原始数据。
地形渲染,采用基于OpenGL的环境,在地形中加入光照,雾,天空,以及纹理等效果对地形进行模拟,使其更接近真实。
采用LOD技术对地形进行简化和管理。
1地形可视化的概念:地理信息系统技术从60年代以来,经过40多年的发展,现逐步向三维化、可视化和网络化等方面发展,GIS软件平台不断推陈出新。
传统的2D-GIS软件通过矢量或栅格的方法完成二维地表的成图和分析,多年来,一直用二维地图产品表示三维地物,包括地质图、横断面图、示意图以及专门的几何结构图如立体网等。
但在某些领域,人们需要分析具有三维坐标的地表面以下的状况,这种空间关系时常为判断和评价矿产资源、石油资源和污染状况提供重要的信息。
因此人们在2D-GIS软件的基础上研究和开发了一些适合实际需要的3D-GIS产品。
“数字地球”强调对地球的真三维的描述,中国政府将“数字地球”列为21世纪的战略目标之一,使得3D-GIS的理论研究和软件开发又掀起了一次高峰。
基于OPENGL的三维地形的生成实现
基于OPENGL的三维地形的生成实现摘要:随着计算机图形学的发展,其在科学、工程、医学、娱乐、广告、图形艺术等众多领域得到了普遍应用。
我们可以通过图形应用程序来虚拟现实,以及GIS领域方面的遥感图像信息系统的应用。
为了逐步实现以上目标的应用,本文将以一个基于OPENGL的,使用高度图(Heightmap)进行地形(Terraain)生成及在此基础上的应用为实例,对系统的需求、算法、优化进行了详细的介绍,并给出了可行的解决方法。
关键字:计算机图形学、HeightMap 、OPENGL、TerrainAbstract:With Computer Graphics is that figures study developments, its at science, numerous fieldses last general application at art, etc.s figures advertisements amusements medical sciences projects. We come virtual reality, and GIS the remote sensing picture the applications of information systems of field through figure application program. At application that realize the goal of the above progressively, this text at one a piece of one that is because of OPENGLs, The topography( Terraain) is produced and the application on the basis of this is the instance to use and highly pursue( Heightmap) to carry on , Demand, algorithm, optimize and introduce detailed one in system, besides, Have carried on brief analysis to some technological questions that are met in the course of developping , Give and publish feasiblesolution is from realizing angle explain figure the development and use the prospects of application program.Keywords:Computer Graphics、HeightMap 、OPENGL、Terrain1 引言今天,对许多人而言,计算机和计算机图形学已经成为日常生活不可分割的一部分。
基于OpenGL 的三维地形可视化技术
基于OpenGL 的三维地形可视化技术摘要:三维地形可视化技术一直是地理信息系统、数字摄影测量、虚拟现实等领域的研究热点。
对OpenGL发展现状、数字地面模型和构网技术进行了对比研究,重点讨论了利用Visual C++ 6.0平台和OpenGL编程技术,建立虚拟地形三维可视化系统的实现过程和关键技术。
通过实验数据模拟, 实现了三维地形可视化。
关键词:OpenGL;三维;地形;可视化1 引言我国政府从国家战略高度将“数字地球”列为中国21世纪的战略目标之一,并提出了“数字中国”战略。
“数字地球”强调对地球的三维描述,在实现这一使命的过程中,需要有现代空间信息科学技术的支撑,三维地形可视化的具有重大研究意义。
三维地形可视化的应用涉及地理信息系统、虚拟现实(VR)、环境仿真、数字城市、地形的穿越飞行、国土资源管理、娱乐与游戏、气象数据、空间分析等领域。
三维真实感地形图能够逼真的反应外部真实世界,相对传统的纸质地图和计算机生成的地图,三维真实感地形图具有可视化程度高、存储和查询方便、可实时生成等优点。
因此地形三维显示有着广阔的应用背景,所以受到了广泛的关注。
2 OpenGL简介人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中Silicon Graphics Incorporated(SGI公司)推出的GL三维图形库表现突出,易于使用而且功能强大。
随着计算机技术的继续发展,GL已经进一步发展成为开放图形程序库(open graphics library,OpenGL),并被集成到Unix、Windows 2000、Windows XP等窗口操作系统中。
OpenGL被认为是高性能图形和交互式视景处理的标准。
OpenGL是指开放图形程序库,实际上是一种图形与硬件的接口。
它集成了所有几何建模、图形变换、光源设置、材质设置、纹理映射、运动模糊、像素操作、融合、反走样技术、雾化等复杂的计算机图形学算法,其中包括120个图形函数,开发者可以用这些函数来绘制点、线、多边形、面,建立三维模型和进行三维实时交互。
基于OpenGL的三维真实感地形的实现
LI AO Ho n g g a n g, LI U Ro n g
( ch S o o l o f E l e c t r o n i c E n g i n e e i r n g a n d A u t o m a t i o n , G u i l i n U i n v e r s i t y o f E l e c t r o i n c S c i e n c e a n d T e c h n o l o g y , G u i l i n 5 4 1 O 0 4 ,C h i n a )
总之 , 地理信息系统的普及加快 了数字地球 的高 速发展, 在 国 家空 间数 据 基 础设 施 ( N S D I ) 中, 数字 地 形模拟的相关研究成果 已成 为其基本 内容 , 并植入到 数 字 化 空 间框 架 中 , 进行 集 约 化 、 规模 化 生 产 , 试 图将 其 打造 成为 独立 的标 准产 品 J 。因此三 维 真实感 地形
把O p e n G L文 件和 库加 入到 工程 , 用A p p Wi z a r d建 立一
方面的问题 , 最定方 式 方 便 获 得 他 们 所 想 了解 的有 关 地 球 的信 息, 它 的 特点 是 嵌人 海 量 地 理数 据 , 实 现 多分 辨 率 、 对
利用OpenGL实现三维地形可视化
利用OpenGL实现三维地形可视化甘云燕,张建军,李雁捷(内蒙古自治区地质环境监测院,内蒙古呼和浩特 010010) 摘 要:三维地形可视化是地理信息系统(GIS)、数字摄影测量(DP)和遥感系统(RS)的主要部分,而高度真实感三维图形的绘制是计算机图形学(CG)的重要研究内容,利用OpenGL实现三维地形可视化,采用Delaunay三角化法得到地形采样点,并用已知数据对三角曲面进行插值加密,生成规则格网(GRID)数据结构的方法,可得到高度真实感的三维地形可视化效果。
关键词:OpenGL;三维;可视化 三维地形显示将地形数据生成三维地形透视图,它是地表形态的真实模拟,使用户有进入真实环境之感,有助于用户对空间数据相互关系及分析结果的直观理解。
三维地形的可视化是以研究数字地形模型(DT M)或数字高程模型(DEM)的显示、简化、仿真等为内容的学科,属计算机图形学的一个分支。
利用OpenGL实现三维地形可视化,采用Delau-nay三角化法得到地形采样点,并用已知数据对三角曲面进行插值加密,生成规则格网(GRID)数据结构的方法,实现三维地形高度真实感的可视化效果。
1 三维可视化模型构建步骤三维可视化模型构建主要分以下几个步骤:确定空间范围、数据导入、建立三维地质数据模型。
确定模型的空间范围一般使用Emax,Em in,Nm ax, Nmin,Hmax,Hm in(分别指EW向、SN向和高程的最大、最小值)六个限制数据。
将三维数据库中的数据导入三维可视化系统中,实际上是一种空间映射技术,即通过定位信息和属性信息建立三维空间图形。
模型显示就是通过OpenGL软件开发包将建模的结果显示出来。
2 DT M/DEM的数据库实现空间数据管理是系统的核心。
按照设计的钻孔数据结构,使用M icr osoft Access实现钻孔数据的存储。
之后便可通过Microsoft Access提供的工具从数据库内部实现钻孔资料的添加、修改和删除等操作,钻孔源数据与M FC便建立了关系。
基于OPENGL的三维地形的生成实现
换 至 计算 机 屏 幕 上 的象 素 , 这 个 过 程 也 存入 变量h e i g h t ma p , 从而 使用h e i g t h ma p 中
就是光栅化( r a s t e r i z a t i o n ) 。 在 这 些 步骤 的执 行 过 程 中 , Op e n G L 可 的数 据 计 算 高 度 地 形 。 第二步利用加 载的高度 图 , 计 算3 D网
高 度 地 形 由一 个 顶 点 数 组 和 一 个 索 引 染地形 。 顶点结构如 下 :
s t r uc t Ve r t e x
( GL — TEXTURE —C 00RD— ARRAY) ;
}
能执 行 其 他 的 一 些 操 作 , 例 如 自动 消 隐 处 格 , 即高度地形 。
理等 。 另外 , 景 物 光 栅化 之 后 被 送 入 帧 缓 冲
作。
器之 前还 可以 根 据 需 要 对 象 素 数 据 进 行 操 数 组 组 成 , 因此 能 够 用 索 引化 的 三 角 形 渲 4 结语
接 着 通 过 获 取 的 头 文 件 信 息 来 得 到 通 过 从 高 度 图得 到 当前 像 素 值 和 比 例 因子
wi d t h=h e a d e r [ 1 ] 十 2 5 6 +h e a d e r [ 0 ] ; he i g h t h e a d e r 【 3 】 2 5 6 + he a d e r 【 2 】 l
基 于O p e n G L 的计 算机 三 维 图形应 用 程
序 的开 发 , 是 一 项 细 致 而 又 复 杂 的技 术 。 本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三维地形漫游系统的OPENGL实现引言 (2)1地形可视化的概念: (2)2 三维地形的生成技术: (3)2.1 基于真实数据的地形生成 (3)2.2 基于分形技术的地形生成 (3)2.3 Diamond一Square算法: (4)3基于OpenGL的地形渲染: (5)3.1:OpenGL的基本操作 (6)4 三维地形的简化技术: (7)4.1四叉树的LOD简化算法 (7)4.2自适应实时网格优化算法(ROAM) (9)5三维地形的漫游系统: (10)5.1各个类之间的类视图,如图所示: (10)5.2各个类的具体实现: (11)5.2.1数据采集和处理 (11)5.2.2Lod 类,封装LOD技术 (11)5.3系统实现 (12)引言本系统是基于OpenGL的三维地形漫游,系统主要包括三个方面:地形数据的采集与计算,由于本系统是采用随机中点位移法得到地形高度图数据。
采用Diamond一Square算法得到原始数据。
地形渲染,采用基于OpenGL的环境,在地形中加入光照,雾,天空,以及纹理等效果对地形进行模拟,使其更接近真实。
采用LOD技术对地形进行简化和管理。
1地形可视化的概念:地理信息系统技术从60年代以来,经过40多年的发展,现逐步向三维化、可视化和网络化等方面发展,GIS软件平台不断推陈出新。
传统的2D-GIS 软件通过矢量或栅格的方法完成二维地表的成图和分析,多年来,一直用二维地图产品表示三维地物,包括地质图、横断面图、示意图以及专门的几何结构图如立体网等。
但在某些领域,人们需要分析具有三维坐标的地表面以下的状况,这种空间关系时常为判断和评价矿产资源、石油资源和污染状况提供重要的信息。
因此人们在2D-GIS软件的基础上研究和开发了一些适合实际需要的3D-GIS产品。
“数字地球”强调对地球的真三维的描述,中国政府将“数字地球”列为21世纪的战略目标之一,使得3D-GIS的理论研究和软件开发又掀起了一次高峰。
所有的GIS系统都带有包括空间数据、拓扑关系及属性数据在内的地理数据库,或者能与外部数据库管理系统直接进行连接。
GIS所处理的空间数据按其处理方式不同,可分为:栅格数据、2D拓扑矢量数据、数字高程模型(DEM)、三角形不规则网格(TIN)、三维模型、时间模型等,而所有这些都是以2D或2.5D(准三维)为主的。
2D-GIS用点、线和面来表示地理实体,许多3D地理实体被简化为2D形式,得到的是二维地图、图像产品,其分析功能也是在二维基础上进行的。
2.5D或称准3D意思是它不具备真正的Z坐标,而是将Z值作为某一位置上的属性变量,它并不是空间坐标值。
在真3D-GIS中,可用表达式a=f(x,y,z)来表示,a为点(x,y,z)对应的属性值,z是独立于x,y的自变量,即三维空间中的z坐标值。
3D-GIS 具有连续的数据结构和与之相应的分析功能,由此带来的好处是可以从空间的角度分析和显示物体。
地形的可视化是一门以研究数字地面模型(Digital Terrain Model,DTM)或数字高程域(Digital Height Field)的显示、简化、仿真为内容的学科,它属于计算机图形学的一个分支。
除了计算机图形学之外,计算几何也是它的重要基础知识。
它的应用涉及地理信息系统(GIS)、虚拟现实(VR)技术、战场环境仿真、娱乐与游戏、飞行穿越(Flythrough)、土地管理与利用、气象数据的可视化等各个领域。
常用的地形可视化方法大致有写景法、等高线法、分层设色法、晕渲法、拍摄实地景观照片、建立三维几何相似的实物模型、产生三维线框透视投影图和逼真地形显示等多种方法。
随着光栅图形显示硬件的发展,以真实感图形为代表的光栅图形技术日益成为计算机图形发展的主流,基于计算机图形学理论的三维地形逼真显示逐渐成为地形可视化发展的主流。
产生逼真地形显示的方法主要有两种:一是将航空像片或卫星影像数据映射到数字地面模型上,另一种是基于分形模型的地面模拟。
随着计算机视觉、科学计算可视化、遥感技术、计算机图形学等相关学科的发展,由航空航天摄影测量获取的地形数据来生成具有高度细节层次的三维地形模型已经十分普遍。
这些由上百万或者更多的三角形面片表示的各种地形模型,满足了人们对地形真实性所提出的越来越高的要求,但由于这些数据很少从绘制效率方面考虑进行优化,因此对计算机性能又提出了新的挑战。
2 三维地形的生成技术:2.1 基于真实数据的地形生成根据真实地形数据进行地形生成是实际工作中使用最多的一类,目前大多采用数字地面模型(Digital Terrain Model,DTM)来生成,DTM数据由在规则网格地形图上采样所得的高程值构成,与飞机或卫星上所拍摄的遥感纹理图像数据相对应,这些纹理图像在重构地形表面时被映射到相应的部位。
简单的地形渲染算法,是将相邻的4个网格点定义的DTM单元变换成2个三维空间的三角形,然后将视锥体内部区域的所有这样的三角形送入图形流水线进行绘制。
这种算法还可将图像纹理数据以它的最高分辨率映射到对应的多边形上,但这是一个效率很低的方法,因为在一般情况下,三角形和遥感图像纹理像素的数量非常大,而每一个独立的三角形投影到图像空间后则很小,并且很多纹理像素可能被压缩到一个图像像素中,以至于对图像的影响可以忽略不计。
因此,如果用DTM直接生成地形,即使在高性能的图形硬件平台上,要进行实时渲染,也几乎是不可能的,通常要对DTM数据进行一定的简化。
地形简化方法将在下一章进行详细介绍。
2.2 基于分形技术的地形生成二十世纪七十年代美籍法国数学家Mnedelbot为研究自然界中复杂极不规则的几何现象创立了分形几何学[34〕,此后,分形理论得到了广泛关注和蓬勃发展。
分形(rfactal)的两个重要特征是自相似性和分数维。
现在,随着计算机图形图像处理技术的发展应用,用分形几何来表达千差万别的自然现象产生了许多传统方法无法达到的美妙结果。
而基于分形原理来研究地形场景(包括地形表面、地形纹理、蓝天白云、地貌植被等)的生成和多分辨率表达是分形几何极为重要的应用领域,也是三维地形可视化的一个重要l”[l’811’9]。
国内外一些学者从不同的角度、不同的侧面进行了持续而深入方面究,但普遍而言缺乏系统性、比较性、实践性。
英国植物学家Brwon在1827年注意到浮在液面上的微粒极不规则的运动,空气中的烟尘粒子也具有相似的现象,后来解释为由液体的分子撞击所引起,称这一现象为布朗运动。
假设一个随机过程X(t)是实变量t的函数,对每一个给定的时刻t,X(t)是一个随机变量,则两个时刻的函数差:x(I2)一X(t!)(6一l)也是一个随机变量,称为“函数增量”。
因此,对这个增量的描述通常要随机变量的统计特征来表示。
在自然界中呈现出来的许多现象大多数服从高斯分布,他们的均方增量正比于时间差,这一正比关系说明了时间间隔越大,x(t2)和x〔,)相差越大,相关性越小。
记t1 = t0,t2 = t0+△t,当△t扩大r倍时可表示为以下关系:这意味着当△t扩大r倍时,函数增量减少1/√r倍后,与(X(t0 + r△t)-x(t0))具有统计自相似性。
为了讨论方便,当t0=0时,令x(t0) = 0,时间间隔变量τ表示,则:X(τ)∝1/√r X(rτ);关系式中的τ和函数值在不同尺度比例下保持不变,这种比例关系称“非一致比例变换”,这种性质称为“自放射形”。
分布性布朗运动从随即分形生成逼真景物的数学模型,他能有效的表达自然界中许多非线形现象,也是迄今为止能够描述真实地形的最好随即过程。
他是布朗运动的一个推广。
其生成算法是:基于随机分形的地形生成技术将分形几何与FMB相结合,常采用的方法有泊淞阶跃法(poissonfaulting)、傅立叶滤波法(fourierfiltersng)、中点位移法(midpointdisplaeement)、逐次随机增加法(Suc。
essiverandomadditions)和带限噪声积累法(summingbandlimit。
dnoises)等五类。
其中,随机中点位移法是最简单和经典的方法,是对FBM的直接应用。
一维随机中点位移法的思想是:针对一己知端点高程(或属性)的线段,其线段中点的高程(或属性)为其两端点高程(或属性)的平均值再加一随机位移量,位移后的两线段再进行上述中点细分并位移,递归知道满足所需要的分辨率为止。
将其推广到二维,依据表面构网方式的不同,其模拟可分为三角形格网模拟法、矩形(正方形)格网模拟法、钻石方块格网模拟法、参数方块格网模拟法等方法,其实现思想与一维类似。
下面以正方形格网为例,着重研究二维随机中点位移法的实现过程。
2.3 Diamond一Square算法:二维随机重点位移法实现的方案很多,难点是需要消除曲面生成过程中可能产生的裂缝和皱折,“Diamond-Square”算法是三维分形地形生成的经典算法。
1>根据二维分形布朗运动思想,首先构造一个维数是2的空二维数组,可以把这个数组看成是一个正方形,然后将四个角的高程初始化为相同的值。
如(a)中的方形黑点。
2>Diamond过程取正方形的四个顶点,在其中点位置(两对角线交点)生成一个随机值,这一随机值是通过平均四个顶点的值再加上一个随机量而生成的。
这样用直线连接每四个点就形成一个棱锥。
如图6.1(b)所示,新的点显示为方形黑点,已经存在的值显示为圆形黑点。
3>Square 过程在正方形每条边的中点上,即每四个点形成的棱锥的中心位置生成一个随机值,它是通过平均棱锥的四个顶点值再加上与Diamnod过程相同的随机值而生成。
这样在原来正方形的基础上又生成了一系列正方形。
如图C所示,新的点显示为方形黑点,己经存在的值显示为圆形黑点。
4>重复迭代2、3两个步骤,最终把先前建立的二维数组填充满,从而获得了生成三维分形地形所需要的高度值。
如图(d)和(e)所示。
这样,如果己经生成了一个种子正方形并经过单独一次细分过程将得到四个正方形,第二次经过该过程得到16个方形,增长的很快,方形数目等于2的(2+i)次方,其中i为递归经过细分过程的次数。
5>算法的伪代码:当正方形(Suqare)边长大于K (K是常数,一般取2的幂,其大小决定了迭代次数的多少)时{遍历数组,对每个正方形表达执行Diamond步;遍历数组,对每个棱形表达执行Square步;减小随机数范围;}3基于OpenGL的地形渲染:OpenGL即开放性图形库(Open Graphic Library),是由SGI开发的一套高性能图形软件处理系统,是图形硬件的软件界面[21]。
OpenGL作为一个性能优越的图形应用程序设计界面(API),适用于广泛的计算机环境。