基于OpenGL水波模拟本科毕业论文.doc

上传人:仙人指路1688 文档编号:4193519 上传时间:2023-04-09 格式:DOC 页数:36 大小:1.19MB
返回 下载 相关 举报
基于OpenGL水波模拟本科毕业论文.doc_第1页
第1页 / 共36页
基于OpenGL水波模拟本科毕业论文.doc_第2页
第2页 / 共36页
基于OpenGL水波模拟本科毕业论文.doc_第3页
第3页 / 共36页
基于OpenGL水波模拟本科毕业论文.doc_第4页
第4页 / 共36页
基于OpenGL水波模拟本科毕业论文.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《基于OpenGL水波模拟本科毕业论文.doc》由会员分享,可在线阅读,更多相关《基于OpenGL水波模拟本科毕业论文.doc(36页珍藏版)》请在三一办公上搜索。

1、论文题目: 基于OpenGL的水波动画模拟 系 别:_ _计算机系_ Wave simulation based on OpenGLCollege: Specialty and Grade: Number: Name: Advisor: Submitted time: May 7, 20 目录1.1 课题提出的背景31.1.2 课题的意义31.2 国内外研究现状31.2.1 四大类水波模拟的方法31.2.2水波模拟面临的困难41.2.3 国内水波动画模拟相关研究41.2.4 国外水波动画模拟相关研究5第二章 基于OpenGLMFC建模基础72.3 OpenGL渲染管线82.3.1 显示列表82

2、.3.2 求值器82.3.3 基于顶点的操作92.3.4 图元装配92.3.5像数操作92.3.6纹理装配92.3.7光栅化92.3.8片段操作92.4计算机图形学102.3 MFC框架102.4基于OpenGL+MFC的三维模拟的编程环境配置12第三章 水波的计算机模拟原理和关键技术143.1水的流体物理性质143.2 基本原理163.2.1 建立区域采样法水波数学模型163.2.2 水波扩散分析及解决方法16第四章 基于OpenGL的水波模拟174.1 系统设计174.2 水波模拟的算法设计174.3 扰动2144 水波模拟系统的逻辑视图214.5 主要结构体和类的设计:234.5 实验结

3、果24第五章结论与展望275.1 结论275.2展望27参考文献28摘要近年来, 自然景物的模拟一直是计算机图形学最具挑战的问题之一, 关于山、水等自然景物的模拟, 在计算机游戏、影视、广告各领域中有着广泛的用途, 作为自然景物模拟的重要内容, 对水流、水波的模拟正日益引起人们的关注.。本论文通过对国内外水波动画模拟的相关成就的介绍,与对其的一定了解和文献的参考,基本实现了水波的模拟,基于opengl+MFC建模基础展开探讨,对水波的计算模拟原理和关键技术进行阐述,例如水波的物理模型,运动方程,物理特性等,结合以上知识进行水波模拟,实验证明该方法实现简单,模拟的水波动画效果满足实时性和逼真性的

4、要求。关键词: 水波模拟; 物理模型; opengl; 运动方程;Abstract:In recent years, the impersonation of natural landscape has been a computer graphics the most challenging problems, one of the hills, waters and natural scenery, in computer games, advertising film, the area has an extensive use of natural scenery as an impo

5、rtant part of a simulation of the water, water was increasingly a cause for concern.This paper with animated simulations water through the achievement of its introduction, and be sure to understand and the reference, the water, based on the modeling opengl mfc based on the water, the impersonation a

6、nd the key technologies, such as water physical model, the equation of motion, physical properties, etc, the more knowledge on the corrugated, experiments prove this method to process of animation, the effect of water content timely and accurate sexualKeywords: the corrugated; the physical models to

7、 simulate; opengl; equation of motion; 第一章 绪论OpenGL 是由Silicon Graphics 公司推出的一种高性能图形开发软件工具包,该工具包括大约120 条不同的指令,它独立于硬件,独立于窗口系统,由于具有这个优越的特性,因此可以运行于各种操作系统,而且可以在各个平台之间进行移植,并且能在网络环境下以客户/服务器模式工作,已经成为专业图形处理、科学计算等高端应用领域的标准图形库,因此Microsoft,SGI,IBM 等在计算机市场中占主导地位的大公司都用它作为自己的标准图形库1.1 课题提出的背景通过计算机尽可能逼真的模拟现实世界,一直是计算

