ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:273.85KB ,
资源ID:7010279      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7010279.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于OpenGL粒子系统的喷泉模拟.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于OpenGL粒子系统的喷泉模拟.docx

1、基于OpenGL粒子系统的喷泉模拟 毕业设计(论文)设计(论文)题目: 基于OpenGL粒子系统的喷泉模拟 基于OpenGL粒子系统的喷泉模拟摘 要随着计算机仿真技术的不断提高,人们对真实事物的模拟要求越来越高,模拟技术的重要性越来越突出,尤其在3D游戏、军事演习和仿真实验等方面。而寻求能准确地描述客观世界中各种现象与景观的数学模型,并逼真地再现这些现象与景观,是计算机图形学的一个重要研究课题。本文从计算机图形学中粒子系统模拟自然景物的方面出发,介绍了采用粒子系统模拟真实事物的方法。实际上,很多自然景物难以用几何模型描述,如烟雾、植物、水波、火焰等,粒子系统的景物模拟则超越了几何模型的限制,能

2、够用简单的模型描述复杂的自然景物。本课题设计了基于OpenGL粒子系统的喷泉模型,详细讨论了模型中粒子的属性及其变化,实现了具有较强真实感的动态变化和抛物变化等喷泉特征,采用了纹理映射和视线跟踪技术进行三维喷泉渲染;同时,采用Line方式取代传统的Point方式渲染粒子实现喷泉模拟。该方式模拟喷泉比较真实,速度快,在普通的微机上可以得到令人满意的效果。关键词:粒子系统,喷泉模拟,特效The Fountain Simulation Based on OpenGL Particle SystemAuthor: Feng LiangTutor: Sheng YuxiangAbstractWith t

3、he computer simulation technology continues to improve, people is demanding increasingly on the simulation of real things, the importanctof Simulation is prominenting increasingly, especially in 3D games, military drills and simulations, and so on. And seeking an the accurate mathematical model desc

4、ription of a variety of landscape of in the objective world,and realistic reproduce these phenomena and landscape, is an important research topic of the graphics. The topic from analoging the nature of the area with the Particles system of the graphic introductions the simulation of the real things.

5、 Many nature difficult to describe the geometric models, such as smoke, plants, water waves, flame, and so on, the features of particle system simulation model goes beyond the geometric constraints, can describes complex nature by a simple model.This topic designed the fountain model based on the Op

6、enGL particle system, discussed detailly the properties of particles in the model and its changes, achieved a more realistic with the dynamic changes and changes in parabolic fountain features, used texture mapping and tracking technology for 3-D vision Fountain rendering. the same time, Line way us

7、ed to replace the traditional Point way exaggerated particles to achieve fountain simulation. The simulation way is a real fountain comparison, speedly, in general PC can get satisfactory results.Key Words:Particle systems, fountain simulation, effects目 录1. 绪论 11.1 自然景物模拟概述 11.2 粒子系统的背景及其介绍 11.3 国内外

8、研究现状 21.4 喷泉模拟的要求及意义 32. 相关学术知识 52.1 物理学知识 52.2 数学知识 52.3 OpenGL 62.4 MFC 73. 粒子系统的设计 103.1 Particle System API 103.2 常见的粒子运动模型 113.3 喷泉模拟的算法 123.3.1 喷泉粒子初始化 123.3.2 喷泉粒子的运动轨迹 133.3.3 粒子的消亡 133.3.4 喷泉绘制 143.4 纹理映射技术 144. 系统实现 164.1 开发环境 164.2 粒子生成 164.3 粒子活动 174.4 水柱生成 194.5 喷泉旋转 204.6 纹理贴图 214.7 场景

9、实现 235. 总结 26致谢 27参考文献 281. 绪论1.1 自然景物模拟概述自然景物模拟一直都是计算机图形血研究者面临的巨大挑战之一。由于自然景物的形状随即变化,表面往往含有丰富的细节,很难用传统的解析曲面来描述。常见的景物模拟方法一般有以下两种:第一种:根据数学函数构造出景物外型,然后变换时间函数t。这类方法可以称为过程动画的方法,比较典型的是Fournier模拟水波的方法。第二种:从物体运动的物理原理出发,一般是求解一组力学方程,得到质点在各个时刻的状态。这类方法可以称为基于物理的方法,比较典型的是Foster的方法。比较而言,过程动画方法比较简单、计算效率较高,但效果比较单调,适

