基于OpenGL的山脉非真实感可视化算法
计算机科技与应用专业毕业论文--基于Opengl的3D游戏设计

摘要随着时代进步,从简单的色块堆砌而成的画面到数百万多边形组成的精细人物,游戏正展示给我们越来越真实且广阔的世界。
对于近几年游戏的发展来说,老式2D游戏的画面、游戏性、互动性已经无法满足各类玩家的需要,而3D游戏无论是在游戏画面的真实程度、操作的流畅程度、以及故事背景方面的优越性都非常突出。
在这种发展趋势下,2D游戏所占领的市场将会变得微乎其微,3D游戏的开发将会成为整个游戏制作领域的一种趋势。
针对于3D游戏开发,OpenGL作为一个3D的应用程序编程接口(API)来说,是非常合适的。
OpengGL作为与硬件无关的软件接口,只要操作系统使用了OpengGL适配器就可以打到相同的效果。
它又是一个开放图形库,在跨平台领域上非常便利。
并且它具有优良的移植性,是广大3D游戏开发者的首选。
本论文为利用OpengGL进行3D射击游戏的设计与开发,采用碰撞检测、粒子系统、MD2模型绘制、3D声效等技术,最终实现一个射击游戏。
关键词:游戏, 基于OpengGL,三维, 射击游戏Abstract: Along with the progress of the times,fine characters from simple color swatch built the picture to the millions of polygons, the game is to show us more and more real and the wide world.For the development of the game in recent years, the old 2D games' screen ,games andinteractive have been unable to meet all kinds of game player needs, while 3D regardless of the game on the game screen reality, smooth operation, and the background of the story of the superiority is very prominent.In this trend, 2D game occupied market will become very little, the development of 3D games will become the game made a trend in the field.For 3D game development, OpenGL as the application programming interface of a 3D (API), is a very suitable. OpengGL as the interface of the software and hardware independence, as long as the operating system uses the OpengGL adapter can reach the same effect. It is also an open graphics library, cross-platform in areas very convenient. And it has good transplantation, is the 3D game developer's choice.In this paper, the design and development of 3D shooting game is to use OpengGL, the collision detection, particle system, MD2 model, 3D sound rendering technology, the ultimate realization of a shooting game.Keywords game, OpengGL, 3D, shooting game目录1 引言 (1)1.1 课题的背景及意义 (1)1.2 毕业设计的任务 (1)1.3 国内外现状的研究 (2)1.4 开发技术与开发平台 (3)1.4.1 开发技术 (3)1.4.2 开发平台 (3)2 OpenGL简介与3D图形学相关 (5)2.1 OpenGL简介 (5)2.1.1 OpenGl特点 (5)2.1.2 OpenGL功能 (6)2.1.3 OpenGL渲染 (7)2.2 3D图形学相关 (8)2.2.1 向量与矩阵 (8)2.2.2 变换 (8)2.2.3 投影 (8)2.2.4 3D裁剪 (9)3 游戏设计 (11)3.1 游戏的组成 (11)3.2 游戏的结构 (11)3.3 本游戏设计 (12)4 关键技术 (15)4.1 摄像机漫游 (15)4.2 碰撞检测 (16)4.3 粒子爆炸 (19)4.4 云雾效果 (20)4.5 简易AI (21)4.6 3D模型 (23)4.7 3D音效 (26)4.8 游戏场景随机地形 (28)5 运行游戏 (30)结论 (36)参考文献 (37)致谢 .................................................................................................................................. 错误!未定义书签。
基于OpenGL的STL文件三维模型真实感图形可视化研究