8、机图形学,特别是虚拟现实技术的一个研究热点。对于地形的绵延起伏、光的折射和反射等自然现象的模拟,人们可以根据一些现有的不太复杂的数学公式,通过数学建模来获得某种特定的效果。但是对于另外一些自然现象,例如各种烟雾,水,火焰等流体现象,虽然看似简单,但是对其进行描述的物理模型却极其复杂,这时只有去追溯该现象本身的物理根源,并借助更为精确的物理描述才能真实再现其外在的视觉效果。水波模拟不仅是一个很具有挑战性的研究课题,更具有很好的商业价值,它在航海仿真、虚拟城市游览、视频游戏、数字电影和数字广告中都有大量应用。一片逼真自然的水面可以很好的增加场景的逼真感和沉浸感。目前的一些三维图形软件产品已经有不少

9、包含了流体模拟的模块, 如Maya里面的MayaFluid EffectsTM;3DS Max提供的glu3D流体插件;Next Limit推出的RealFlow和RealWave独立软件包更是出类拔萃,被称为PC机上最好的两种流体动力学模拟软件。但是他们只是流体的图形建模工具。1.1.2 课题的意义从一杯纯净的清水到潺潺的小溪,从微波起伏的湖面到巨浪滔天的海洋,这些日常生活中看似十分平常的东西,在计算机图形学和虚拟现实技术研究者的眼中看来,与模拟地形、雨雪等其他自然景观相比较,模拟流体更具有挑战性。究其原因,主要流体的形体多变,没有一个固定的形状,很难用一个通用的方程来表示;物理模型极其复杂

10、,其波动是受到重力、摩擦力、粘滞力等各种力的综合影响;力学方程的数学表达式多为偏微分方程,求解难度大,计算复杂;具有复杂的光学效果,如水的透明度、折射和反射等。虽然具有挑战性,但方法总比问题多。早期我们使用波形函数模拟简单的水面波动,随着计算机硬件水平的发展和研究技术的进步,如今可以根据流体的物理模型,使用数值方法模拟真实感很强的三维流体。近年来,计算机图形学的发展突飞猛进并有着极为广泛的用途. 计算机图形学的发展使得三维表现技术得以形成,所谓计算机三维图形就是指将用数据描述的三维空间通过计算转换成三维图像并显示或打印出来的技术,OPENGL 就是支持计算机三维图形的一个程序库. 在计算机图形

11、学中,模拟水流动画是一个很有意义的课题.1.2 国内外研究现状1.2.1 四大类水波模拟的方法目前水波动画的模拟方法大体上可以分为四大类:第一类:基于波的分析方法。这类方法直接构造参数曲面来代表水表面,参数曲面由波形函数表示,也就是说这一类方法通过直接模拟波属性来得到水波的水波图像,可以模拟雨点造成的水波,微风造成的涟漪和紊乱的短波峰,但是解决不了水流的形体的破碎问题.第二类:基于物理模型的方法。基于物理模型的基本思路是用物理规律约束物体的运动,然后用图形学方法把物体形状渲染出来,这种方法可以保证物体的动态逼真性,也可以轻松地制作出逼真的动画来,这方面的典范是Navier-Stokes方程.它

12、有很强的物理背景,是当今非浅性科学研究中的重点和热点问题. 若使用这种方法建立浅水波模型,再使用计算流体动力学的数值分析工具来求取方程数值解,这个方法过于复杂且对光影处理能力差.第三类:基于粒子系统的方法,这类方法把流体看作离散的粒子集,粒子有一定的属性,使用这种方法人们成功地描述了瀑布、喷泉、水滴以及浪花飞沫.第四类:基于光影处理的方法。这类方法专注于模拟水流的光影特效,能出色地模拟人们从水底和水上观察阳光照射在水波上形成的光与影现象. 这方面的工作把注意力集中到如何模拟光线和水流的作用效果上来,无法兼顾水流的其他特性.1.2.2水波模拟面临的困难水波有一系列特性,如扩散、衰减、折射以及反射