10、用范围比较狭窄。基于物理方法的效果比较真实,适用范围广泛一些,但是计算起来非常复杂,效率比较低。在模拟诸如云、烟、火等不规则模糊物体时,粒子系统是迄今为止被认为是最成功的一种算法。为了方便用粒子系统模拟各种物体,McAlbster结合OpenGL,用C+开发了一套粒子系统API。利用这套API可以很方便地对运动的物体进行动态模拟,首先将粒子的活动进行简单的分析和描述,然后对粒子系统进行场景渲染,结合OpenGL提供的一些功能如纹理映射效果,可以模拟很多种自然景物。本课题就可以利用这种方法来模拟多种喷泉的效果。1.2 粒子系统的背景及其介绍粒子系统到底是什么?所谓的粒子系统,就是将人们看到的物体

11、运动和自然现象,用一系列运动的粒子来描述,再将这些粒子运动的轨迹映射到显示屏上,在显示屏上看到的就是物体运动和自然现象的模拟效果了。利用粒子系统,可以在屏幕中表现诸多的特殊效果,如:焰火、火苗、落叶、雪花飞舞等。不怕做不到,就怕想不到。只要你的想象力足够丰富,你可以创造出意想不到的奇迹来。粒子系统的基本思想是:采用许多形状简单的微小粒子作为基本元素,用它们来表示不规则模糊物体。这些粒子都有各自的生命周期,在系统中都要经历“产生”、“运动和生长”及“消亡”三个阶段。粒子系统是一个有“生命”的系统,因此不象传统方法那样只能生成瞬时静态的景物画面,而是可以产生一系列运动进化的画面,这使得模拟动态的自

12、然景物成为可能。利用粒子系统生成画面的基本步骤是:1、产生新的粒子;2、赋予每一新粒子一定的属性;3、删去那些已经超过生存期的粒子;4、根据粒子的动态属性对粒子进行移动和变换;5、显示由有生命的粒子组成的图像。粒子系统采用随机过程来控制粒子的产生数量,确定新产生粒子的一些初始随机属性,如初始运动方向、初始大小、初始颜色、初始透明度、初始形状以及生存期等,并在粒子的运动和生长过程中随机地改变这些属性。粒子系统的随机性使模拟不规则模糊物体变得十分简便。粒子系统应用的关键在于如何描述粒子的运动轨迹,也就是构造粒子的运动函数。函数选择的恰当与否,决定效果的逼真程度。其次,坐标系的选定(即视角)也有一定

13、的关系,视角不同,看到的效果自然不一样了。1.3 国内外研究现状国外的研究始于80年代初期,由Reeves W. T.于1983年首次提出粒子系统模型,并用其模拟了焰火、爆炸等效果,他还成功的利用该模型模拟了电影AR TREK I: The Wrath of Khan中的一系列特技镜头。1985年Reeves W. T.和Blau发展了粒子系统,他们用“volume filling”基本单元模拟生成那种随时间改变形状,但又基本保持不变的实体,如随风飘动的花草树叶。此后从理论到技术都得到了进一步发展:Reeves W. T.提出了关于粒子系统消隐绘制的算法,称之为“近似概率算法”,用于解决阴影、

14、可见面问题,且取得了很好的效果。Fournier A.等在研究海浪模型中利用粒子系统模拟了浪花,提出了浪花的产生条件粒子运动速度和海流曲面传播速度之间的差异要超过一定的条件,即粒子运动速度与海浪曲面传播速度之间的差异要超过一定的阀值,否则产生泡沫。Karl Sims研究了粒子的动画及绘制算法,他利用粒子系统的并行特点,提出了一个并行的粒子绘制系统,该系统能绘制不同形状、大小、透明度的粒子,并能进行反走样、消隐、运动模糊的处理。Reed等人用粒子系统成果的模拟了闪电。Reynolds在其群体行为研究中,又极大的扩展了粒子系统的功能,并将其作为一种建模工具,他提出了粒子间相互结合的思想,从而使粒子