范 、对三维实 体描述的解 释唯一 ,目前已成为 C D A / C AM/ A C E系统 接 口的工业 标 准之 一 。因而 S L文 T 件 在 三 维 C D 设计 、逆 向工 程 、有限 元 分 析 、医 A 学成像 系统 、文物保护 等方 面有广泛 的应用 u 。 O e G ( e ahcLbay 是 一 个 三 维 真 p n L Op nGrp i irr ) 实 感 图形 模 型 库 ,被 广 泛 地 运 用 于 科 学 计 算 可 视
作者简介:耿铁 (9 8 1 6 一),男,副教授 , 主要从事塑料及玻璃成 型过程数值模拟及工艺优化的工作 。
第3 卷 3 第8 期 2 1- ( ) [2】 0 1 8 下 1 1
I
头 ,第 二行 为 o tr o p关 键 字 ,随 后 的 第 3 、 ue o l 、4
5行数 据 分别 是三 角形 面 片的个 顶 点坐 标 ,分 别 以
为 可视化 研 究对 象 。
CVe tr D o a co 3 n r ; m p bl u i c:
C r n lC as ; Ti ge ls0 a
vr a —C r n l ls0 iu l— T i ge as ; t a C
CT e PtA ra yp d r r y<COb r y, Ar a CTra l Cl s ing e a s
v i ra ge a s:e il e CArh v &a) odCT in lCls : rai ( c ie r S z
v re e xX Y Z t
v re e tx X Y Z
e dl o n op e df c t n a e
e s ld fln m e sl nd o i e a i t
基于OpenGL的三维地形可视化方法研究

收稿日期:20021023作者简介:韩 样(1978-),男,硕士研究生,研究方向为道路CAD 系统、交通运输工程的模拟仿真.文章编号:10094687(2003)02001105基于OpenGL 的三维地形可视化方法研究韩 样(东南大学,南京 210096)摘 要:介绍了OpenGL 的基本概念以及以M FC 为平台进行OpenG L 编程的方法.在利用有效的数据结构建立三角网数字地面模型基础上,详细说明了制作三维真实感地形的技术方法,并用编程实例证明了这一方法的可行性.关键词:OpenG L;数字地面模型;三维地形;可视化中图分类号:G306 4 文献标识码:A1 引 言三维地形可视化是一门研究数字地面模型(DTM )的显示、简化、仿真等内容的学科,属于计算机图形学的一个分支.近年来,三维地形可视化技术越来越广泛地运用于国土资源管理、地理信息系统(GIS)、环境仿真、数字城市等领域.但是,目前正射影像技术所提供的常规正射影像图已满足不了人们对地形信息的需要.作者研究一种借助OpenGL 三维图形通用标准,利用数字高程模型(DEM )数据生成三维地形的方法.利用此技术,可以生动地再现三维立体景观,并能交互地从不同视点进行观察,进行缩放等操作.2 基本概念2 1 OpenGLOpenGL 是一个工业标准的三维计算机图形软件接口,适用于多种硬件平台及操作系统.由于OpenGL 是网络透明的,只要服从相同的协议,就允许远程绘图.OpenGL 由基础库、实用库和辅助库3个基本图形库组成,这些函数库提供了数百条功能强大的图形函数,可以用来建立三维模型和进行三维实时交互.这些图形函数几乎涵盖了所有基本的三维图像绘制特性,用户可以方便地利用OpenGL 创建出接近光线跟踪的高质量三维彩色图像[1].2 2 数字地面模型及构网技术数字地面模型(DTM)是描述地面特征空间分布的有序数值阵列[2].它以抽象的数字阵列表示地貌起伏、地表形态,计算机可以从中直接、快速、准确识别,进行数据处理.数字地面模型通常分为规则数模、半规则数模、不规则数模3大类.在建立的三维地形2003年第2期车辆与动力技术V ehicle &Pow er T echnolog y总第90期模型中运用的是不规则三角网TIN (Triangular Irregular Net).这是因为在同样的地形条件下,达到同等高程内插精度时,该类数模所需的原始地形点的数量远少于其他类型数模所需的已知点数[2].生成三角网DT M 的关键是构网技术,作者依据的是Delaunay 构网原则,因为它是目前最优的三角网构网原则.Delaunay 三角形定义为:组成Delaunay 三角网的每个三角形不包含数据点集当中除构成该三角形三顶点以外的任何其他点,即Delaunay 三角网能最大限度地保证网中三角形满足近似等边(角)性.对于任意给定的离散数据点集,Delaunay 三角网的网形是唯一的.3 可视化三维地形的制作3 1 Windows 环境下的OpenGL 编程3 1 1 绘图描述表OpenGL 绘图描述表是传递OpenGL 命令的端口,它把OpenGL 和Window s 的窗口系统连接起来.创建了一个绘图描述表后,应用程序也就定义了一个Windows 的设备描述表,绘图描述表可以在已经定义设备描述表的设备上画图.应用程序应该首先创建一个绘图描述表,并把它设置成这个线程的当前绘图描述表,然后再调用OpenGL 函数.调用结束后,使绘图描述表从线程上脱离并删除[1].3 1 2 像素格式尽管绘图描述表与设备描述表有关,但并不完全相同.设备描述表在GDI 函数调用时说明,包含Window s 的GDI 信息;绘图描述表在函数调用中是隐含说明的,包含有OpenGL 信息,因此在创建绘图描述表前,一定要设定设备描述表的像素格式[1].在Win -dow s 环境下,用PIXELFORMATDESCRIPT OR 数据结构来传输像素格式数据,用来指定OpenGL 绘制对象的一些属性,如:像素缓冲区是单缓冲还是双缓冲、像素数据是RGBA 模式还是双缓冲模式、存储颜色数据的位数、深度缓冲区的位数、模板缓冲区的位数、覆盖面和底层平面的数目、各种可见性屏蔽等.3 1 3 Window s 下OpenGL 的编程框架在以MFC 为平台运用OpenGL 绘图软件包进行三维地形可视化研究过程中,应用了如下的编程框架:构造OpenGL 窗口的风格;设置支持OpenGL 的像素格式;创建OpenGL 的绘图描述表,并将其设置为当前绘图描述表;初始化OpenGL 的绘制环境,例如光照模型、颜色和深度缓冲区的设置;添加Windows 消息处理函数,例如鼠标、窗口、键盘消息,在这些消息处理函数中,就包含OpenGL 的绘制命令;在应用程序结束并撤销视窗时,删除绘制描述表.最后,应把opengl32 lib 、glu32 lib 和glaux lib 3个静态库加入到应用程序中,它们可以支持开发者对100多个OpenGL 图形函数的调用. 12 车辆与动力技术2003年3 2 三维地形模型的显示3 2 1 三维地形的数据结构根据原始地形点的数据特征,建立了以下数据结构来表示原始地形散点(即建立了数字高程模型DEM):struct point type {int num; 散点的序号double x ; 散点的x 坐标double y ; 散点的y 坐标double z ; 散点的z 坐标point ty pe *nex t; 定义point type 型指针,指向下一个散点};实际操作中,采用Delaunay 三角网进行构网,建立如下数据结构表示三角构网后生成的各个Delaunay 三角形.实践证明这种数据结构有利于OpenGL 绘图命令的执行,提高程序运算速度.struct triang le ty pe {int p1,p2,p3; p1,p2,p3分别为构网后生成的各个Delaunay三角形三个顶点所对应的散点序号triangle type *next; 定义triangle type 型指针,指向下一个三角形};3 2 2 地形的绘制OpenGL 的几何要素有点、线、多边形[1].其中点是三维的,多边形是由多条线段封闭连接而形成的区域,这些线段又是由其端点坐标定义的.由此可见,OpenGL 的基本几何对象都是围绕顶点来建立的,而对顶点来说最重要的信息是由g lVertex ()命令提供的坐标.值得注意的是,在OpenGL 中几何对象顶点的坐标值、法线、纹理坐标和颜色等都必须包含在glBegin ()和glEnd()函数对之间,否则就不会有任何绘制出现.由于采用的是三角构网建立数据模型,因此在制作三维地形中运用glBegin (GL TRI -ANGLES)命令来绘制各个Delaunay 三角形.这种三角形绘制模式的特点在于:每3个顶点定义一个三角形,每个三角形的顶点与它前面定义的三角形顶点间没有任何关系.若glBe -g in ()和g lEnd()之间的顶点个数为3n +k (k =0,1,2),则定义了n 个三角形,最后的k 个顶点将被忽略.若glBeg in ()和glEnd()之间定义的顶点少于3个,则此定义不产生任何图元[1].绘制地形时,glBegin (GL TRIANGLES)和glEnd()绘图命令之间的3个顶点分别为前面定义的triangle type 结构中p1、p2、p3所对应的散点.这样,利用循环语句就可以绘制出所有三角构网形成的Delaunay 三角形,从而模拟真实的三维地形.3 2 3 地形的真实感表达在建立三维地形模型时,假设根据地面高度不同,其表现出来的颜色也有所不同.OpenGL 中,在RGBA 模式下,用g lColor (r,g,b,a )命令设定颜色,其中r 、g 、b 、a 分别对应当前颜色的红、绿、蓝、 值,取值范围都为[0 0,1 0].因此在实际绘制地形过程 13 第2期 韩 样:基于OpenGL 的三维地形可视化方法研究中,对于数字地面模型中的任意一点,可将地形点的纵坐标z 作为表示r 、g 、b 的参数.当然,应将z 除以一个适当的常数,以保证r 、g 、b 的值在0 0与1 0之间,防止溢出.经编程实例检验,用这种方法生成的地面颜色分明且光滑连续.自然界中的物体表面很少是光滑和单调的,往往具有各种纹理.在计算机图形学中是采用纹理映射的方法给计算机生成的物体图像加上纹理的[3].表示真实地貌和地物时,可以预先定义纹理、纹理映射方法和纹理坐标,然后将DEM 格网点坐标和相应的纹理坐标一一对应.利用OpenGL 的相关函数可以设置光照效果.光照包括发射光、泛光、漫反射和镜面反射,还可以指定模型表面的反射特性.在三维地形的制作中需要考虑泛光和漫反射,镜面反射可以不予考虑.3 24 三维地形模型的显示OpenGL 提供的基本变换命令包括取景变换、模型变换、投影变换和视见区变换等.利用这些命令函数可以很方便地对模型进行平移、旋转、缩放等操作.投影变换应选择透视投影模式,因为透视投影的主要特征就是将投影线汇聚到一点,即对象离视点越远,它在最终图像上就显得越小,符合人的视觉感受.此外,按照人们的视觉习惯,总是希望在原点(或其他方便位置)处构造所需画面,然后从一个较佳的位置观看该画面.OpenGL 自带的实用库函数gluLookAt ()正是为这个目的而设计的,故可以采用此库函数来实现虚拟场景的观察变换.gluLookAt ()库函数的原型如下:void gluLookAt (GLdouble eye X ,GLdouble eye Y ,GLdouble eye Z ,GLdouble center X ,GLdouble center Y ,GLdouble center Z ,GLdouble up X ,GLdouble up Y ,GLdouble up Z )其中 参数:eye X ,eye Y ,eye Z 指定视点的位置;center X ,center Y ,center Z 指定沿着所需视线上的任一点的位置;up X ,up Y ,up Z 指定向上的矢量方向[4].函数gluLookAt ()通过一个视点、一个表示场景中心的参考点和UP 向量建立了一个取景变换矩阵.该矩阵将参考点映射为-z 轴方向,将视点映射为原点,UP 向量在观察平面上的投影方向将被映射到+y 轴的方向(此处坐标系为OpenGL 的三维绘图坐标系).在实际操作中,可令参考点为数字地面模型中的任一散点.地形透视图形成后,可为应用程序加入鼠标和键盘的消息响应函数,并将视点、视角、模型旋转角度等设为变量作为消息响应函数中的控制参数,从而可以交互式地从不同角度观察三维地形.在所做的例程中,添加了模型的缩放、左右旋转、前后旋转、左右移动等交互观察功能.4 试验与结论试验在P4微机(主频1 6GH z,内存256M B,其中显存64M )上进行,操作系统为Win -dow s 2000,以Visual C++ 6.0为开发平台.构建数字地面模型所用到的原始地形数据为306KB 大小的文本文件(前面所提到的pointty pe 型数据),三角构网后生成了将近700KB 大小的文本文件(前面所提到的triang le type 型数据).利用OpenGL 生成的真实感三维地形模型如图1所示(此例选取视距较远). 14 车辆与动力技术2003年图1 OpenGL 生成的三维地形模型 通过该试验例程可得到如下结论:1)利用所建立的point type 和tr-iangle type 两种数据结构能够顺利、快速地建立数字地面模型,其数学模型在理论上是严密的.2)利用OpenGL 的独立填充三角形绘制命令生成三维地形模型,具有快速、逼真的优点.作者所做的试验例程从读取原始地形数据到最后生成三维透视图所需的时间小于1s.3)通过改变模型的旋转角度能实现从多个角度实时观察三维地形;通过交互式变换视点的位置或预先设定视点运动路线能实现漫游功能,进而可以实现三维地形的实时动画和虚拟现实效果.参考文献:[1] 贾志刚.精通OpenGL [M ].北京:电子工业出版社,1998.[2] 符锌砂.公路计算机辅助设计[M ].北京:人民交通出版社,1998.[3] 孙家广.计算机图形学[M].北京:清华大学出版社,1994.[4] 吴海平,罗红兵.OpenGL 图形程序设计及应用环境[M ].长沙:国防科技大学出版社,1999.Research on Visualizing the 3D Terrain Based on OpenGLHAN Yang(Southeast U niversity ,N anjing 210096,China)Abstract:The basic concept of OpenGL and the method about how to program by using OpenGL based on MFC are introduced.Based on the Triangular Net Dig ital Terrain M odel built by an ef -fective data structure,the technique of producing 3D visual terrain is depicted,and the feasibility of this m ethod is verified by an actual program example.Key words:OpenGL;digital terrain model;3D terrain;visualization 15 第2期 韩 样:基于OpenGL 的三维地形可视化方法研究。
基于OPENGL的三维地形的实现