13、等,我们需要了解这些特性以及我们所面临的问题,我们所面临的问题主要有:(1) 对波的模拟,水波是水流运动的关键属性,当水流受到各种外部及内部物体的作用时,会产生波,并且在水流内部传播,视觉上表现为水表面上的波纹和漩涡;(2) 光与影的处理,水是透明的,它的视觉印象很大程度上取决于周围的环境,另外水对光的折射作用使水中的光影效果复杂多变;(3) 水流形体的绘制,水的形状是不确定,易于改变,一方面,若把水的形状看成一个高度场表示的曲面,则无法表现水流的破碎以及卷曲的波纹,另一方面若把水看成由许多水粒子组成的点集,又面临如何进行可视化的问题;(4) 水流与外界物体的相互作用,当一个物体掉入水中或水内

14、有物体在运动水流会受到怎样的影响1.2.3 国内水波动画模拟相关研究上述的水面模拟方法都有一个共同的不足,那就是不能描述水体的自由流动和水面的剧烈变形,如波浪破碎等。为了克服这种缺陷,有研究者提出了采用粒子系统的方法来实现,但是毕竟真实感还是不够。随着计算机处理能力的增强和计算流体动力学的广泛应用,以及对模拟结果真实感的追求,近年来国内外对流体模拟的研究都转向了基于物理的流体模拟,因为基于物理方法所得到的试验结果,相对于基于参数建模方法所得到的结果,不仅真实感要好上许多,而且可以实现流体表面的自由流动和剧烈变形效果,如流体飞溅,表面破碎,以及泡沫等,这是后者所难以企及的。基于物理的方法主要分为

15、两种:一种是基于网格的欧拉法,它从研究流体所占据的空间中各个固定点处的运动着手,分析运动流体所充满的空间中每一个固定点上流体的速度、压强、密度等参数随时间的变化情况,以及研究由某一空间点转到另一空间点时这些参数的变化情况;另一种方法是基于粒子方法的拉格朗日方法,研究流体中某一指定微团的速度、压强、密度等描述流体运动的参数随时间的变化情况,以及研究由一个流体微团转到其他流体微团时参数的变化情况,以此建立整个流体的运动仿真。虽然我国计算机图形学和虚拟现实技术的研究起步晚于欧美发达国家,但是近年来国内虚拟现实技术,特别是视频游戏的快速发展,促进了我国水波模拟研究和技术的进步,也取得了很多的成绩。杨怀

16、平根据小振幅波理论文献1中,水波的波形近似成正弦分布这一理论并结合细胞自动机的模型,采用邻域传播的思想对水波进行动态建模,可以构造出不同邻域下水波演变的细胞自动机模型。并且采用以POINT图元为基本粒子的粒子系统,对水花效果进行实时的模拟。为将水波和浪花逼真地结合在一起,作者运用色彩融和的技术来完成浪花的显示。实践证明用该算法模拟水波,既不需要特意构造具体的波形函数,也不用求解复杂的纳维一斯托克斯方程,就能够在普通的PC平台上实现效果比较真实的水面模拟。夏青利用柏林噪声函数生成的高度场为海浪中的每个顶点提供高度采样源,同时针对海浪仿真中计算机量大的问题,又提出一种实时绘制可见梯形范围技术,解决

17、海浪仿真中数据量大的问题,确保实时仿真和逼真的视觉效果,同时使用菲涅尔效果,将反射和折射效果混合在一起,增强海浪起伏的真实感。王胜正在以往水波模型研究的基础上,根据海浪的形态,充分考虑各种随机参数,建立一个高性能的基于统计模型与FFT的波浪生成方法,模拟船舶在海浪中航行的各种特殊效果。李苏军采用Gerstner-Rankine模型,引入概率统计思想,借鉴了映射网格的方法,采用视点相关的圆形网格,代替传统的普通网格完成水面高度场的采样,且能支持实时动态连续分辨率水波表现的建模和绘制。邱捷利用水波物理模型模拟海面运动,该方法实现简单,而且拥有良好的性能,适合于三维游戏引擎。赵鹏,张立朝等另辟新径,

18、在优化算法的同时,重点对规则水波模型算法进行了研究,采用计算和显示分开的策略,预先产生大量水波数据予以保存,然后在渲染时再调用这些数据实现了三维规则水面波浪的绘制与仿真,该方法的优点是既满足显示质量的要求,又满足实时性要求,但由于波浪数据是预先生成的,没有考虑随机扰动等外界干扰。1.2.4 国外水波动画模拟相关研究技术发达的欧美国家很早就开展了对海洋和湖面这类广域水面水波模拟的研究,也一直走在流体模拟研究的前列,很多新颖的模拟方法都是由国外学者提出来的。早期水波模拟方法主要采用参数建模方式,通过直接构造参数曲面来表示水面。早在1809年Gerstner1提出了GerstIler模型用于海浪建模