15、与粒子之间进行交互,并阐明利用大量的简单图元间的交互作用可产生复杂的行为。Miller&Pearce、Tonnesen等人开发了双粒子系统来模拟像流体一样的或溶化的物质。David E. Breen利用“交互粒子”模拟了布匹、织物。再如大家非常熟悉的三维动画制作的最新软件3DS MAX就载有“Spray”和“Snow”两个粒子系统来模拟喷射的火花、飘舞的雪花、飞扬的尘埃等特殊效果,3DS MAX还有带有两个外挂模块“Sand Blaster”和“All Purpose Particles”,用来创建气泡、焰火、冲击波等动态图像。总之,粒子系统能够创建各种动画效果。国内近年来有许多大学对粒子系统

16、模型进行了研究、探索和应用,并取得了一定的成果。例如,徐迎庆等人利用粒子系统模拟了水面溅起的水沫以及流水与石头碰撞后产生的水花等效果;宋万寿等人在IBM PC386机上开发了基于粒子系统方法的焰火及树木模拟实验系统等。国内的研究虽然取得了一定的进展,但采用粒子系统有效地模拟模糊景物的论文并不多,需要进一步开发、研究与实现。总而言之,粒子系统为如何模拟具有复杂结构及复杂运动的物体提供了一个简洁、抽象的描述。用它所创建的动态模糊效果是其他图像生成技术难以达到的。但迄今为止,所考虑的都是单个粒子的运动,对物体的模型也作了许多假设。至于粒子间的相互作用、碰撞检测等都未深入涉及。另外,利用3DS MAX

17、制作的烟火、浪花,其效果还不太理想,需要将粒子系统与其他方法想结合,开发出更新更好的算发,这些都是今后的研究方向之一。1.4 喷泉模拟的要求及意义本课题要求使用OpenGL编写程序实现粒子系统,并模拟一个正在喷水的喷泉,绘制出三维动画。具体要求如下:1. 理解图形学中粒子系统的原理和作用;2. 利用OpenGL实现粒子系统;3. 模拟一个正在喷水的喷泉,考虑水滴的材质和光照属性,或选择较好的贴图;4. 喷泉的水流要连贯,水滴成流,符合现实情况,有曲线的喷出下落路线;5. 设计并绘制一个场景,使得场景比较逼真。目前,粒子系统还处于萌芽阶段,很多技术不完善,还有很多的发展空间。本课题用粒子系统对喷

18、泉进行模拟,是为了让更多人的了解粒子系统,对粒子系统的重要性有个初步的认识,并为大有致力于粒子系统的同学有机会更深入的了解。2. 相关学术知识计算机图形学中经常要用到许多物理、数学学知识。就拿本课题来介绍,喷泉的模拟就是模拟喷泉的样子,喷泉是一个抛物线,怎样去模拟呢?首先必须清楚喷泉中水滴是怎么运动的,这就要用到物理学的知识了初速度、运动方向和所受到的力决定其运动线路。然后怎么保证水滴在那个空间运动呢?这就需要运用数学知识了。定义水滴的坐标,水滴根据坐标物理学的变化进行抛物变化,然后形成一个喷泉模型。当然喷泉的模拟也离不开计算机图形学本身的知识,这些知识都将会在这部分介绍下。2.1 物理学知识

19、本课题运用了物理学中的抛物落体运动的知识。即:物体在只收到重力的作用下以一定的初始速度进行匀加速运动。(1)抛物运动的加速度是g=9.8m/s*s(2)抛物运动的距离公式是Sx=Vxt+gt*t/2 Sy=Vyt+gt*t/2 Sz=Vzt 2.2 数学知识本课题运用了数学知识坐标系统空间坐标系和向量知识。下面先简单介绍下空间坐标系:空间坐标系中使用最广泛的是笛卡尔坐标系,它基于空间中三条相互垂直的坐标轴:X轴、Y轴和Z轴。要定义空间中的一个点P,需要三个坐标:X,Y,Z,写成P(X, Y, Z)。三个坐标轴构成三个平面:X-Y平面、X-Z平面和Y-Z平面。这三个平面将整个空间分成8个子空间,