图 3 剔除后的部分 上面对四叉树的剔除的过程进行了介绍,可以看到,相 当大的领域可以一次完成对视景体的判定及剔除。不使用四 叉树直接对视景体进行剔出的话,所有节点都必须进行视景 体的判定,利用四叉树的特点可以一次完成相当大领域的剔 除操作,这也是地形处理时使用四叉树的理由。 3.LOD LOD 就是分阶段调整网格建模数据的精密度,可以分为 静态 LOD 和动态 LOD。 静态 LOD 的特点就是在最初就确定的网格的精密度,它 的优点在于运算简单速度快但是需要分几个阶段,存储器严 重浪费,距离不同,网格的阶段急剧变化,很容易出现这样 现象。动态 LOD 技术则可以解决走样现象。 动态 LOD 的技术是根据摄像机与物体的距离实时调整 网格精密度,该方法一般可以分为网格分割技巧和网格精简 技巧,其优点在于可以自然生成 LOD,不会出现走样现象, 也不会浪费存储器,但是网格分割和网格精简,需要增加运 算量,速度相对有所减慢。地形处理中常用的是动态 LOD, 由于我们需要在画面上对地形建筑物等进行实时绘制,尽管 在一定程度上降低了的质量、渲染速度有了很大提高;仔细 观察一下 LOD 分割形成的阶段;可以发现于四叉树子节点分 割十分相似;由于我们使用了四叉树,也就有了可以相当简 便的使用 LOD 的方法下图表现了摄像机和各个节点的中点 距离不同时得子节点分割关系,与摄像机距离远的节点不进 行之子节点的渲染,只是在各自阶段进行渲染,相对来讲与 摄像机距离越近,就越需要对下层子节点进行渲染。
[2] (韩)金荣俊.3D 游戏编程.[M].北京:电子工业出版 社.2006.
可以防止龟裂的产生,需要按照上下左右四个方向在 LOD 阶
段不同的所以节点添加不同的三角形。 三、性能对比和总结
1.性能对比 (配置:显卡:ATI RADEON 7000;
基于OpenGL三维分形地形的可视化研究_1_2国内外研究现状_8_10

2基于OpenGL三维分形地形的可视化研究DTM)中的地形数据进行逼真的三维显示、模拟仿真、简化、多分辨率表达和网络传输等内容的一种技术,它涉及到测绘学、现代数学、计算机三维图形学、计算几何、地理信息系统、虚拟现实、科学计算可视化、计算机网络等众多学科领域,在战场环境仿真、娱乐与游戏。
地形漫游、道路选择、土地规划、网络GIS等众多领域有广泛应用[4] [5]。
该技术在“数字地球”概念的大背景衬托下,显示出了强大的生命力和蓬勃生机,并随着与之相关的学科迅速发展而不断更新。
因此,对其深入研究十分必要。
1.2 国内外研究现状在计算机图形学领域,三维可视化是一个重要的研究方向,许多研究人员己经进行了大量卓有成效的研究,并有许多成熟的技术己经应用到实际中,出现了大量的优秀的可视化软件产品,如3D MAX、MAYA、EVS、AVS等。
这些产品主要应用于游戏、电影动画、工业设计以及其它专业领域的研究,而与GIS联系较少。
可视化理论与技术用于地图学与GIS始于90年代初。
1993年,国际地图学协会(ICA)在德国科隆召开的第16届学术讨论会上宣告成立可视化委员会(Commission On Visualization),其主要任务是定期交流可视化技术在地图学领域中的发展状况和研究热点,并加强与计算机领域的协作。
1996年该委员会与美国计算机协会图形学专业组(ACMSIGGAPH)进行了跨学科的协作,制订了一项称为“Carto Proiect"的行动计划,旨在探索计算机图形学领域的理论和技术如何有效地应用于空间数据可视化中,同时也探讨怎样从地图学的观点和方法来促进计算机图形学的发展[6]。
1998年2月由B.H.Mccormick等根据美国国家科学基金会召开的“科学计算可视化研讨会"的内容撰写的一份报告中正式提出了“科学计算可视化(Visualization in Scientific Computing,简VISC)”的概念,从此标志着一门新的可视化学科的问世。
利用OpenGL实现数字地形的可视化和漫游_郝慎学