19、,采用波函数来模拟海面高低起伏的运动。1863年Rankine又对这一模型进行改进和完善,后人称之为Gerstner-Rankine模型。概略地讲,这一模型描述沿圆形或椭圆形固定轨道运转的水粒子。由表面中的每一个粒子沿着其静止位置点作圆周运动。假设海平面静止时是XY平面,Z轴指向朝上,一个粒子的运动方程为: (1-1) (1-2)该方法不需要大量的网格转换计算,但需要合理地调整参数和添加一些背景噪声。为增加逼真度,Gerstner-Rankine模型往往采用叠加不同频率的波形函数和增加网格顶点方法,因此计算量也随之增大,另外一个不足之处是对于不同的波形需要重新定义不同波形函数,缺乏通用性。快速

20、傅里叶变换(Fast Foumier Transformation,FFT)可实现时域到频域的变换,在很多领域有广泛的应用。Jensen2、Tessendorf3、Fredrik Limsater4分别详细描述了利用海洋统计和经验模型,通过FFT合成一个类似海浪谱分布的高度场模拟海浪的方法,此方法的模拟的海面场景是目前参数法当中真实感是最强的,也是当今运用最广泛的水面建模方法。相信很多人都看过“泰坦尼克号和“新海神号历险记”这两部电影,对电影中那铺天盖地的海水吞没泰坦尼克号和海神号时的场景肯定印象深刻。其实那些海水都是使用快速傅里叶变换的方法模拟出来的。但由于在合成过程中常采用规则矩形粗网格来

21、完成实时绘制和避免FFT方法产生的视觉上明显的重复性,从而降低了图像的质量和真实感。另一个不足之处就是因为流体表面的网格点只能在其起始位置附近运动,无法模拟波浪破碎和水沫效果。需要借助粒子系统解决,将粒子系统放在水面与岸相撞击的地方,以粒子来模拟浪花和泡沫,提高模拟的真实感。海洋统计学研究指出,海面波浪的起伏运动是一个服从正态分布的随机过程,而且具有各态历经性,因此服从高斯分布的噪声函数开始在大规模水面模拟中得到了广泛的应用。1985年Perlin提出柏林噪声函数。该函数是能够在空间中产生连续噪声的函数。通过叠加不同层次的噪声函数可以很好的模拟自然现象中的分层现象,在地形生成5,立体云模拟6和

22、水面模拟当中应用广泛。在水面模拟当中可通过柏林噪声函数来构造海面高度场,模拟水面的随机起伏,例如Johanson7引入投影网格的概念,在后透视空间构造海面网格,并通过Pedin噪声的叠加来构建海面高度场。Lawrence MLachman8则借鉴了LOD这一有效的场景管理方式,提出了一种多层次开放式结构对海水进行建模,通过使用多层次多分辨率方法在GPU上实现海浪模拟,提高了渲染速度。海面波浪的运动具有一定的物理规律,因此基于物理模型的海洋模拟是近年来海面模拟的一个研究热点。Simon Premoze9提出了一种新的基于物理模型的大面积水面(如海面,湖泊水面)产生方法,作者根据海洋学的观察数据实

23、时生成波浪,并且通过几个简单又具有物理意义的参数,如风速,风向来控制波浪。同时还考虑光在水中传播的物理特性,在不同天气环境和光照下,水体也呈现不同的颜色,最终的模拟效果十分逼真。随着可编程GPU的出现,GPU的运用已不仅仅是3D加速和渲染,已经有很多研究者开始利用GPU的强大计算能力来加速计算。针对FFT计算量大的缺陷,Jason LMiteheU10提出了一种基于GPU的傅里叶域多边带(multiband Fourier domain)方法,模拟了广袤海洋场景。第二章 基于OpenGLMFC建模基础2.1 OpenGL简介OpenGL(全写Open Graphics Library)是个定义

24、了一个跨编程语言、跨平台的编程接口(Application programming interface)的规格,它用于生成二维、三维图像。这个接口由近三百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。而另一种编程接口系统是仅用于Microsoft Windows上的Direct3D。 OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。OpenGL的高效实现(利用了图形加速硬件)存在于Windows,很多UNIX平台和MacOS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于Open