20、在3D笛卡尔坐标系中共有8个卦限。3D笛卡尔坐标系包括左手坐标系和右手坐标系两种。左手坐标系(LHS)假设X-Y为纸张上或屏幕上的水平轴和垂直轴,正Z轴指向纸内或屏幕内。右手坐标(RHS)假设X-Y为纸张上或屏幕上的水平轴和垂直轴,正Z轴指向纸外或屏幕外。如图1:图2-1 空间坐标系其次介绍一下向量:向量就是既有大小又有方向的量。在本课题中,需要运用的主要是一些向量的坐标运算。在几何学上,有同样方向和长度的两个向量相等;在数学上,有同样维数和分量的向量相等。在几何学上,向量大小是有向线段的长度,知道向量的分量,利用公式(2-1)就能计算出向量的大小:u=sqrt(ux*ux+uy*uy+uz*

21、uz) (2-1)其中,u表示向量u的长度。标准化向量是让向量的大小等于1,即被叫作单位向量。可以利用向量大小以及各个分量把一个向量标准化,如公式(2-2)所示:=u/u=ux/u,uy/u,uz/u (2-2)其中,表示单位向量。通过分别把两个向量的各个分量相加,可以得到向量之和,如公式(2-3)所示:u+v=(ux+ux,uy+uy,uz+uz) (2-3)2.3 OpenGLOpenGL是OpenGraphicsLib的缩写,是一套三维图形处理库,也是该领域的工业标准。计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术。OpenGL就是支持这种转换的程序

22、库,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。OpenGL是目前用于开发可移植的、可交互的2D和3D图形应用程序的首选环境,也是目前应用最广泛的计算机图形标准。OpenGL是一套的计算机图形处理系统,是图形硬件的软件接口,GL代表图形库(Graphics Library)。OpenGL具有可移植性,任何一个OpenGL应用程序无须考虑其运行环境所在平台与操作系统,在任何一个遵循OpenGL标准的环境下都会产生相同的可视效果。OpenGL不是一种编程语言,而是一种API(Application Programming Interface,应用程序

23、编程接口)。当我们说某个程序是基于OpenGL的或者说它是个OpenGL程序是,意思是说它是用某种编程语言如C或C编写的,其中调用了一个或多个OpenGL库函数。作为一种API,OpenGL遵循C语言的调用约定。OpenGL主要包括三个函数库,它们是核心库、实用函数库和编程辅助库。核心库中包含了OpenGL最基本的命令函数。核心库提供了一百多个函数,这些函数都以”gl”为前缀,用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等所有的二维和三维图形操作。实用函数库是比核心库更高一层的函数库,它提供四十多个函数,这些函数都以”glu”为前缀。由于OpenGL是一个

24、图形标准,是独立于任何窗口系统或操作系统的,在OpenGL中没有提供窗口管理和消息事件响应的函数,也没有鼠标和键盘读取事件的功能,所以在编程辅助库提供了一些基本的窗口管理函数、事件处理函数和简单的事件函数。这类函数以”aux”作为前缀。值得一提的是,目前AUX编程辅助库已经很大程度上被GLUT库取代了。GLUT代表OpenGL应用工具包(OpenGL Utility Toolkit),是一个与窗口系统无关的工具包。它作为AUX库的功能更强的替代品,用于隐藏不同窗口系统API的复杂性。GLUT的子程序的前缀使用”glut”。2.4 MFCMFC简单来说就是VC的类库,是一个编程框架。MFC(Mi

25、crosoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。从总体上来看,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后编译,则通过类库

26、实现了应用程序特定的逻辑。构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能等等。MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。

27、CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。MFC以“C+”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致

28、虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装

29、起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息

30、。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目

31、的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。3. 粒子系统的设计3.1 Particle System API为了方便粒子系统的运用,McAllister以OpenGL为基础,利用C+开发了一套Particle System API。这套API具有以下优点:运行高效、运用灵活、参数独立、升级方便、硬件无关、学习简单等。该系统共分为五个部分:粒子组、活动、活动列表、属性和域。所有的粒子都存在粒子组中,粒子组是一组具有相同作用力的粒子集合。用户可以定义多个具有不同行为的粒子组

32、分别进行调用,但在某一时刻,只能有一个粒子组是活动的。活动是粒子组修改粒子属性的函数。活动列表类似与OpenGL中的显示列表,可以把一系列操作都封装在一个活动列表中,需要的时候调用相应的活动列表。属性提供了一些函数,用来修改粒子的颜色、大小和生命周期等属性。域定义了矩形、球体、园盘、圆柱等一些形状,使行为函数、属性函数能在域范围内做定义。下面的伪代码描述了粒子系统运行的流程:for each particle group j pCurrentGroup(j)/指定group j为当前粒子组 for each time step per rendered framepSource()/产生新的粒子 other actions/改变粒子组属性 pMove()/更新粒子位置 end fo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1