英才高职论坛创刊号(总第1期) 2005年11月The Foru m of Y i ngcai H i gh er V ocat i onal Educat i on In iti al Issue(Seri al N o .1) N ov .,2005利用Open GL 实现数字地形的可视化和漫游*郝慎学(山东英才职业技术学院计算机信息工程学院,山东济南,250104)摘要:介绍了O penGL 的工作原理、编程步骤以及Op en GL 的数学基础,利用Op enGL 实现了数字地形的模拟显示和漫游功能。
采用视了点移动的方法进行数字地形漫游,给出了视点位置移动的计算方法、视线水平和俯仰旋转时的计算方法,并实现了视点和视线的控制,利用Op en GL 在V isual Basic 6.0中编程实现。
关键词:Op enGL 编程;可视化;数字地形漫游1.Op enGL 简介Op en GL (O pen G raph ics Library )是美国SGI 公司开发的一个功能强大的图形软件程序接口,程序员可以直接利用这些函数来编写交互式三维图形应用程序。
现在三维数据可视过程中也大多利用Op en GL 来实现三维数据的显示过程。
Op en GL 可以方便的显示三维效果及变换过程,它实现了:建模、变换、颜色模式设置、光照设置、材质设置、纹理设置、位图等功能,简化了常规的三维编程,一般操作如消隐、光照处理等只需要直接调用O penGL 的API 函数即可。
用O penGL 来实现三维显示,具有简单、直观、效率高的特点,是三维重构非常好的工具。
2.Op enGL 的工作原理Op en GL 的工作顺序就是一个从定义几何要素到把象素段写入帧缓冲区的过程。
在屏幕上显示图象的主要步骤是以下3步:1)构造几何要素(点、线、多边形、图象、位图等),创建对象的数学描述。
在三维空间上放置对象,选择有利的场景观察点;2)计算对象的颜色,这些颜色可能直接定义或由光照条件及纹理间接给出;3)光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。
基于OpenGL的三维可视化技术研究与实现
基于OpenGL的三维可视化技术研究与实现随着计算机技术的飞速发展,三维可视化技术也逐渐成为计算机领域的热门研究方向。
其中,基于OpenGL的三维可视化技术因其高效、易用、跨平台等特点,成为了广泛应用的一种技术。
一、OpenGL概述OpenGL是一种跨平台、开放源代码的图像渲染API,是由Silicon Graphics Inc.开发的一套图形程序接口。
OpenGL在3D图形方面的优越性能以及跨平台特性,使得其得到了广泛应用。
OpenGL的发展也比较迅速,在OpenGL 2.0中加入了可编程管线,使得OpenGL可通过GLSL(OpenGL Shading Language)进行高级图形渲染。
二、基于OpenGL的三维可视化技术基于OpenGL的三维可视化技术可以用于各种领域,例如计算机游戏、虚拟现实、医学、建筑设计等等。
其中,计算机游戏是三维可视化技术应用较早的领域之一。
基于OpenGL的游戏开发可以在各种平台上实现高效、流畅的游戏体验。
虚拟现实也是基于三维可视化技术的重要应用领域。
使用基于OpenGL的虚拟现实技术,可以实现逼真的虚拟环境,使用户产生身临其境的体验。
在医学方面,基于OpenGL的三维可视化技术可以用于医学图像重建、医学模拟、手术演示等。
通过可视化技术,医生可以更直观地了解病患情况,选择更合理的治疗方案。
基于OpenGL的三维可视化技术也被广泛应用于建筑设计领域。
使用可视化技术,设计师可以更清晰地了解设计效果,更快速地进行设计调整。
三、基于OpenGL的三维可视化技术实现基于OpenGL的三维可视化技术需要使用OpenGL的相关库函数进行开发。
其中,可以使用GLUT库进行OpenGL窗口的创建和事件处理。
使用OpenGL的矩阵操作函数可以进行三维模型的旋转、缩放、平移等操作。
通过对三维模型的合理组合,可以实现更为复杂的场景效果。
此外,基于OpenGL的三维可视化技术也可以结合其他技术进行应用。
基于OpenGL的3D可视化技术研究
基于OpenGL的3D可视化技术研究一、引言可视化技术在现代科技领域中应用越来越广泛,其中3D可视化技术在很多方面都有较好的发挥空间。
在3D可视化技术中,OpenGL作为一个广泛使用的图形API,其特点在于开放、跨平台、高效率等。
本文将探讨基于OpenGL的3D可视化技术的研究现状、应用案例和未来发展趋势。
二、3D可视化技术的研究现状现阶段,3D可视化技术的研究主要包括三部分:建模、渲染和交互。
在这三部分中,渲染技术是至关重要的。
因为只有完美地渲染出3D模型场景,才能实现良好的交互效果和真实感。
OpenGL作为一个图形API,提供了三维图像的渲染服务,在3D可视化技术中起到了至关重要的作用。
OpenGL是一种开放源代码的图形库,其规范经过OpenGL Architectural Review Board (ARB)的审查和审核,是推广3D图形应用的标准。
目前最新版本为OpenGL 4.6,它支持3D纹理、光照、粒子和透视等渲染效果,可以在不同硬件平台上实现高性能的3D渲染。
三、基于OpenGL的3D可视化技术的应用案例1. 医学领域可视化技术的应用医学领域应用广泛的3D可视化技术可以通过OpenGL渲染出更加真实的脏器模型,帮助医生更好地诊断疾病。
例如,基于OpenGL的X-ray模拟技术可以在没有真实X-ray情况下模拟出人体X-ray影像。
同时,还可以利用OpenGL中的光线追踪技术,实时显示人体的内部结构和器官。
2. 游戏领域可视化技术的应用游戏领域的3D可视化技术需要实时渲染出游戏场景,不仅需要高效率和真实感,还需要具备交互性。
基于OpenGL的3D可视化技术提供了高效的图形操作方法,能够轻松实现对游戏场景的交互操作。
例如,虚拟现实游戏常常使用OpenGL进行3D渲染,并利用头戴式显示器和手柄等交互设备,使玩家沉浸于虚拟世界中。
3. 工业设计领域可视化技术的应用在工业设计领域,基于OpenGL的3D可视化技术可以大幅提升产品设计的效率和质量。
OpenGL中真实感图形的显示实现
OpenGL中真实感图形的显示实现实验名称OpenGL 中真实感图形的显示实现一、实验目的学习基于OpenGL真实感图形显示的原理与实现方法。
二、实验内容利用向导生成应用程序框架,参考示例编写实现三维图形的应用程序,增加光照与材质效果实现真实感图形的显示。
三、实验步骤1.利用向导生成应用程序框架。
2.添加相应的函数,绘制立方体(参照上课给的实例)。
3.添加相应的函数,实现三维球体的绘制。
4.增加光源,并设置光源参数与材质参数,观察显示效果。
实验代码及程序运行结果截图如下:// 2008cube.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "gl/glut.h"#include "math.h"void myinit(){glClearColor( 1.0, 1.0, 1.0, 0.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.5, 1.5, -1.5, 1.5,-1.5,1.5);}void draw_cube(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POL YGON); glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,1.0,0.0); glVertex3f(1.0,1.0,0.0); glVertex3f(1.0,0.0,0.0); glEnd();glColor3f(0.0,1.0,0.0); glBegin(GL_POL YGON); glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,1.0,0.0); glVertex3f(0.0,1.0,1.0); glVertex3f(0.0,0.0,1.0); glEnd();glColor3f(0.0,0.0,1.0); glBegin(GL_POL YGON); glVertex3f(0.0,0.0,1.0); glVertex3f(0.0,1.0,1.0); glVertex3f(1.0,1.0,1.0); glVertex3f(1.0,0.0,1.0); glEnd();glColor3f(1.0,1.0,0.0); glBegin(GL_POL YGON); glVertex3f(1.0,0.0,0.0); glVertex3f(1.0,1.0,0.0); glVertex3f(1.0,1.0,1.0); glVertex3f(1.0,0.0,1.0); glEnd();glColor3f(1.0,0.0,1.0); glBegin(GL_POL YGON);glVertex3f(1.0,1.0,0.0);glVertex3f(1.0,1.0,1.0);glVertex3f(0.0,1.0,1.0);glEnd();}void display(){glClear( GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);gluLookAt(0.5,0.5,0.0,1.0,1.0,1.0,1.0,0.0,1.0); glutWireCube(0.5);draw_cube();glFlush();}void main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(300,300); glutCreateWindow("立方体的绘制"); glutDisplayFunc(display);myinit();glutMainLoop();}// 2008sphere.cpp : Defines the entry point for the console application. //#include "stdafx.h"#include "gl/glut.h"#include "math.h"#define M_PI 3.1415926void draw_sphere(){double c=M_PI/180.0;float phi,phir,theta,thetar,x,y,z,phir20; glColor3f(1.0,1.0,1.0);for(phi=-10.0;phi<100.0;phi+=4.0){phir=c*phi;phir20=c*(phi+20);glBegin(GL_QUAD_STRIP);for(theta=-200.0;theta<=200.0;theta+=1.0) {thetar=c*theta;x=sin(thetar)*cos(phir);y=cos(thetar)*cos(phir);z=sin(phir);glVertex3d(x,y,z);x=sin(thetar)*cos(phir20);y=cos(thetar)*cos(phir20);z=sin(phir20);glVertex3d(x,y,z);}glEnd();}glBegin(GL_TRIANGLE_FAN);glVertex3d(0.0,0.0,0.0);c=M_PI/180;double c80=c*80;z=sin(c80);for(theta=-200;theta<=200;theta+=1.0) {thetar=c*theta;x=sin(thetar)*cos(c80);y=cos(thetar)*cos(c80);glVertex3d(x,y,z);}glEnd();glBegin(GL_TRIANGLE_FAN);glVertex3d(0.0,0.0,-1.0);z=-sin(c80);for(theta=-200;theta<=200;theta+=1.0){thetar=c*theta;x=sin(thetar)*cos(c80);y=cos(thetar)*cos(c80);glVertex3d(x,y,z);}glEnd();}void display(){glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW);glLoadIdentity();GLfloat ball_specular[]={1.0, 1.0, 1.0, 1.0};GLfloat ball_diffuse[]={1.0, 1.0, 1.0, 8.0};GLfloat ball_ambient[]={1.0, 1.0, 1.0, 2.0};GLfloat ball_shininess={100.0};GLfloat light_ambient[]={0.0, 0.0, 0.0, 1.0};GLfloat light_diffuse[]={1.0, 1.0, 1.0, 1.0};GLfloat light_specular[]={2.0, 1.0, 1.0, 0.0};GLfloat light_position[]={2.0, 2.0, 2.5, 2.5};glLightfv(GL_LIGHT0, GL_POSITION, light_position);glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glMaterialfv(GL_FRONT, GL_SPECULAR, ball_specular); glMaterialfv(GL_FRONT, GL_AMBIENT, ball_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, ball_diffuse); glMaterialf(GL_FRONT, GL_SHININESS,ball_shininess); glShadeModel(GL_SMOOTH);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_DEPTH_TEST);glClearColor (0.0, 0.0, 0.0, 1.0);glColor3f (1.0, 1.0, 1.0);glEnable(GL_NORMALIZE);glEnable(GL_CULL_FACE);glCullFace(GL_BACK);draw_sphere();glEnd();glFlush();}void init(){glClearColor( 0.0, 0.0,0.0, 0.0);glColor3f(0.0,0.0,0.0);glOrtho(-5.0, 5.0, -5.0, 5.0,-5.0,5.0);}void reshape(int w,int h){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.5,1.5,-1.5,1.5,-1.5,1.5);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glEnable(GL_DEPTH_TEST);glutInitWindowSize(400,400);glutInitWindowPosition(0,0);glutCreateWindow("三维球体");glutReshapeFunc(reshape);glutDisplayFunc(display);init();glutMainLoop();return 0;}。
基于OpenGL的三维地形场景漫游系统
虚拟现实技术最先是从美国开始进行研究的,美国在虚拟现实技术上研究的进城就 代表了全球范围内的虚拟现实技术发展水平。在洛杉矶和费城开发和构建的虚拟漫游系 统被称为是国际上最成功地虚拟漫游系统其中之一。
北卡罗来纳大学(UNC)开发创建了可以在建筑设计上使用的 Walk-through 漫游 系统,参与者可以在虚拟的建筑环境里实现漫游功能。
5 总结 ..................................................................23 参考文献 ................................................................24 附录 ....................................................................25 致谢 ....................................................................26
3 系统设计 ...............................................................6 3.1 设计思想 ............................................................6 3.2 生成地形 ............................................................6 3.3 生成天空盒 ..........................................................7
1
潍坊学院本科毕业设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于OpenGL的山脉非真实感可视化算法作者:朱晨曦冯茜饶思敏
来源:《电子技术与软件工程》2018年第09期
摘要本文基于OpenGL,对原始地理灰度数据进行图像分割,在分析已有的提取山谷线和山脊线的算法之上,使用了一种新的提取特征线的方法,并将特征线进行非真实感绘制,突出了山脉图像的艺术特性,将图形非真实感可视化应用到地理信息绘制领域。
【关键词】OpenGL 山脉图像图像分割可视化算法
随着计算机图形学相关技术的不断进步与发展,对于地理信息的构建技术日益成熟。
但对于山脉山系等特定的区域,没有针对性的可视化模式。
本文研究山脉非真实感可视化系统,针对于山系、山脉这种区域很大的地貌进行建模。
1 相关技术介绍
1.1 图像分割算法
在针对山脉的图像分割中,首先利用图像全局灰度分布特性实现初始分割,然后进行区域标记,区域标记即在整体灰度图中,将灰度值相似的区域划分成同一类,并标定不同的序号,用以区分。
最后,遍历所有的区域,对相邻的、灰度值相近的区域进行合并,最后可以得到较合适的分割结果。
1.2 山谷线和山脊线的提取
山谷和山脊线是地形和地势变化的分割线,也是山脉重要的特征线。
本文研究通过DEM 数据提取特征线并进行绘制的方法。
特征线提取可分为几何分析法和地形表面流水模拟法。
在较为稀疏的DEM网格中间,使用地形表面流水模拟法,在四周局部的DEM网格中使用几何分析法。
几何分析法思想:在垂直于DEM平面上截取断面,形成的断面曲线中极小值点即为山谷点的候选点,而极大值点为山脊点的候选点。
经过一定的筛选时后,这些山谷、山脊点就是DEM图中的特征点。
地形表面流水模拟法思想:通过模拟自然界中水流随地形高低变化流动模型,计算每一个地形点的流水量,按照流水量单调递增的顺序,找到区域的流水线,通过进一步计算得到分水线。
其中合水线是山谷线,分水线是山脊线。
最后,实现山脊点和山谷点的提取和筛选,得到的山脊、山谷线并不完全连接,针对离散的特征点设计一种新的连接方法,使得山脊、山谷线更加连接畅通,最后去除山脊、山谷线中一些孤立的短支,使线条看起来更加清晰,最终得到提取结果。
本文结合了图论的思想。
考虑了DEM图上每个点的联系。
根据山脊线山谷线的高度特征和连续性特征设计算法,得到特征线的位置。
1.3 非真实感绘制
本文采用了自动非真实感绘制,突出了山脉的艺术效果。
目的在于将地理的特征信息用计算机的方式表达出来。
利用山脊和山谷等特征线,生成非真实感纹理。
对于不同海拔、不同地貌的山系区域,光照产生的阴面阳面、采用不同颜色、线条等表现形式。
1.3.1 轮廓线的标定与风格化绘制
得到所有轮廓线,去除可见性问题,即去除事实上看不见的轮廓线,达到更逼真的效果。
通过抽象的线条信息很好地表现出山系的形态特征并绘制纹理。
获得三维网格模型的特征线,构造不同风格的艺术图案,利用纹理映射的方法对特征线进行风格化。
1.3.2 三维模型非真实感着色
获取模型,基于高度和曲率绘制脊线和轮廓线,进行卡通渲染。
构造山体的二维纹理贴图,添加摄像机,模型最终的渲染效果随着视点的改变而改变,表现力强。
2 算法实现
2.1 针对山系网格提取特征线
在这一步算法中,基于OpenGL处理灰度图像,建立概略DEM,为了对特征点进行识别和判断。
而且,较为稀疏的DEM数据还可以避免噪声的干扰,减少误差的产生。
在大量数据的处理过程中还大大减少了计算量。
对于将特征点连接成特征线,使用新方法:借助最小生成树建立连接。
利用比较成熟的Prim算法,求解各特征点之间的最小生成树。
首先将DEM图构建成邻接矩阵G,由顶点和连线构成,G (V,E)。
将所有特征点按照八邻域方式与周围的特征点相连接,构成原始的图G。
对于G中的每一条边,他的端点分别力a、b,H为某点的高度值,则他的权重为Ei= (Ha+Hb)/2。
使用Prim算法更加适合解决特征点连接成特征线的问题,所求解的最小生成树就是山脉中的特征线。
2.2 非真实感绘制
2.2.1 轮廓线的标定
基于图形空间的轮廓检测可以分为两类:一类是基于多边形网络,另一种是基于光滑表面。
而其中的算法又有两类:直接检测算法和间接合成算法。
本文重点使用了直接检测算法,遍历组成模型的所有边,然后针对每一条边判断是否符合轮廓线的条件。
此算法简单而有效。
2.2.2 风格化绘制
基于图像的线条绘制技术可以具有不同的表现风格。
其中,以山谷和山脊等特征线为作为绘制的基本元素,根据三维模型和图像的具体地理特性来生成形状各异的线条元素。
最终,利用这些元素构成最后的图像。
采用无笔划的绘制技术,通过提取的特征线,将特征线进行处理,加深和加粗并突出它原有的特性。
由于特征线的形状,粗细各有不同,可以利用参数的设置得到不同的效果。
将各种不同特征线条按照地理信息添加到地理空间内,就形成了纹理。
纹理表示了山脉表面的材质,是图像中重要的一部分。
其中,图像渲染主要是由CPU的运算完成的。
为了提升生成图像的显示速度,本文对绘制算法加速和优化.利用了GPU加速,从而为用户带来更好的视觉体验。
参考文献
[1]翁宏章,基于DEM的地形特征线提取方法研究与应用[D].电子科技大学,2017.
[2]李智慧.基于图像的非真实感绘制[D].辽宁大学,2012.。