25、GL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些特别兴趣于建立一个统一的普遍可用的API的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems(Microsoft曾是创立成员之一,但已于2003年3月退出)。2.

26、1 OpenGL发展历程1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。1995年OpenGL的1.1版本面市,该版本较1.0性能提高许多,并加入了一些新的功能。包括提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。1997年,Windows 95下3D游戏的大量涌现,游戏开发公司迫切需要一个功能强大、兼容性好的3D图形接口,而当时微软公司自己的3D图形接口DirectX 3.0功能却是很糟糕

27、。微软公司最终在Windows 95的OSR2版和后来的Windows 版本中加入了对OpenGL的支持。这样,不但许多支持OpenGL的电脑3D游戏得到广泛应用,而且许多在3D图形设计软件也可以运用支持OpenGL标准的3d加速卡,大大提高其3D图形的处理速度。2003年的7月28日,SGI和ARB公布了OpenGL 1.5。OpenGL 1.5中包括OpenGL ARB的正式扩展规格绘制语言“OpenGL Shading Language”。OpenGL 1.5的新功包括:顶点Buffer Object、Shadow功能、隐蔽查询、非乘方纹理等。2004年8月,OpenGL2.0版本发布O

28、penGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。opengl2.0支持OpenGL Shading Language、新的shader扩展特性以及其他多项增强特性。2008年8月初Khronos工作组在Siggraph 2008大会上宣布了OpenGL 3.0图形接口规范,GLSL1.30 shader语言和其他新增功能将再次未来开放3D接口发展指明方向。OpenGL 3.0 API开发代号为Longs Peak,和以往一样,OpenGL 3.0仍然作为一个开放性和跨平台的3D图形接口标准,在Shader语言盛行的今天,OGL3.0增加了新版本

29、的shader语言:GLSL 1.30,可以充分发挥当前可编程图形硬件的潜能。同时,OGL3.0还引入了一些新的功能,例如顶点矩阵对象,全帧缓存对象功能,32bit浮点纹理和渲染缓存,基于阻塞队列的条件渲染,紧凑行半浮点顶点和像素数据,四个新压缩机制等等。Open GL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广Open GL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用Open GL。因此,硬件开发商正在设法加强对它的支持。Direct3D

30、目前还不能支持高端的图形设备和专业应用; Open GL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供Open GL支持。08年8月正式公布OpenGL3.0版本。并且得到了nv的支持,其官方网站上提供针对N卡的sdk下载。2.3 OpenGL渲染管线绝大数OpenGL实现都有相似的操作顺序,一系列相关的处理阶段称为OpenGL渲染管线。图1显示了这些顺序,虽然并没有严格规定OpenGL必须采用这样的实现,但它提供了一个可靠的指南,可以预测OpenGL将以什么样的顺序来执行这些操作。图1 OpenGL渲染管道

31、图1 显示了Henry Ford在福特汽车公司采用的装配线方法,它也是OpenGL处理数据的方法。几何数据(顶点,直线和多边形)所经历的处理阶段包括求值和基于顶点的操作,而像素数据(像素,图像和位图)的处理过程侧有所不同。在最终的像素数据写入到帧缓冲区之前,这两种类型的数据都将经过相同的最终步骤(光棚化和片断操作)。下面,详细地介绍OpenGL渲染管线的一些关键阶段:2.3.1 显示列表任何数据,不管它所描述的是几何图形还是像素,都可以保存在显示列表(display list)中,供当前或以后使用。当然,我们也可以不把数据保存在显示列表中,而是立即对数据进行处理,这种模式也称为立即模式(imm

32、ediate mode)。当一个显示列表被执行时,被保存的数据就从显示列表中取出,就像在立即模式下直接由应用程序所发送的那样。2.3.2 求值器所有的几何图元最终都要通过顶点来描述。参数化曲线和表面最初可能是通过控制点以及成为基函数(Basic function)的多项式函数进行描述的。求职器提供了一种方法。根据控制点计算表示表面的顶点。这种方法是一种多项式映射,它可以根据控制点产生表面法线、纹理坐标、颜色以及空间坐标。2.3.3 基于顶点的操作对于顶点数据,接下来的一个步骤就是基于顶点的操作,就是把顶点变换为图元。有些类型的顶点数据(例如空间坐标)是通过一个4*4的浮点矩阵进行变换的。空间坐

