完整版基于OpenGL水波模拟本科毕业设计.docx
- 文档编号:25382054
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:40
- 大小:1.07MB
完整版基于OpenGL水波模拟本科毕业设计.docx
《完整版基于OpenGL水波模拟本科毕业设计.docx》由会员分享,可在线阅读,更多相关《完整版基于OpenGL水波模拟本科毕业设计.docx(40页珍藏版)》请在冰豆网上搜索。
完整版基于OpenGL水波模拟本科毕业设计
论文题目:
基于OpenGL的水波动画模拟
系别:
______计算机系_
WavesimulationbasedonOpenGL
College:
SpecialtyandGrade:
Number:
Name:
Advisor:
Submittedtime:
May7,20
摘要
近年来,自然景物的模拟一直是计算机图形学最具挑战的问题之一,关于山、水等自然景物的模拟,在计算机游戏、影视、广告各领域中有着广泛的用途,作为自然景物模拟的重要内容,对水流、水波的模拟正日益引起人们的关注.。
本论文通过对国内外水波动画模拟的相关成就的介绍,与对其的一定了解和文献的参考,基本实现了水波的模拟,基于opengl+MFC建模基础展开探讨,对水波的计算模拟原理和关键技术进行阐述,例如水波的物理模型,运动方程,物理特性等,结合以上知识进行水波模拟,实验证明该方法实现简单,模拟的水波动画效果满足实时性和逼真性的要求。
关键词:
水波模拟;物理模型;opengl;运动方程;
Abstract:
Inrecentyears,theimpersonationofnaturallandscapehasbeenacomputergraphicsthemostchallengingproblems,oneofthehills,watersandnaturalscenery,incomputergames,advertisingfilm,theareahasanextensiveuseofnaturalsceneryasanimportantpartofasimulationofthewater,waterwasincreasinglyacauseforconcern.
Thispaperwithanimatedsimulationswaterthroughtheachievementofitsintroduction,andbesuretounderstandandthereference,thewater,basedonthemodelingopenglmfcbasedonthewater,theimpersonationandthekeytechnologies,suchaswaterphysicalmodel,theequationofmotion,physicalproperties,etc,themoreknowledgeonthecorrugated,experimentsprovethismethodtoprocessofanimation,theeffectofwatercontenttimelyandaccuratesexual
Keywords:
thecorrugated;thephysicalmodelstosimulate;opengl;equationofmotion;
第一章绪论
OpenGL是由SiliconGraphics公司推出的一种高性能图形开发软件工具包,该工具包括大约120条不同的指令,它独立于硬件,独立于窗口系统,由于具有这个优越的特性,因此可以运行于各种操作系统,而且可以在各个平台之间进行移植,并且能在网络环境下以客户/服务器模式工作,已经成为专业图形处理、科学计算等高端应用领域的标准图形库,因此Microsoft,SGI,IBM等在计算机市场中占主导地位的大公司都用它作为自己的标准图形库
1.1课题提出的背景
通过计算机尽可能逼真的模拟现实世界,一直是计算机图形学,特别是虚拟现实技术的一个研究热点。
对于地形的绵延起伏、光的折射和反射等自然现象的模拟,人们可以根据一些现有的不太复杂的数学公式,通过数学建模来获得某种特定的效果。
但是对于另外一些自然现象,例如各种烟雾,水,火焰等流体现象,虽然看似简单,但是对其进行描述的物理模型却极其复杂,这时只有去追溯该现象本身的物理根源,并借助更为精确的物理描述才能真实再现其外在的视觉效果。
水波模拟不仅是一个很具有挑战性的研究课题,更具有很好的商业价值,它在航海仿真、虚拟城市游览、视频游戏、数字电影和数字广告中都有大量应用。
一片逼真自然的水面可以很好的增加场景的逼真感和沉浸感。
目前的一些三维图形软件产品已经有不少包含了流体模拟的模块,如Maya里面的MayaFluidEffectsTM;3DSMax提供的glu3D流体插件;NextLimit推出的RealFlow和RealWave独立软件包更是出类拔萃,被称为PC机上最好的两种流体动力学模拟软件。
但是他们只是流体的图形建模工具。
1.1.2课题的意义
从一杯纯净的清水到潺潺的小溪,从微波起伏的湖面到巨浪滔天的海洋,这些日常生活中看似十分平常的东西,在计算机图形学和虚拟现实技术研究者的眼中看来,与模拟地形、雨雪等其他自然景观相比较,模拟流体更具有挑战性。
究其原因,主要流体的形体多变,没有一个固定的形状,很难用一个通用的方程来表示;物理模型极其复杂,其波动是受到重力、摩擦力、粘滞力等各种力的综合影响;力学方程的数学表达式多为偏微分方程,求解难度大,计算复杂;具有复杂的光学效果,如水的透明度、折射和反射等。
虽然具有挑战性,但方法总比问题多。
早期我们使用波形函数模拟简单的水面波动,随着计算机硬件水平的发展和研究技术的进步,如今可以根据流体的物理模型,使用数值方法模拟真实感很强的三维流体。
近年来,计算机图形学的发展突飞猛进并有着极为广泛的用途.计算机图形学的发展使得三维表现技术得以形成,所谓计算机三维图形就是指将用数据描述的三维空间通过计算转换成三维图像并显示或打印出来的技术,OPENGL就是支持计算机三维图形的一个程序库.在计算机图形学中,模拟水流动画是一个很有意义的课题.
1.2国内外研究现状
1.2.1四大类水波模拟的方法
目前水波动画的模拟方法大体上可以分为四大类:
第一类:
基于波的分析方法。
这类方法直接构造参数曲面来代表水表面,参数曲面由波形函数表示,也就是说这一类方法通过直接模拟波属性来得到水波的水波图像,可以模拟雨点造成的水波,微风造成的涟漪和紊乱的短波峰,但是解决不了水流的形体的破碎问题.
第二类:
基于物理模型的方法。
基于物理模型的基本思路是用物理规律约束物体的运动,然后用图形学方法把物体形状渲染出来,这种方法可以保证物体的动态逼真性,也可以轻松地制作出逼真的动画来,这方面的典范是Navier-Stokes方程.它有很强的物理背景,是当今非浅性科学研究中的重点和热点问题.若使用这种方法建立浅水波模型,再使用计算流体动力学的数值分析工具来求取方程数值解,这个方法过于复杂且对光影处理能力差.
第三类:
基于粒子系统的方法,这类方法把流体看作离散的粒子集,粒子有一定的属性,使用这种方法人们成功地描述了瀑布、喷泉、水滴以及浪花飞沫..
第四类:
基于光影处理的方法。
这类方法专注于模拟水流的光影特效,能出色地模拟人们从水底和水上观察阳光照射在水波上形成的光与影现象.这方面的工作把注意力集中到如何模拟光线和水流的作用效果上来,无法兼顾水流的其他特性.
1.2.2水波模拟面临的困难
水波有一系列特性,如扩散、衰减、折射以及反射等,我们需要了解这些特性以及我们所面临的问题,我们所面临的问题主要有:
(1)对波的模拟,水波是水流运动的关键属性,当水流受到各种外部及内部物体的作用时,会产生波,并且在水流内部传播,视觉上表现为水表面上的波纹和漩涡;
(2)光与影的处理,水是透明的,它的视觉印象很大程度上取决于周围的环境,另外水对光的折射作用使水中的光影效果复杂多变;
(3)水流形体的绘制,水的形状是不确定,易于改变,一方面,若把水的形状看成一个高度场表示的曲面,则无法表现水流的破碎以及卷曲的波纹,另一方面若把水看成由许多水粒子组成的点集,又面临如何进行可视化的问题;
(4)水流与外界物体的相互作用,当一个物体掉入水中或水内有物体在运动水流会受到怎样的影响
1.2.3国内水波动画模拟相关研究
上述的水面模拟方法都有一个共同的不足,那就是不能描述水体的自由流动和水面的剧烈变形,如波浪破碎等。
为了克服这种缺陷,有研究者提出了采用粒子系统的方法来实现,但是毕竟真实感还是不够。
随着计算机处理能力的增强和计算流体动力学的广泛应用,以及对模拟结果真实感的追求,近年来国内外对流体模拟的研究都转向了基于物理的流体模拟,因为基于物理方法所得到的试验结果,相对于基于参数建模方法所得到的结果,不仅真实感要好上许多,而且可以实现流体表面的自由流动和剧烈变形效果,如流体飞溅,表面破碎,以及泡沫等,这是后者所难以企及的。
基于物理的方法主要分为两种:
一种是基于网格的欧拉法,它从研究流体所占据的空间中各个固定点处的运动着手,分析运动流体所充满的空间中每一个固定点上流体的速度、压强、密度等参数随时间的变化情况,以及研究由某一空间点转到另一空间点时这些参数的变化情况;另一种方法是基于粒子方法的拉格朗日方法,研究流体中某一指定微团的速度、压强、密度等描述流体运动的参数随时间的变化情况,以及研究由一个流体微团转到其他流体微团时参数的变化情况,以此建立整个流体的运动仿真。
虽然我国计算机图形学和虚拟现实技术的研究起步晚于欧美发达国家,但是近年来国内虚拟现实技术,特别是视频游戏的快速发展,促进了我国水波模拟研究和技术的进步,也取得了很多的成绩。
杨怀平根据小振幅波理论文献[1]中,水波的波形近似成正弦分布这一理论并结合细胞自动机的模型,采用邻域传播的思想对水波进行动态建模,可以构造出不同邻域下水波演变的细胞自动机模型。
并且采用以POINT图元为基本粒子的粒子系统,对水花效果进行实时的模拟。
为将水波和浪花逼真地结合在一起,作者运用色彩融和的技术来完成浪花的显示。
实践证明用该算法模拟水波,既不需要特意构造具体的波形函数,也不用求解复杂的纳维一斯托克斯方程,就能够在普通的PC平台上实现效果比较真实的水面模拟。
夏青利用柏林噪声函数生成的高度场为海浪中的每个顶点提供高度采样源,同时针对海浪仿真中计算机量大的问题,又提出一种实时绘制可见梯形范围技术,解决海浪仿真中数据量大的问题,确保实时仿真和逼真的视觉效果,同时使用菲涅尔效果,将反射和折射效果混合在一起,增强海浪起伏的真实感。
王胜正在以往水波模型研究的基础上,根据海浪的形态,充分考虑各种随机参数,建立一个高性能的基于统计模型与FFT的波浪生成方法,模拟船舶在海浪中航行的各种特殊效果。
李苏军采用Gerstner-Rankine模型,引入概率统计思想,借鉴了映射网格的方法,采用视点相关的圆形网格,代替传统的普通网格完成水面高度场的采样,且能支持实时动态连续分辨率水波表现的建模和绘制。
邱捷利用水波物理模型模拟海面运动,该方法实现简单,而且拥有良好的性能,适合于三维游戏引擎。
赵鹏,张立朝等另辟新径,在优化算法的同时,重点对规则水波模型算法进行了研究,采用计算和显示分开的策略,预先产生大量水波数据予以保存,然后在渲染时再调用这些数据实现了三维规则水面波浪的绘制与仿真,该方法的优点是既满足显示质量的要求,又满足实时性要求,但由于波浪数据是预先生成的,没有考虑随机扰动等外界干扰。
1.2.4国外水波动画模拟相关研究
技术发达的欧美国家很早就开展了对海洋和湖面这类广域水面水波模拟的研究,也一直走在流体模拟研究的前列,很多新颖的模拟方法都是由国外学者提出来的。
早期水波模拟方法主要采用参数建模方式,通过直接构造参数曲面来表示水面。
早在1809年Gerstner[1]提出了GerstIler模型用于海浪建模,采用波函数来模拟海面高低起伏的运动。
1863年Rankine又对这一模型进行改进和完善,后人称之为Gerstner-Rankine模型。
概略地讲,这一模型描述沿圆形或椭圆形固定轨道运转的水粒子。
由表面中的每一个粒子沿着其静止位置点作圆周运
动。
假设海平面静止时是XY平面,Z轴指向朝上,一个粒子的运动方程为:
(1-1)
(1-2)
该方法不需要大量的网格转换计算,但需要合理地调整参数和添加一些背景噪声。
为增加逼真度,Gerstner-Rankine模型往往采用叠加不同频率的波形函数和增加网格顶点方法,因此计算量也随之增大,另外一个不足之处是对于不同的波形需要重新定义不同波形函数,缺乏通用性。
快速傅里叶变换(FastFoumierTransformation,FFT)可实现时域到频域的变换,在很多领域有广泛的应用。
Jensen[2]、Tessendorf[3]、FredrikLimsater[4]分别详细描述了利用海洋统计和经验模型,通过FFT合成一个类似海浪谱分布的高度场模拟海浪的方法,此方法的模拟的海面场景是目前参数法当中真实感是最强的,也是当今运用最广泛的水面建模方法。
相信很多人都看过“泰坦尼克号"和“新海神号历险记”这两部电影,对电影中那铺天盖地的海水吞没泰坦尼克号和海神号时的场景肯定印象深刻。
其实那些海水都是使用快速傅里叶变换的方法模拟出来的。
但由于在合成过程中常采用规则矩形粗网格来完成实时绘制和避免FFT方法产生的视觉上明显的重复性,从而降低了图像的质量和真实感。
另一个不足之处就是因为流体表面的网格点只能在其起始位置附近运动,无法模拟波浪破碎和水沫效果。
需要借助粒子系统解决,将粒子系统放在水面与岸相撞击的地方,以粒子来模拟浪花和泡沫,提高模拟的真实感。
海洋统计学研究指出,海面波浪的起伏运动是一个服从正态分布的随机过程,而且具有各态历经性,因此服从高斯分布的噪声函数开始在大规模水面模拟中得到了广泛的应用。
1985年Perlin提出柏林噪声函数。
该函数是能够在空间中产生连续噪声的函数。
通过叠加不同层次的噪声函数可以很好的模拟自然现象中的分层现象,在地形生成[5],立体云模拟[6]和水面模拟当中应用广泛。
在水面模拟当中可通过柏林噪声函数来构造海面高度场,模拟水面的随机起伏,例如Johanson[7]引入投影网格的概念,在后透视空间构造海面网格,并通过Pedin噪声的叠加来构建海面高度场。
LawrenceM.Lachman[8]则借鉴了LOD这一有效的场景管理方式,提出了一种多层次开放式结构对海水进行建模,通过使用多层次多分辨率方法在GPU上实现海浪模拟,提高了渲染速度。
海面波浪的运动具有一定的物理规律,因此基于物理模型的海洋模拟是近年来海面模拟的一个研究热点。
SimonPremoze[9]提出了一种新的基于物理模型的大面积水面(如海面,湖泊水面)产生方法,作者根据海洋学的观察数据实时生成波浪,并且通过几个简单又具有物理意义的参数,如风速,风向来控制波浪。
同时还考虑光在水中传播的物理特性,在不同天气环境和光照下,水体也呈现不同的颜色,最终的模拟效果十分逼真。
随着可编程GPU的出现,GPU的运用已不仅仅是3D加速和渲染,已经有很多研究者开始利用GPU的强大计算能力来加速计算。
针对FFT计算量大的缺陷,JasonL.MiteheU[10]提出了一种基于GPU的傅里叶域多边带(multi.bandFourierdomain)方法,模拟了广袤海洋场景。
第二章基于OpenGL+MFC建模基础
2.1OpenGL简介
OpenGL(全写OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的编程接口(Applicationprogramminginterface)的规格,它用于生成二维、三维图像。
这个接口由近三百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。
而另一种编程接口系统是仅用于MicrosoftWindows上的Direct3D。
OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。
OpenGL的高效实现(利用了图形加速硬件)存在于Windows,很多UNIX平台和MacOS。
这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。
开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。
但是,由于许可证的原因,它只声称是一个“非常相似”的API。
OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。
ARB由一些特别兴趣于建立一个统一的普遍可用的API的公司组成。
根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、AppleComputer、ATITechnologies、DellComputer、Evans&Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和SunMicrosystems(Microsoft曾是创立成员之一,但已于2003年3月退出)。
2.1OpenGL发展历程
1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了WindowsNT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。
1995年OpenGL的1.1版本面市,该版本较1.0性能提高许多,并加入了一些新的功能。
包括提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。
1997年,Windows95下3D游戏的大量涌现,游戏开发公司迫切需要一个功能强大、兼容性好的3D图形接口,而当时微软公司自己的3D图形接口DirectX3.0功能却是很糟糕。
微软公司最终在Windows95的OSR2版和后来的Windows版本中加入了对OpenGL的支持。
这样,不但许多支持OpenGL的电脑3D游戏得到广泛应用,而且许多在3D图形设计软件也可以运用支持OpenGL标准的3d加速卡,大大提高其3D图形的处理速度。
2003年的7月28日,SGI和ARB公布了OpenGL1.5。
OpenGL1.5中包括OpenGLARB的正式扩展规格绘制语言“OpenGLShadingLanguage”。
OpenGL1.5的新功包括:
顶点BufferObject、Shadow功能、隐蔽查询、非乘方纹理等。
2004年8月,OpenGL2.0版本发布~OpenGL2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。
opengl2.0支持OpenGLShadingLanguage、新的shader扩展特性以及其他多项增强特性。
2008年8月初Khronos工作组在Siggraph2008大会上宣布了OpenGL3.0图形接口规范,GLSL1.30shader语言和其他新增功能将再次未来开放3D接口发展指明方向。
OpenGL3.0API开发代号为LongsPeak,和以往一样,OpenGL3.0仍然作为一个开放性和跨平台的3D图形接口标准,在Shader语言盛行的今天,OGL3.0增加了新版本的shader语言:
GLSL1.30,可以充分发挥当前可编程图形硬件的潜能。
同时,OGL3.0还引入了一些新的功能,例如顶点矩阵对象,全帧缓存对象功能,32bit浮点纹理和渲染缓存,基于阻塞队列的条件渲染,紧凑行半浮点顶点和像素数据,四个新压缩机制等等。
OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。
它仍然具有一定的生命力,但是SiliconGraphics已经不再以任何让微软不悦的方式推广OpenGL,因而它存在较高的风险。
游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用OpenGL。
因此,硬件开发商正在设法加强对它的支持。
Direct3D目前还不能支持高端的图形设备和专业应用;OpenGL在这些领域占据着统治地位。
最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供OpenGL支持。
08年8月正式公布OpenGL3.0版本。
并且得到了nv的支持,其官方网站上提供针对N卡的sdk下载。
2.3OpenGL渲染管线
绝大数OpenGL实现都有相似的操作顺序,一系列相关的处理阶段称为OpenGL渲染管线。
图1显示了这些顺序,虽然并没有严格规定OpenGL必须采用这样的实现,但它提供了一个可靠的指南,可以预测OpenGL将以什么样的顺序来执行这些操作。
图1OpenGL渲染管道
图1显示了HenryFord在福特汽车公司采用的装配线方法,它也是OpenGL处理数据的方法。
几何数据(顶点,直线和多边形)所经历的处理阶段包括求值和基于顶点的操作,而像素数据(像素,图像和位图)的处理过程侧有所不同。
在最终的像素数据写入到帧缓冲区之前,这两种类型的数据都将经过相同的最终步骤(光棚化和片断操作)。
下面,详细地介绍OpenGL渲染管线的一些关键阶段:
2.3.1显示列表
任何数据,不管它所描述的是几何图形还是像素,都可以保存在显示列表(displaylist)中,供当前或以后使用。
当然,我们也可以不把数据保存在显示列表中,而是立即对数据进行处理,这种模式也称为立即模式(immediatemode)。
当一个显示列表被执行时,被保存的数据就从显示列表中取出,就像在立即模式下直接由应用程序所发送的那样。
2.3.2求值器
所有的几何图元最终都要通过顶点来描述。
参数化曲线和表面最初可能是通过控制点以及成为基函数(Basicfunction)的多项式函数进行描述的。
求职器提供了一种方法。
根据控制点计算表示表面的顶点。
这种方法是一种多项式映射,它可以根据控制点产生表面法线、纹理坐标、颜色以及空间坐标。
2.3.3基于顶点的操作
对于顶点数据,接下来的一个步骤就是"基于顶点的操作",就是把顶点变换为图元。
有些类型的顶点数据(例如空间坐标)是通过一个4*4的浮点矩阵进行变换的。
空间坐标从3D世界的一个位置投影到屏幕上的一个位置。
如果启用了高级特性,这个阶段将更为忙碌。
如果使用了纹理,这个阶段还将生成并变换纹理坐标。
如果启用了光照,就需要综合变换后的顶点,表面法线,光源位置,材料属性以及其他光照信息进行光照计算,产生最终的颜色值。
2.3.4图元装配
图元装配的一个主要内容就是剪裁,它的任务是消除位于半空间(half-space)之外的那部分几何图元,而这个半空间是由一个平面所定义的。
点剪裁就是简单地接受或拒绝顶点,直线或多边形剪裁则可能需要添加额外的顶点,具体取决于直线或多边形是如何进行剪裁的。
在有些情况下,接下来需要执行一个称为透视除法(perspectivedivision)的步骤。
它使远处的物体看起来比近处的物体更小一些。
接下来所进行的是视口(viewport)和深度(z坐标)操作。
如果启用了剔除功能(culling)并且该图元是个多边形,那么它就有可能被剔除测试所拒绝。
取决于多边形模式,多边形可能被画成点的形式或者直线的形式。
这个阶段所产生的结果就是完整的几何图元,也就是根据相关的颜色,深度(有时还有纹理坐标值以及和光棚化处理有关的一些指导信息)进行了变换和剪裁的顶点。
2.3.5像数操作
在OpenGL的渲染管线中,和单路径的几何数据相比,像素数据所经历的流程有所不同。
首先,来自系统内存的一个数组中的像素进行解包,从某种格式(像素的原始格式可能有多种)解包为适当数量的数据成分。
接着,这些数据被缩放、偏移,并根据一副像素
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 基于 OpenGL 水波 模拟 本科 毕业设计
![提示](https://static.bdocx.com/images/bang_tan.gif)