1、I毕业论文论文题目基于粒子系统的雨雪模拟系别计算机系专业年级学号姓名指导教师、职称年月日ITHESIMULATIONOFRAINANDSNOWBASEDONPARTICLESYSTEMCOLLEGE_SPECIALTYANDGRADENUMBERNAMEADVISORSUBMITTEDTIMEII目录摘要1ABSTRACT211课题研究背景312课题研究的意义313国内外研究现状414课题研究的内容52基于OPENGLMFC的建模基础621OPENGL6211OPENGL简介6212OPENGL发展历程622OPENGL渲染管线7221显示列表7222求值器7223基于顶点的操作8224图元装
2、配8225像数操作8226纹理装配8227光栅化8228片段操作823MFC9231MFC简介9232MFC的发展历程9233MFC的特点9234MDI(多文档界面)应用程序构成1024基于OPENGLMFC的三维模拟的编程环境配置123粒子系统1531粒子系统概述1532粒子系统的原理1533粒子的属性初始状态1534粒子的生成1635粒子的运动1736粒子的消亡1737粒子的绘制184系统的设计及实现1941系统的软件开发平台1942系统的设计路线1943系统的实现19431雨雪粒子属性设计如下19432系统框架相关的类21433雨雪粒子系统的逻辑设计2244实验结果分析23III5结论与
3、展望2751结论2752展望27参考文献28致谢291摘要自然景物的模拟一直是计算机图形学中最具挑战性的问题之一。关于水、云、烟、雨、雪等自然景物的模拟,在计算机游戏、三维动画、影视及广告中有着广泛的应用。自然景观中雨雪的模拟,可以大大提高三维场景的逼真度。本文在认真分析和总结目前国内外雨雪模拟方法的基础上,结合视景仿真对虚拟场景的需求和应用,以友好的交互性、较强的真实感和实时性为目标,提出一种基于粒子系统对雨雪模拟的新方法。粒子系统是实时模拟雨雪效果的一种有效方法。本文基于粒子系统的基本原理建立了雨雪模拟系统,模型分析了雨雪粒子的属性,雨雪粒子的运动及雨雪粒子的绘制等,并提出了基于粒子系统和
4、OPENGL的降雨、降雪实时模拟的方法。实践结果表明,该方法可以实时绘制出比较真实的降雨降雪现象,该方法实现的雨雪模拟效果比较真实,而且在普通PC上也可以满足一般动画的实时性要求。本文基于WINDOWSXP操作系统,使用VISUALC60作为开发工具,结合OPENGL和MFC编程,设计并实现了基于粒子系统的雨雪模拟演示系统,生成的动态雨雪具有真实的视觉效果,并且满足了实时的要求。关键词粒子系统;雨;雪;模拟;OPENGL2ABSTRACTSIMULATIONOFNATURALPHENOMENAHASALWAYSBEENONEOFTHEMOSTCHALLENGINGTASKSINCOMPUTER
5、GRAPHICSSIMULATINGNATURALPHENOMENA,SUCHASWATER,CLOUD,SMOKE,RAIN,SNOWANDSOON,HASBEENWIDELYUSEDINCOMPUTERGAME,3DANIMATION,MOVIEPRODUCTIONANDADVERTISING,ETCSIMULATIONOFRAINORSNOWINNATURALPHENOMENACANGREATLYIMPROVETHEFIDELITYOF3DSCENEINTHISPAPER,BASEDONCAREFULANALYSISANDSUMMINGUPOFTHERAINANDSNOWSIMULATI
6、ONATHOMEANDABROAD,INNEEDOFVISUALSIMULATIONOFNATURALSCENE,WITHTHEPURPOSEOFFRIENDLYINTERACTION,BETTERREALITYANDREALTIME,ANEWMETHODOFRAINANDSNOWSIMULATIONONPARTICLESYSTEMISBROUGHTFORWARDREALTIMESIMULATIONOFRAINANDSNOWPARTICLESYSTEMISANEFFECTIVEMETHODBASEDONTHEBASICPRINCIPLESOFPARTICLESYSTEMSIMULATIONSY
7、STEMBUILTRAINANDSNOWSIMULATIONSYSTEM,MODELANALYSISOFTHEPROPERTIESOFRAINANDSNOWPARTICLES,RAINANDSNOWPARTICLEMOVEMENT,RAINANDSNOWPARTICLERENDERING,ETCANDPRESENTEDBASEDONPARTICLESYSTEMSANDOPENGLRAINFALL,SNOWFALLREALTIMESIMULATIONMETHODSPRACTICALRESULTSSHOWTHAT,THISMETHODCANCOMPAREREALTIMERENDERINGAREAL
8、PHENOMENONOFRAINANDSNOW,THEMETHODTOACHIEVERAINANDSNOWMODELINGCOMPARISONOFTHEREAL,ANDINGENERALPC,CANALSOSATISFYTHEGENERALREQUIREMENTSOFREALTIMEANIMATIONINTHISPAPER,BASEDONWINDOWSXPOPERATINGSYSTEM,USINGVISUALC60ASDEVELOPMENTTOOLS,COMBINEDWITHOPENGLANDMFCPROGRAMMING,DESIGNANDIMPLEMENTATIONOFRAINANDSNOW
9、PARTICLESYSTEMSIMULATIONBASEDDEMONSTRATIONSYSTEM,THERESULTINGDYNAMICRAINANDSNOWWITHREALVISUALEFFECTS,ANDSATISFYREALTIMEREQUIREMENTSKEYWORDSPARTICLESYSTEMRAINSNOWSIMULATIONOPENGL31绪论用计算机生成真实感图形一直是计算机图形学中具有挑战性的研究方向之一,图形的真实感反映了计算机生成的图形与客观世界的相似程度。随着计算机技术的飞速发展,真实感图形的仿真、动画、计算机美术、科学可视化等领域的应用越来越广,而且对真实感的要求也
10、越来越高。生成客观世界真实感图形的关键是建立恰当的模型。在虚拟环境中,有一类不规则物体,即特殊效果(如雨的下落,雪花的飘零等),它们具有不光滑性、不确定性、不规则性以及运动变化性,而且这种变化是极其复杂、混乱的,并受到周围环境的影响,不可能精确的描述它们,对它们的研究十分困难。OPENGL作为一个高性能的图形和交互式视景处理的工业标准,已经越来越为3D工作者所接受,它是一个开放的三维图形软件包,独立于窗口系统和操作系统,具有很好的移植性。它所具有的强大功能使其在视景仿真方面得到了越来越广的应用。目前,不规则物体建模方法主要有基于分形几何的建模、基于过程纹理函数的建模、基于粒子系统的建模以及基于
11、物理的建模等方法。近年来,诸如雨、雪、烟、火焰等自然景物的模拟一直是计算机图形学中最具挑战性的课题之一,其模拟在计算机游戏、影视、广告、视景仿真等各种领域中有着广泛的用途。1983年,REEVES首次提出了粒子系统,其优点在于可以用简单的体素来构造复杂的物体,从而为自然现象的造型提供了强有力的技术手段1。11课题研究背景随着计算机科技的不断发展进步,计算机图形学己成为一个具有巨大潜力的新兴产业,对于人们的学习、生活以及学习领域都产生了重大的影响和推动作用。尤其是图形学领域中的计算机动画目前广泛应用于航空航天、影视广告、行为模拟、装演设计、虚拟场景等各种领域。可以预见,在未来的信息工业和产业中,
12、计算机动画将更进一步发挥巨大的作用,占据重要的地位。近年来,对于自然景物的生成与模拟一直是计算机图形学和动画研究中的热门课题。其中的雨雪下落、云雾闪电、瀑布浪花、飞沙尘埃、花草树木等景物的模拟更具有挑战性。这些自然景物因其形状、形态随时间的推移而动态地、随机地发生变化,很难用常规的建模方法及模拟技术来生成。随机模型是处理这类问题的一种先进的方法,在随机模型中首推FOURNIER的分形算法和REEVES的粒子系统方法1。其中粒子系统方法具有良好的随机性和动态性,能逼真地模拟动态景物。因此,研究利用粒子系统方法模拟自然景物,有着重要的科学意义和广泛的应用前景。12课题研究的意义计算机图形学中对不规
13、则物体的模拟十分困难,像烟雾、云、火焰、雨雪等自然现象的外观形状极不规则,没有光滑的表面,随着时间变化而变化,这使得应用经典几何来模拟,如直线、圆弧、样条线等来模拟逼真度很差。并且,在应用计算机生成场景时,巨大的计算量往往使之成为图形生成显示的瓶颈。因此,如何简化且有效的模拟如火焰,烟雾,雨雪,瀑布等不规则自然景物就成为计算机真实感图形生成的关键技术。对不规则物体的模拟十分困难,原因在于1雨、雪等均系自然天气现象,其形成都是由无数小颗粒随机运动而产生,外观形状极不规则,没有光滑的表面,而且极其复杂与随意,并可能随时间而发生变化。2几乎每一个人都知道这类现象,如雨雪是什么样子,但却很少有人能够准
14、确地将其形状描述出来。现实中的雨雪模拟需要很大的人力,物力,财力,而且也存在一定的安全隐患。应用计算机模拟动态的不规则的自然景物有很广泛的应用前景。比如将计算机生成的许多奇幻的图像添加到影视作品中可以大大提高作品的观赏性,如雨雪飘落、云雾闪电、瀑布浪花等。另外在比较复杂的可视化系统中,如虚拟战场中,雨雪、火光、烟雾等特效的逼真性直接影响整个系统。在装潢设计、航空航天、游戏制作等领域也都有广泛的应用。粒子系统方法在模拟不规则动态自然景物的研究领域丌辟了很大的发展空间,粒子系统的优点就是用简单的粒子图元来构造出传统计算机图形学难以构造的复杂物体,而且具有很强的真实感和实时性,粒子系统在对自然景物的
15、模拟方面得到了广泛的应用。自然景物的模拟是计算机图形学理论研究与实际应用的重点与难点;在构造这类复杂物体的几何模型时需要大量的有效数据,而且这4些数据都是随机性,计算量相当大,如何以粒子系统基本算法来构造复杂物体并逼真的对其进行实时渲染是虚拟现实技术研究的新课题。虚拟雨雪的沉浸性、真实性以及实时性效果是传统平面效果图和动画播放所无法达到的,而应用粒子系统实现雨雪的模拟具有较强的真实感,能达到人们对虚拟现实系统沉浸感的要求,使人能在虚拟场景中有身临其境的感觉,更具有实时性。因此虚拟雨雪技术在一定程度上会得到广泛的应用,利用粒子系统实现雨雪的三维效果在虚拟现实领域具有一定的研究意义。13国内外研究
16、现状在对于仿真喷泉、火焰、雨、雪、雾等这些生活中常见的自然景物过程中,由于这些景物具有不规则性,动态性和随机性,模拟起来十分的困难,同时也是虚拟场景中不可缺少的部分。而自然景物的模拟一直是虚拟现实领域的重要研究内容,如何在虚拟场景中真实的再现生活中的自然景物是极具挑战性的课题之一。自然景物的模拟一般有两种方法2一种是基于物理建模技术的方法基于物理建模技术的方法主要是通过对NAVIERSTOKES纳维埃一斯托克斯,简称NS方程方程求解,求出流体过断面时的平均流速业3。我国的徐迎庆等人从水力学方程出发,提出了一个基于物理模型的模拟流水和波浪的方法4;陈前华等人基于物理建模方法与隐式曲面造型技术,实
17、现了滴水涟漪的模拟5。这些方法的共同特点是要求解NAVIERSTOKES方程,或者是简化后的NAVIESTOKES方程,但由于NAVICRSTOKES方程组是非线性方程组,很多情况下都难以精确地求出解析解,即使能求出其特解也往往因为求解计算量太大而难以达到实时的要求。另一种是基于粒子系统的方法。自然景物与规则的几何物体不同,它们的表面往往包含有丰富的细节或具有随机变化的形状,这些细节与随机变化的形状很难用传统的解析曲面来描述。比如说对喷泉、水流、云、雾、烟、雪、火花等自然景物的模拟上,传统的造型方法具有局限性,而粒子系统的出现却较好的解决了这一难题。粒子系统能充分体现模糊物体的动态性和随机性,
18、能很好地模拟风中飘摇的树枝、天空中的流云、水面上的浪花、山中的薄雾、雨和雪花、园林中的喷泉等三维复杂自然景物。粒子系统的优点就是用简单的粒子图元来构造出传统计算机图形学难以构造的复杂物体,而且具有很强的真实感和实时性,粒子系统在对自然景物的模拟方面得到了广泛的应用。雨雪是这类景物中具有代表性的动态景物,是一种自然天气,我们经常会看到,所以很多游戏都会设计实现雨雪效果,让玩家可以体会到真实感。粒子系统很适合在虚拟场景中建立雨雪效果。自从1983年由REEVES提出1粒子系统训以来,许多的研究者对粒子系统进行了研究与发展。REEVESWT用粒子系统模型模拟了火焰、爆炸等效果,他还成功模拟了电影ST
19、ARTREKIITHEWARTHOFKHAN中行星被撞击后所产生的爆炸及火焰等一系列特殊效果。1955年,REEVESWT和BLAU6发展了粒子系统他们用“V01UMEFILLING”基本单元法生成随时间改变形状但又基本保持不变的实体,如随风飘动的花草树叶;1990年,KARLSIMS研究了粒子的动画及绘制算法,他利用粒子系统的并行特点,提出了一个并行的粒子绘制系统,该系统能绘制不同形状、大小、颜色、透明度的粒子7;1994年,STAM和FLUME8用“元球”来描述火焰等气态现象,并给出了一种扭曲“元球”的算法,使模拟的气态景物的外形更加不规则,从而更加真实;1994年,WONG9使用粒子系统
20、实现了一个简单的瀑布模型,在该模型中设置了瀑布下落过程中的障碍如岩石等;1995年,MCALISTER结合OPENGL10,用C开发了一套粒子系统API。利用这套API可以很方便地对运动的物体进行动态模拟,首先将粒子的活动进行简单的分解和描述,然后对粒子系统进行场景渲染,能模拟多种自然景物;1996年,FOURNIERA等在研究海浪模型中利用粒子系统模拟了浪花,并提出了浪花所产生的条件11;1992年,TENGSEELOKE等人基于粒子系统,使用牛顿运动定律来描述烟火,对烟火的运动、颜色、形状、亮度、尾迹等进行仿真,取得了很好的效果12。1998年,MATTHIASUNBESCHEIDEN13
21、和ANDRZEJTREMBILSKI运用粒子系统,从云的物理原理出发,结合纹理映射技术建立了云的模型,其核心是采用具有纹理的多面体顶点集代替粒子群,该模型大大减少了粒子系统中粒子的数量,从而使粒子系统的实时仿真得以实现。2004年,LUTZLATTA在个人计算机的GPU上实现了并行的粒子系统,能实时处理1,000,000个粒子,并首次提出了大规模粒子系统的5概念14,15。国内人员对粒子系统的研究也在深入,一些研究人员利用粒子系统实现了火烟、云、导弹尾气等复杂景物的效果,如20002001年,年张芹、吴慧中16等模拟了火焰、烟等所具有的动态性和随机性;2001年,詹云开等17运用粒子系统方法模
22、拟了火焰及其爆炸等效果。2001年,王静秋等18通过对焰火细节和特点的分析,给出了模拟焰火的数据结构,用粒子系统实现了焰火的动态模拟,其中主要介绍了焰火的颜色、亮度、透明度、形状、大小、尾迹和生命周期等特性及旋转、星状等特殊显示效果的模拟,2004年,谢剑斌,郝建新等运用粒子系统模拟了雨点和雪花的降落19;2004年,彭群生和管宇实现了瀑布的模拟20;2006年,徐利明与姜显明实现了雨、雪的效果21。14课题研究的内容本文基于粒子系统的基本原理建立了雨雪粒子系统模型,在认真分析和总结目前国内外雨雪模拟方法的基础上,深入分析粒子系统的基本原理,雨雪粒子的属性,雨雪粒子的运动及雨雪粒子的绘制等,采
23、用基于粒子系统和OPENGL的降雨、降雪实时模拟的方法,对OENGL渲染管线等建模基础及MFC编程框架展开具体分析,最终实现雨雪模拟效果。本文内容将组织如下第一章描述粒子系统发展的背景、意义及国内外研究现状,提出基于粒子系统和OPENGL的降雨、降雪实时模拟的方法。第二章详细展开分析研究OPENGL渲染管线等建模基础及MFC编程框架。第三章详细分析粒子系统的基本原理,雨雪粒子的属性,雨雪粒子的运动及雨雪粒子的绘制等的控制。第四章通过雨雪粒子的运动规律,特征,轨迹详细陈述实现系统的设计。并对设计的过程,实现的原理,关键技术和实验结果进行分析。第五章总结本文方法并给出进一步的研究展望。62基于OP
24、ENGLMFC的建模基础21OPENGL211OPENGL简介OPENGL(全写OPENGRAPHICSLIBRARY)是个定义了一个跨编程语言、跨平台的编程接口APPLICATIONPROGRAMMINGINTERFACE的规格,它用于生成二维、三维图像。这个接口由近三百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。而另一种编程接口系统是仅用于MICROSOFTWINDOWS上的DIRECT3D。OPENGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。OPENGL的高效实现(利用了图形加速硬件)存在于WINDOWS,很多UNIX平台和MACOS。这些实现一般由显示设
25、备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库MESA是一个纯基于软件的图形API,它的代码兼容于OPENGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。OPENGL规范由1992年成立的OPENGL架构评审委员会(ARB)维护。ARB由一些特别兴趣于建立一个统一的普遍可用的API的公司组成。根据OPENGL官方网站,2002年6月的ARB投票成员包括3DLABS、APPLECOMPUTER、ATITECHNOLOGIES、DELLCOMPUTER、EVANSINTPIXELFORMATIFPIXELFORMATCHOOSEPIXELFORMATM_PDCGETSA
26、FEHDC,RETURNFALSEIFSETPIXELFORMATM_PDCGETSAFEHDC,PIXELFORMAT,RETURNFALSERETURNTRUE初始化创建OPENGLRCHRCWGLCREATECONTEXTM_PDCGETSAFEHDCWGLMAKECURRENTM_PDCGETSAFEHDC,HRC并添加WM_CREATE消息处理函数,然后在ONCREATE函数中进行调用/TODOADDYOURSPECIALIZEDCREATIONCODEHEREINIT初始化的获取DCM_PDCNEWCCLIENTDCTHISASSERTM_PDCNULL设置OPENGL视锥体即投影
27、变换矩阵GLMATRIXMODEGL_PROJECTION/在修改前重设坐标系GLLOADIDENTITY14设置视口变换/SETTHEVIEWPORT视口TOBETHEENTIREWINDOWGLVIEWPORT0,0,W,HGLUPERSPECTIVE45,RATIO,1,1000设置OPENGL模型变换GLMATRIXMODEGL_MODELVIEWGLLOADIDENTITY4实现应用程序逻辑在本雨雪粒子系统中为CMYTESTVIEW类添加了许多成员函数INVERTWAVEMAP函数来编程下雨效果;DRAWWAVE函数用来编程雨粒子下落时的水波属性;LNITIALIZEOPENGL行数
28、用来编程初始化OPENGL场景;ONSIZE函数用来添加窗口缩放时的图形变换函数;ONTIME用来添加定时器响应函数和场景更新函数;LNIT函数用来编程雪粒子属性。5清理工作(析构函数中释放DC,RC指针)VOIDCMYRAINVIEWONDESTROYCVIEWONDESTROY/TODOADDYOURMESSAGEHANDLERCODEHERE153粒子系统31粒子系统概述粒子系统PARTICLESYSTEM是用于不规则模糊物体建模的一种方法,1983年由REEVES首次提出1。粒子系统在模拟不规则模糊物体方面具有独特的优点,是传统图形学建模方法所不能相比的。粒子系统是由大量结构简单的粒子
29、图元构成,每个粒子都有各自的属性,如大小、颜色、位置、运动速度和生命周期等;粒子系统是一个动态实体,每个粒子的属性均是时间的函数,随时间的推移而不断变化,组成粒子系统的有效粒子的属性共同确定了被模拟物体的特征。粒子的这种动态变化体现了不规则模糊物体运动的随机性,因此粒子系统是迄今为止模拟不规则模糊物体最为有效的一种建模方法。32粒子系统的原理粒子系统的基本原理是采用大量的、具有一定生命和属性的微小粒子图元作为基本元素来绘制不规则的模糊物体对象在粒子系统中,粒子图元的形状可以是小球、立方体、正四面体或其它的形体。此外每个粒子还具有大小、颜色、透明度、位置、运动速度和运动方向、生命周期等属性。粒子
30、在系统中要经过“产生”、“运动”和“消亡”三个阶段,在这三个阶段中粒子的大小和形状随时间变化,其它性质如粒子的透明度颜色和运动都将随机变化,从而充分体现出不规则物体的动态性和随机性。粒子系统理论主要由以下5部分组成心引1物质的粒子组成假设。粒子系统中,把运动的模糊物体看作由有限的具有确定属性的流动粒子所组成的集合,这些粒子以连续或离散的方式充满它所处的空间,并处于不断的运动状态,粒子在空间和时间上具有一定的分布。2粒子独立关系假设。这里包含两个意思,一是粒子系统中各粒子不与场景中任何其它物体相交,二是粒子之间不存在相交关系,并且粒子是不可穿透的。3粒子的属性假设。系统中的每个粒子并不是抽象的,
31、它们都具有一系列的属性,比如质量属性、存在的空间位置属性、外观属性如颜色、亮度、形状、尺寸等、运动属性如速度、加速度等、生存属性生命期,其中颜色、亮度等属性随着时间不断地发生变化。4粒子的生命机制。粒子系统中的每一个粒子都具有一定的生命周期,在一定的时间周期内,粒子经历新生、活动和消亡三个基本生命历程。5粒子的运动机制。粒子在存活期间始终是按一定的方式运动的。33粒子的属性初始状态对于每个粒子,系统都要赋予其一定的属性,粒子的属性决定了粒子的状态,I对于模拟不同对象的粒子,粒子的属性没有统一的标准,通常是在满足基本视觉效果的前提下建立比较简单的模型,主要包括外观属性、空间属性、运动属性、生命属
32、性等。1外观属性外观属性包括粒子的形状、尺寸和颜色,它们共同决定了系统对不规则模糊物体模拟的逼真程度。1粒子形状REEVES的经典粒子系统将粒子的初始形状设置为点,即使用点光源进行建模,在实现时只需用一个像素来显示点,这是最简单的粒子系统模型;在较复杂的粒子系统中,单个粒子的形状可以采用线段、多边形、圆形、椭圆形和球形等复杂元素来取得较好的视觉效果。2粒子尺寸粒子尺寸的大小是与粒子形状同时被确定的,粒子尺寸越大,生成的图形真实感越差,但由于计算量减少,系统的实时性提高了,相反,如果减小粒子的尺寸,则提高了图像的分辨率,增强了真实感,但计算量也将同时增加,因此导致实时性下降。在具体实现的过程中,
33、粒子尺寸的大小体现了图像真实感和系统实时性的折衷。3粒子颜色粒子的初始颜色由系统设定,粒子从生成到消亡的过程中,粒子颜色从初始颜色变成消亡颜色,体现了颜色分布的物理特性。粒子的初始颜色分量包括粒子的三原色R,G,B和粒子的透明度值ALPHA,粒子颜色的初始值由下式确定16INITIALCOLORR,G,BMEANCOLORR,G,BRANDVARCOLORR,G,BINITIALCOLORALPHA10系统根据被模拟对象的物理特征来确定粒子颜色的透明度,ALPHA的取值范围为0,1的实数,式INITIALCOLORALPHA10中ALPHA取值10,表示粒子的颜色最亮,即完全不透明。2空间属性
34、空间位置属性包括初始位置坐标和方向。在一个粒子系统中通常有几个参数来确定粒子的初始位置,首先是粒子在三维空间中的几何坐标X,Y,Z,它确定了粒子在空间中的方位,其次是粒子在空间中的方向,它由粒子的本地坐标系统旋转得到,可表述为一个二维向量ANGX,ANGY,分别表示粒子绕由粒子中心决定的本地坐标系的X轴和Y轴旋转的角度。如图4以球形粒子为例描述了粒子的初始位置。图4粒子的初始位置3运动属性运动属性是指粒子的运动速度,粒子的初始运动速度由大小和方向两部分组成INITIALVELOCITYMEANVELOCITYRANDVARVELOCITYMEANVELOCITY和VARVELOCITY分别表示
35、粒子的平均速度和随机速度变化范围。粒子的速度方向由粒子系统模拟的物体物理特征确定,通常是某个固定方向或某个区域内的随机方向。4生命属性新粒子生成时都被系统赋予了生命周期LIFETIME,生命周期是用来计算粒子在系统中的存活时间,随着时间的推移,不断有粒子消亡同时不断有新粒子生成,生命周期粒子寿命用粒子在系统中存活的帧数来表示。34粒子的生成粒子的产生包括粒子产生的时间、粒子产生的空间以及数量。1粒子生成的时间通常粒子系统在初始化的时候就生成了一定数量的粒子,这部分粒子很大程度上决定了模糊物体的形态。在系统运行的过程中,每隔一定时间周期生成新的粒子并加入系统中。2粒子产生的空间确定了粒子的生成时
36、间后,要确定的是粒子生成的空间。粒子生成的空间是指系统选取一定的区域范围来生成新的粒子,根据粒子系统所模拟的对象不同而有所区别,雨雪粒子产生区域是长方体发17射器,可以使用面发射器,所以用随机函数初始粒子位置的时候使其在一定的范围内,并且在速度上也引入了随机函数,使得降雪效果看起来更逼真。3粒子产生的数量粒子系统中粒子的产生分两部分,一是初始时刻产生的粒子,这部分粒子的数量十分关键,一般较大,它在很大程度上决定了模拟物体的形态;二是为了补充系统中消亡的粒子,每隔一定的时间周期如每帧新生的粒子,这部分粒子数量较少。粒子通过受控的随机过程加入到粒子系统中,在系统确定初始粒子数量时,采用以下方法给定
37、粒子数量的平均值和随机变化范围,实际粒子数量如下NPARTSFMEANPARTSFRANDVARPARTSF上式中,RAND是一个返回在10到1O之间均匀分布的随机数的过程,MEANPARTSF是预先设定的粒子平均数,VARPARTSF是预先设定随机数分布范围。粒子的数量直接关系到图形的逼真度和实现的实时性,是粒子系统最重要的参数之一,它决定了模拟物体的密度,数目过小,图形将会严重失真,然而失真度与粒子数量并不成严格的线性关系,当粒子数量过多时,计算及绘制的时间增大,又会使粒子系统的实时性严重下降,二者同样不成线性关系。合适的粒子数量仅仅局限在很小的区域中,因此选择合适的粒子数量很关键。一般需
38、根据图形的真实感和实时性在实际中的重要程度,来确定粒子数量的范围。35粒子的运动粒子产生并初始化后,粒子根据初始化时速度的大小及方向开始在系统中运动,粒子的运动体现在粒子属性随时间的不断变化。1外观属性的变化粒子的形状与尺寸大小在不发生碰撞的情况下不会发生变化,只有粒子的颜色与透明度随时间推移而不断变化,I帧时刻粒子属性与IL帧时粒子属性变化规律如下下文的I与I1均是此含义COLORILCOLORICOLORTALPHAILALPHAIAPHAT2空间属性的变化粒子的空间位置主要由粒子在前一帧时刻的位置、粒子的速度和时间间隔决定POSITIONXILPOSITIONXIVELOCITYXITP
39、OSITIONYI1POSITIONYIVELOCITYYITPOSITIONZILPOSITIONZIVEOCITYZIT3运动属性的变化系统在运行过程中,粒子的速度是不断改变的,由经典力学得到粒子在I帧时的速度是由粒子的初速度和粒子所受的合外力决定的,假设粒子在受合外力的作用下产生的加速度为ACCELERATION,则第IL帧时粒子的速度为VELOCITYXI1VELOCITYXIACCELERATIONXITVELOCITYYI1VELOCITYYIACCELERATIONYITVELOCITYZI1VELOCITYZIACCELERATIONZIT4生命属性的变化粒子的寿命随时间的推移
40、不断减少,当前时刻IL帧粒子的生命周期数为I帧粒子生命周期的衰减变化,如下式所示LIFETIMEILLIFETIMEI一ATTENUATIONPERFRAMET其中ATTENUATIONPERFRAME是每帧粒子的生命衰减率,表示每经过一帧图像减少的生命周期数。36粒子的消亡系统运行随着时间的推移,粒子的生命周期数逐渐减少。当粒子的寿命为零时,即粒子消亡;18另外由于粒子运动的不规则性,粒子的空间位置超出了预先设定的区域或者超出屏幕所能显示的区域,系统都会认为粒子消亡并删除这些粒子。对于雨雪粒子来说,当粒子寿命LLYETIME0时,系统删除粒子;另一种情况就是粒子寿命LIFETIME0,但随着
41、雨雪粒子的不断运动,粒子的透明度降为零时,即完全透明与背景融合,粒子同样消亡。旧粒子消亡,新粒子生成的循环过程反映了雨雪降落的动态特征。37粒子的绘制当某一帧的粒子状态被全部确定以后,粒子控制机制就调用绘制函数将其送到显示缓存进行绘制。粒子的绘制和普通图形一样,如果粒子存在于三维空间,那么粒子之间就会存在遮挡、阴影和反走样等问题。如果在二维空间,粒子间就不存在上述的问题,不用考虑粒子的重叠。粒子的绘制包括以下几种点粒子、线性粒子和面粒子的绘制22。点粒子的绘制在REEVES提出的粒子系统里1,为了简化绘制算法,提出了两条假设。一是假设所有粒子都以点光源绘制,避免了粒子间的相互遮挡和大量粒子三维
42、中的深度排序。在这个假设中还包含一个隐含假设,即粒子光源的光强独立于粒子的视点的空间距离,因此映射到同一个像素点上的粒子的光强可以不用经过深度排序而直接叠加。另一个假设是绘制时只考虑不规则模糊物体本身,即粒子系统中的各个粒子不会与背景环境中的其他物体出现交错、融合和碰撞,只对系统中的粒子进行绘制。这样的假设大大降低了系统的消耗,提高了模拟的实时性。线性粒子的绘制SIMS提出了一种适合并行实现的灵活的粒子绘制法7。为每一个线性粒子定义了一个头一个尾,头尾都有自己的位置、颜色和透明度等属性,头和尾中间用切线相连,所有的参数都通过从头到尾的线性插值得到。透明度从中心到边缘递减。线性粒子绘制时,首先将
43、粒子的头尾位置和半径换到坐标系,然后将粒子分割为像素基片,按深度进行排序和隐藏计算,最终显示。面粒子的绘制STOLK和VANWIJK提出了面粒子的绘制方法23。他们把粒子造型为非常小的有向光源面片,用这些面片构造出离散的流面和时面,并将其用于3D流场的可视化。194系统的设计及实现本模拟系统基于OPENGL和MICROSOFTVISUALC60平台,在WINDOWS环境下开发而成;系统配置为INTELRPENTIUMR4266GHZ处理器,1G内存,ATIRADEONX300/X550/X1050SERIES128M显存图形卡。41系统的软件开发平台MICROSOFTVISUALC60包括了综
44、合的微软基本类库MFCLIBRARY,MFC库是MICROSOFT为利用VC开发的WINDOWS应用程序而提供的应用程序框架,在这个框架的支持下,对于不同的应用程序,编程的主要任务是填写各自特殊部分的代码,这样,可以大大减少编码工作,使得开发WINDOWS应用程序变得简单而高效;VISUALC6O提供有复杂的资源编辑器,可以编辑对话框、菜单、工具栏、图像和其它许多WINDOWS应用程序的组成元素;MICROSOFTVISUALC60还有一个非常好的集成开发环境DEVELOPERSTUDIO,用它可以在编写C程序时对程序的结构进行可视化的管理。此外,MICROSOFTVISUALC60还提供了一
45、个完全集成的DEBUG工具,可以让你从各个角度来检查程序运行中的微小细节24。MICROSOFTVISUALC60不仅仅适用于WINDOWS编程,还为网络编程和数据库编程提供了强大的支持。开放性图形库OPENGL是专业图形处理、科学计算等高端应用领域的标准图形库,最初是美国SGI公司为图形工作站开发的一种功能强大的三维图形机制或者说是一种图形标准。它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户服务器模式工作,它还可以与各种编程语言紧密相接。42系统的设计路线本文采用粒子系统模拟雨雪现象,由于自然雨雪具有复杂的与外界在不停的交互,受到风力等的作用,本文在雨
46、雪粒子的基本模型的基础上对雨雪粒子的绘制算法进行了简化。使用长方体的面发射器生成初始粒子系统,采用数组交替计算运动轨迹,采用定时器时间计算粒子生命,内存上也使用数组组织粒子系统。系统总体结构如下图图5系统总体结构图43系统的实现431雨雪粒子属性设计如下雨粒子属性代码VOIDCMYRAINVIEWINVERTWAVEMAPINTTEMPCMAP20CMAPNMAPNMAPTEMP水波渲染的代码VOIDCMYRAINVIEWDRAWWAVEINTI,JGLDISABLEGL_TEXTURE_2DGLCOLOR4F1,1,1,02GLBEGINGL_TRIANGLES/以三角形组近似波和平静的水面
47、,由两个数组交替计算实现,WAVEMAP数组的值即Y值含雨和波涟漪FORI0IMAPY1IFORJ0JMAPX1JGLVERTEX3FJ2,WAVEMAPCMAPIJ,I2/WAVEMAPCMAPIJ为0,则为平静的水面非0,则为波涟漪或雨GLVERTEX3FJ12,WAVEMAPCMAPI1J1,I12GLVERTEX3FJ2,WAVEMAPCMAPI1J,I12GLVERTEX3FJ2,WAVEMAPCMAPIJ,I2GLVERTEX3FJ12,WAVEMAPCMAPIJ1,I2GLVERTEX3FJ12,WAVEMAPCMAPI1J1,I12GLENDGLENABLEGL_TEXTURE
48、_2D雪粒子系统的初始化,即发射器的设置VOIDCGOODVIEWINITSNOWSRANDGETTICKCOUNTFORINTNIDEX0NIDEXXNIDEXM_SNOWNIDEXACTIVETRUEM_SNOWNIDEXLIFE1000FFORINTNINDEX0NINDEXXNINDEXM_SNOWNINDEXNINDEXTEXTURERAND3M_SNOWNINDEXXGLFLOATRAND200100M_SNOWNINDEXYGLFLOATRAND200100M_SNOWNINDEXZ1000FGLFLOATRAND2521FORINTI0IXIM_SNOWININDEXTEXTU
49、RERAND3M_SNOWIXGLFLOATRAND200100M_SNOWIZGLFLOATRAND200100M_SNOWIY1000FGLFLOATRAND25M_SNOWIXROT0M_SNOWIYROT0M_SNOWIZROT0M_SNOWIDROPSPEED001FRAND502M_SNOWIROTSPEED01FRAND102432系统框架相关的类本系统中用到以下几个类CWND窗口,它是大多数“看得见的东西”的父类(WINDOWS里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CVIEW、框架窗口CFRAMEWND、工具条CTOOLBAR、对话框CDIALOG、按钮CBUTTON,ETC一个例外是菜单(CMENU)不是从窗口派生的。CDOCUMENT文档,负责内存数据与磁盘的交互。最重要的是ONOPENDOCUMENT读入,ONSAVEDOCUMENT(写盘),SERIALIZE(读写)。CVIEW视图,这个类是最重要的类,所以下面只给出这个类的类图,如图6。CVIEW类负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是ONDRAW重画窗口,通常用CWNDINVALIDA