33、标从3D世界的一个位置投影到屏幕上的一个位置。如果启用了高级特性,这个阶段将更为忙碌。如果使用了纹理,这个阶段还将生成并变换纹理坐标。如果启用了光照,就需要综合变换后的顶点,表面法线,光源位置,材料属性以及其他光照信息进行光照计算,产生最终的颜色值。2.3.4 图元装配图元装配的一个主要内容就是剪裁,它的任务是消除位于半空间(half-space)之外的那部分几何图元,而这个半空间是由一个平面所定义的。点剪裁就是简单地接受或拒绝顶点,直线或多边形剪裁则可能需要添加额外的顶点,具体取决于直线或多边形是如何进行剪裁的。在有些情况下,接下来需要执行一个称为透视除法(perspective divis

34、ion)的步骤。它使远处的物体看起来比近处的物体更小一些。接下来所进行的是视口(viewport)和深度(z坐标)操作。如果启用了剔除功能(culling)并且该图元是个多边形,那么它就有可能被剔除测试所拒绝。取决于多边形模式,多边形可能被画成点的形式或者直线的形式。这个阶段所产生的结果就是完整的几何图元,也就是根据相关的颜色,深度(有时还有纹理坐标值以及和光棚化处理有关的一些指导信息)进行了变换和剪裁的顶点。2.3.5像数操作在OpenGL的渲染管线中,和单路径的几何数据相比,像素数据所经历的流程有所不同。首先,来自系统内存的一个数组中的像素进行解包,从某种格式(像素的原始格式可能有多种)解

35、包为适当数量的数据成分。接着,这些数据被缩放、偏移,并根据一副像素图进行处理。处理结果先进行截取,然后或者写入到纹理内存,或者发送到光棚化阶段。如果像素数据时从帧缓冲区读取的,就对他们执行像素转换操作(缩放、偏移、映射和截取)。然后,这些结果被包装为一种适当的格式,并返回到系统内存的一个数组中。OpenGL有一种特殊的像素复制操作,可以把数据从帧缓冲区复制到帧缓冲区的其他位置或纹理内存中。这样,在数据写入到纹理内存或者写回到帧缓冲区之前,只需要进行一道像素转换就可以了。2.3.6纹理装配OpenGL应用程序可以在几何物体上应用纹理图像,使它们看上去更为逼真。如果需要使用多幅纹理图像,把它们放在

36、纹理对象中是一种明智的做法。这样,就可以很方便地在他们之间进行切换。有些OpenGL实现拥有一些特殊的资源,可以加速纹理的处理。这种资源可能是专用的,高性能的纹理内存。如果确实拥有这种内存,纹理对象可能会优先进行处理,以控制这种有限和宝贵的资源的使用。2.3.7光栅化光棚化就是把几何数据和像素数据转换为片断(fragment)的过程。每个片断方块对应用于帧缓冲区中的一个像素。把顶点连接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式,直线的宽度,点的大小,着色模型以及用于支持抗锯齿处理的覆盖计算。每个片断方块都将具有各自的颜色和深度值。2.3.8片段操作在数据实际存储

37、到帧缓冲区之前, 将要执行一系列的操作。这些操作可能会修改甚至丢弃这些片断。所有这些操作都可以被启用或禁用。第一个可能执行的操作是纹理处理。在纹理内存中为每个片断生成一个纹理单元(texel,也就是纹理元素),并应用到这个片断上。接着可能进行的是雾计算,然后是剪裁测试,alpha测试,模板测试和深度缓冲区测试(深度缓冲区用于消除被隐藏的表面)。如果一个片断无法通过一个启用的测试,它的连续处理过程可能会被中断。随后,将要执行的可能是混合,抖动,逻辑操作以及根据一个位掩码的屏蔽操作。最后,经过完整处理的片断就被绘制到适当的缓冲区,最终成为一个像素并到达它的最终目的地。2.4计算机图形学计算机图形学

38、是研究怎样用数字计算机生成、处理和显示图形的一门学科,1963年,伊凡.苏泽兰在麻省理工学院发表了名为画板的博士论文,标志着计算机图形学的正式诞生。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分的表现人的右脑功能了,所以计算机图形学的建立具有相当重要的意义。我国开展计算机图形设备和计算机辅助几何设计方面的研究开始于20世纪60年代中后期。进入20世纪80年代以来,我国在计算机图形学领域无论在理论研究还是在实际应用方面都取得了可喜的成果。计算机图形学是伴随着电子计算机及其外围设备而产生和发展起来的,是利用计算机研究图形的表示、生成、处理、显示的学科。经过30多年的发展,计算

39、机图形学已成为计算机科学中,最为活跃的分支之一,并得到广泛的应用。计算机图形学的研究领域非常广泛,包括几何和自然景象模型的建立、彩色真实感图形的生成、交互技术、人机界面、图形系统标准等。他的主要应用范围包括计算机辅助设计与制造、作战指挥和军事训练、计算机动画与艺术以及地形地貌和自然资源图等。计算机图形学前沿的研究课题包括科学计算的可视化、虚拟现实技术、基于物理规律的几何造型、自然景象的模拟、计算机动画以及利用并行处理技术提高真实感图形的现实处理速度等。随着计算机系统、图形输入、图形输出设备的发展,计算机图形软件有了很大的发展。在这基础上,计算机图形学所设计的算法通过了几十年热烈的讨论和探索,也

40、越来越丰富和完善。计算机图形学设计的算法非常丰富,大致可分为以下几类:(1)基本图元素的生成算法,如生成直线、圆弧、二次曲线、区域填色、反走样等。(2)基本图元素的几何变换、投影变换、裁剪等。(3)图元素(点、线、环、面、体)的求交与分类以及集合运算。(4)自由曲线和曲面的生成、插值、拼接、分解等。(5)隐藏面和隐藏线的消除以及具有光照颜色效果的真是图形显示。(6)不同字体的点阵表示,矢量中、西文字符的生成及变换。(7)模糊景物的生成。(8)三维或高维数据场的可视化。(9)三维形体的实时显示和图形的并行处理。(10)虚拟现实环境的生成及其控制算法等。围绕着写算法,多年来发表了很多论文,有些算法

41、越来越完善,甚至实现了固化。然而有些算法还不是十分理想,可以进行适当的修改来进一步提高其效率。2.3 MFC框架一MFC概述 MFC是一个编程框架 MFC (Microsoft Foundation Class Library) 中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppW

42、izard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 封装 构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。 对Win32应用程序编程接口的封装 用一个C+ Object来包装一个Windows Object。例如:class CWnd是一个C+ window object,它把Windows window

43、(HWND)和Windows window有关的API函数封装在C+ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。 对应用程序概念的封装 使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。 对COM/OLE特性的封装 OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Int

44、erface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。 对ODBC功能的封装 以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出CTApp、CTDoc、CTView、CMainFrame、CChildFrame五个类,这五个类的实例分别是应用程序对象、文档对象、视对象、主框架窗口对象和文档边框窗口对象。主框架窗口包含了视窗口、工具条和状态栏。对这些类或者

45、对象解释如下。 (1)应用程序 应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。 (2)边框窗口 如果是SDI应用程序,从CFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗口。 如果要支持工具条、状态栏,则派生的边框窗口类还要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。 边框窗口用来管

46、理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助(SHIFT+F1模式)和打印预览)。 (3)文档边框窗口 文档边框窗口类从CMDIChildWnd类派生,MDI应用程序使用文档边框窗口来包含视窗口。 (4)文档 文档类从CDocument类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。 (5)视 视类从CView或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。 (6)文档模板 文档模板类一般不需要派生。MDI应用程序使用多文档模板类CMul

47、tiDocTemplate;SDI应用程序使用单文档模板类CSingleDocTemplate。 应用程序通过文档模板类对象来管理上述对象(应用程序对象、文档对象、主边框窗口对象、文档边框窗口对象、视对象)的创建。2.4基于OpenGL+MFC的三维模拟的编程环境配置1创建MFC项目创建项目文件。选择File|New菜单项,新建一个基于对话框的项目文件MyDlgOpenGL; 修改对话框模板。删除对话框中的静态文本,调整控件的位置;2. 配置基于OpenGLMFC的开发环境 将glu.dll,glu32.dll,glut.dll,glut32.dll,opengl32.dll文件拷贝到操作系统WINNT/System32目录下。将gl.h,glaux.h,glu.h,glut.h拷贝到Microsoft Visual Studio/VC98/Include/GL目录中中。将glaux.lib,glu32.lib,glut32.lib,opengl32.lib拷贝到Microsoft Visual Studio/VC98/Lib目录中。添加OpenGL开发库文件到项目

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号