火焰模拟综合课程设计报告_第1页
火焰模拟综合课程设计报告_第2页
火焰模拟综合课程设计报告_第3页
火焰模拟综合课程设计报告_第4页
火焰模拟综合课程设计报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、综合设计报告综合设计II信息与软件工程学院综合设计课题名称: 火焰模拟 指导教师:吴佳学生信息:序号姓名学号1(组长)李洁厅20142209010132陈铭20142209010183余永辰20142209010214陈明辉20142209010145易怀晨20142209010306杨海霞201422090103228目录摘要3第一章 绪论61.1 选题背景及意义61.2 国内外研究现状61.3 主要内容与章节安排101.4 本章小结10第二章 火焰模拟的设计112.1 总体设计112.2功能模块设计112.3本章小结12第三章 火焰模拟的实现123.1 开发环境介绍123.1.1 Open

2、GL 简介123.1.2 OpenGL 绘图过程133.2 主要功能模块的实现143.3 本章小结21第四章 测试及成果展示214.1 测试环境214.2测试用例和结果214.3成果展示254.4本章小结26第五章 总结与展望26参考文献27摘要用计算机生成真实感图形一直是计算机图形学中最具有挑战性的研究方向之一,特别是对不规则模糊物体的模拟十分困难。在火焰、烟、云等不规则模糊物体中,由于火焰的复杂特性,虽然当前计算机的计算能力和存储能力有了很大的进步,但还不能完整的再现火的所有的细节,因此根据不同的应用方向,研究火焰及其动态行为具有重要的意义。首先,对目前国内外模拟火焰的各种算法进行了分析和

3、总结,接着介绍了火焰粒子系统的基本原理及应用。其次,针对火焰模拟的真实性和实时性的关键问题,设计了一种新的模拟火焰的粒子系统模型,在初始化新的火焰粒子的位置属性时,首先采用正态分布赋值,为了加快系统的运行速度,又采用连续帧的关系方程来生成下一帧的位置;为了增加粒子系统的灵活性,引入空气速度场模拟火苗跃动现象;为了增强绘制结果的真实感并缩短系统的运行时间,结合纹理映射技术,采样实际火焰燃烧视频记录中的连续关键帧作为纹理进行渲染;由于粒子系统中粒子数量很多,为便于对粒子系统的管理,使其更具灵活性和可控性,引入高级粒子系统的思想,为了进一步提高系统的可控性,对结构进行了改善,由三层扩展到四层,在粒子

4、系统与管理层之间增加了粒子系统族层,使得改进后的火焰粒子系统由粒子类、粒子系统类、粒子系统族、粒子系统管理类组成,提高了系统的交互性和可控性。AbstractGenerating a visually convincing image especially for those irregular fuzzy objects is one of the most challenging and difficult problems in computer graphics. In irregular fuzzy objects such as the flame, smoke, cloud, e

5、tc., the simulation of fire is of a great challenge because the completeness of fire. Though computing capability of the computer and memory ability have been greatly improved at present, reproducing all details of fire that can't be intact yet, so according to different application directions,

6、study fire and its dynamic behavior have important meanings.Firstly, this paper analyzed and summarized various algorithms of the domestic and international simulation fire at present, then introduced the basic theory and application of fire particle system.Secondly, according to the key problem of

7、real time and reality in fire simulation based on particle system, a new fire model based on particle system was proposed in this paper. The position of new particles are initialized with normal distributing, then use the relation function of continuing frame to generate the next frame position in o

8、rder to decrease the implementation time. To increase the controllability, we also introduce velocity field to simulate the flickering of fire. In order to increase the reality and decrease the implementation time, we used the texture mapping technology to improve the effect and efficiency of render

9、ing, and the texture were sequence key frame sampled from real fire video record. The number of particles was very large. We introduce advanced particle system to mange the particle system, and let it controllable and flexible. The exiting three-layer hierarchy of the particle system was extended to

10、 a four-layer hierarchy. The improved fire system was composed of particle class, particle system class, particle system family class and particle system manager. It improved the interaction and controllability. 第一章 绪论1.1 选题背景及意义 火焰是自然界最常见的现象之一,火焰现象的模拟可以提高三维场景的真实感,在计算机游戏、三维动画及广告中有着广泛的应用,但是火焰所具有的动态性和

11、随机性使其很难用常用的三维建模方法来模拟,一般的渲染技术也难以实现其真实感并且实时性差。火、烟和云等自然现象的模拟也有着广泛的应用途径。如一杯热气腾腾的咖啡、窗外林子里弥漫的薄雾和战场中熊熊燃烧的大火可以让虚拟社区和游戏的玩家身临其境;海啸来临时几十米高的海浪席卷而来的画面和星球相撞时爆炸产生的大火、碎片迎面扑来的场景会让坐在电影院观众席中的你惊心动魄、无比震撼;还有,在现实社会中,准确的预测大火在不同的建筑物和森林中的蔓延方式,无疑会帮助消防人员正确的指导火灾中的人群如何疏散;飞行师训练时,在模拟飞行机中真实的再现周围的飞行环境,可以避免不必要的伤亡和减少高额的训练开支。国内外学者一直在努力

12、探索,先后提出了表示火、烟、云等不规则模糊物体的粒子系统模型、细胞自动机模型、分形模型、扩散过程模型、光照模型及纹理映射模型等。其中“粒子系统”是迄今为止被认为模拟不规则模糊物体最为成功的一种图形生成算法。在火、烟和云这些气体现象中,因为人们对火的理解的不完全性,火的模拟显得尤其困难。火的物理化学性质复杂、运动规律随时间变化难以预测,虽然当前计算机的计算能力和存储能力有了很大的进步,但是还是不能完整的再现火的所有的细节,因此根据不同的应用方向,研究恰当的方法用计算机图形学技术描述火及其动态行为具有重要的意义。1.2 国内外研究现状关于火焰模拟的方法基本上可以分为三类:基于纹理的方法、基于物理的

13、方法和基于细胞自动机的方法。1.2.1 国外火焰建模研究现状 基于纹理的火焰模拟方法 基于纹理的方法就是采用纹理模拟火焰。Watt采用图像纹理模拟火焰,他先创建一个标准的火焰形状(原始图像),然后,采取某种方法干扰取样点,扭曲标准的火焰形状,从而得到运动的火焰外形。在干扰取样点时,通常采用某种噪音(Noise)干扰,如果只是简单地采用随机数干扰,得到的效果将不会很理想。除了图像纹理时,还可以采用实体纹理(Solide Textures)来模拟火焰,实体纹理的概念最早由Peachey和 Perlin提出,Perlin采用实体纹理的方法模拟了 2D 和 3D 的火,用分形扰动(Fractal Pe

14、rturbation)模拟火的湍流运动。1989 年 Inakage用纹理映射的方法实现了二维火焰的简单模型,即需要绘制出表面上一点时,通过将三维点转换为二维纹理图案中的点来确定此点的颜色,此点的纹理颜色被输入阴影模型来确定表面交点处的颜色。这种方法模拟出来的火焰人工痕迹很大,难以获得具有真实感的运动图像,只适用于图像真实感要求不高的场合。 King 等采用“Texture Splat”作为基本的图元来模拟火、烟和尘土等不规则物体。Wei 等在此基础上,通过采用流体力学中的 LBM 模型(Lattice Boltzmann Model)使“Splats”图元遵循一些简单的物理法则,提出了一种可

15、以让“Splats”与周围环境相交互的方法。因为“Texture Splat”的运动简单,所需的“Splat”图元数目有限,所以,相对粒子系统的方法来说,这种方法具有较好的时间性能。 Neyret提出了一种模拟真实流体的方法,这种方法不需要求解大量流体力学公式,它通过模拟一个低流动性并使它输送一个特殊纹理来实现模拟流体的整体运动以及小规模的漩涡。难点是维持特定范围的纹理统计性在空间和时间上连续性。基于物理的火焰模拟方法 基于物理的方法就是从自然界中的基本物理法则出发建立火的模型。Perry 和 Picard 从燃烧学出发,提出了用速度传播模型生成火焰的方法,Chiba 等计算了燃烧物体的热交换

16、,Jos Stam在他们基础上,从热力学定律出发提出了用扩散过程描述火和其它气体现象及其传播的方法。Jos Stam的基本思想是认为气体的物理特征需要用随时间和空间变化的物理量来表示,这些物理量包括气体粒子的密度、扩散的速度、温度以及辐射性能,各个物理量之间的关系由一系列的 N-S(Navier-Stokes)方程表示。因为求解 N-S 方程的计算量非常大,因此假定气体不可压缩,在给定风向的条件下,就可以引入扩散方程来计算密度和温度的变化。 近些年来,一些研究者越来越关注火的具体的、准确的动态行为,它们的目标是准确的预测火势的发展以及火与周围环境的交互作用,然后将其应用研究于科学研究、消防火势

17、预测和飞行员飞行环境模拟等方面。这种准确的物理火焰模型通常分为两类:地带模型(Zone Model)和域模型(Field Model)。Andersson 的地带模型使用有限个地带描述了火在一个封闭的房间内造成的影响。域模型通常也被称作 CFD 模型(Computational Fluid Dynamics Model),它把空间分成许多相似的单元。如 Carlsson模型将三维空间分成若干个可控制的体元(Voxel),即小的立体空间,然后运用一系列物理方程确定每个体元的质量、温度和压力等性质,然后由这些体元性质的变化来表现火焰及其运动。虽然域模型可以得到非常精确的结果,但是,它的计算量是非常

18、大的,而且会产生一大堆难以解释的输出数据。Govindarajan等给出了一种可视化的方法解释CFD模型产生的结果。 L 系统(Lindenmayer System)通常用于模拟单独的植物或者整个生态系统,2003 年 Zaniewski和 Bangay用扩展的 L 系统模拟了封闭的建筑物内火势的蔓延。这个模型还可以用来预测火的蔓延速度,因此可以用来帮助确定建筑物内最安全的地带。基于物理的方法还有一类是从图像的真实感出发建立火的模型。研究者们使用一些物理方程或者简化的物理方程来模拟火的外观形态和动态行为,他们的目的是得到真实感强的动画,并将其应用于电影、电视和游戏等娱乐性的虚拟场景中。 198

19、3 年 Reeves提出了粒子系统的方法来模拟自然界中的不规则景物,粒子系统的方法是采用某种图元来定义物体的体积而不是采用多边形来定义物体的表面的方法在电影Star Trek II: The Wrath of Khan中,Reeves采用两级粒子系统来模拟火墙。最近,一部分研究者开始采用复杂的“元球(Blob)造型”来代替简单的粒子。“元球”由空间中的某点及环绕该点的密度域组成,“元球”的密度可以随时间被力场(如风场)改变,“元球”的形状也可以任意的扭曲,因此它更适合于描述气态物体的细节。Stam和 Fiume用“元球”来描述火焰等气态现象,并给出了一种扭曲“元球”的算法,使模拟的气态景物的外

20、形更加不规则,从而更加真实。Beaudoin等采用单独的火苗作为基本的元素来描述火。整个描述火的过程可以分为三个部分:传播、火苗的变化和绘制。火苗由一串相连的粒子构成,靠近燃烧物体表面的粒子是根部,剩余的粒子链根据用户定义的参数运动。因为 Beaudoin等采用单独的火苗作为基本的元素,这种简化不仅加快了系统运行的速度,还使整个模拟过程的控制变得更加直观。 Nguyen等结合物理原理和图形技术得到了目前视觉效果最真实的火焰。他们的火焰模型由三个部分组成:蓝色的焰心、黑体辐射(Blackbody Radiation)和烟尘(或者烟灰)。此外,Nguyen 等还绘制了火发出的光线,通过描述火的辐射

21、和散射等现象,他们还解决了人眼的色适应问题。Nguyen等的模型非常成功地模拟了气态燃料产生的火,但是相对于Beaudoin等的模型,它没有很好的模拟固体物体的燃烧产生的火。基于细胞自动机的火焰模拟方法 1991年Pakeshi等提出了基于细胞自动机的火焰模型,在Pakeshi的火焰模型中,用一些简单的初始值和简单的状态转换规则来描述火焰的动态变化,每一个细胞单元有三个状态变量,即温度燃料密度气体流向,通过改变细胞变量的初始值,就可以得到不同的图像,但是Pakeshi等的火焰模型很难明确火焰温度、燃料密度和气体流向间的关系。另外,浙江大学也使用细胞自动机的方法模拟了实时的海洋波浪。 1.2.2

22、 国内火焰建模研究现状 基于粒子系统的方法 2001年南京理工大学的张芹针对虚拟战场中的特殊需求,研究了火焰效应的建模理论,引入了火苗粒子,建立了基于结构化粒子系统的火焰模型,将粒子系统建模方法和分形几何的建模方法相结合,提出了分形粒子理论。2002年王治刚等人分析了结合粒子系统和纹理映射对火焰模拟的过程,以及在对火焰模拟实践中,为求达到实时性和真实感效果要注意控制的因素。2003 年武汉理工大学周丽琨基于粒子系统理论建立自然界中不规则模糊物体的模型,采用粒子系统生成火焰、烟云等不同种类模糊物体的三维模型,根据各物体自身的物理及几何特点,调整粒子系统产生时的参数,通过软件实验,摸索出对上述每种

23、物体合适的参数值,以及粒子系统在外界作用力(如风或者磁场等)的作用下,如何适当地对其参数进行调整。2004年北京理工大学的赵春霞等人设计了粒子系统火焰模型,详细讨论了模型中粒子的属性及其变化,实现了具有较强真实感的颜色变化和动态摇曳等火焰特性,采用纹理映射和视线跟踪技术进行三维火焰渲染。湖南大学的周洁琼在 2005年提出了基于粒子系统的火焰模拟,通过对火焰外观的分析,采用高斯随机数为新的火焰粒子的初始位置赋值,这样,火焰粒子在生成时密度满足高斯分布,燃点中心的粒子密集,边界稀疏,体现出了火焰的团簇性。 基于纹理的方法 2003年中国民用航空学院的丁维才定位火焰是一种湍流现象,为了避免基于物理过

24、程模型得到湍流函数带来的大量数学计算,使用了经验模型,通过 Noise 函数得到湍流函数值的结果。在此基础上,给出了采用体过程建模技术模拟火焰的方法,特别是火焰柱的形成过程以及一片火焰苗的生成过程。浙江大学的林夕伟在2004年先用少量粒子勾勒火焰的外轮廓线,再用纹理绘制的方法填充火焰纹理。这样既利用了粒子系统形成轮廓线的真实感,又避免大量的粒子状态运算,并能体现动态火焰纹理的一致性和连续性。 基于细胞自动机的方法 2001年哈尔滨工业大学的唐好选提出了基于细胞自动机的火焰生成算法,同时向其它类型的气流场模拟进行了扩展;对于有滚团效果的火焰现象(简称火团),提出了粒子系统和旋涡场相结合的火团生成

25、算法,为具有旋涡现象的可变形气流场提供了有效的模拟方法。 1.3 主要内容与章节安排火焰模拟是以例子系统为基础,模拟火焰产生、运动和消失的过程,而该过程的研究往往涉及到物理学、数学、统计学、化学研究。在国内外有很多种实现火焰模拟的方法,有的基于物理方法,有的基于纹理方法。这次实验是用C+语言,以Opengl为底层图形库,基于粒子系统来实现火焰模拟的。本文中主要内容和章节安排如下:第二章描述了火焰模拟的设计,包括定义粒子类、视角控制、部分其他功能的添加等;第三章描述了火焰模拟的实现,包括开发环境的介绍、主要功能模块的实现以及粒子的初始化参数设置;第四章给出了测试及成果展示,以及本实验最终的成果展

26、示。1.4 本章小结火焰模拟是一种较为复杂的系统,它对于动画、消防、科学等多方面具有很重要的意义。而国内外研究该模拟的方法具有很多种,每种都有各自的特点,但大部分都会使用粒子系统为基础,该方法简单、有效、模拟较为真实。第二章 火焰模拟的设计2.1 总体设计本文实现的火焰模拟的总体设计如下:1. 在空间中生成两张30X30的平行网格,上下相聚一定距离。2. 从上面的网格随机生成粒子,向下面的网格运动,设置粒子的颜色使得看上去向雪花下落的样子。这部分为雪花粒子系统。3. 在下面网格中心部分生成火焰粒子系统。2.2功能模块设计我们知道计算机本身只能处理数字和显示二维的图形,因此如果我们想要在算机图形

27、设备上生成三维场景,首先需要在给定的参考坐标里选择三维空间合适的位置绘制三维火焰以及其他三维物体,由此构成场景,并且为了方便用户观察,我们还需要设定所要期望的观察场景的视点、视方向、视域等。在初始化场景模块中,我们将根据三维场景视图显示的原理,设定合适的参数。1. 雪花粒子系统在particles.h中定义粒子类,包括初始位置、速度、加速度、颜色、透明度等属性等属性。在textures.cpp中对雪花粒子使用tga方式贴图,在main.cpp中设置雪花粒子的初始值,生成雪花粒子系统。2. 火焰粒子系统在textures.cpp中对雪花粒子使用tga方式贴图,在main.cpp中设置火焰粒子的初

28、始值,并生成火焰粒子系统。该火焰系统分为两成结构,底部一层的粒子范围较宽,但生命周期较短。中间一层的初始位置在底部偏上,范围就在中心位置周围,且生命周期要长。两层结构中间部分会有部分粒子重合,所以中间的火焰较为明亮。并且伴随着粒子生命周期的进行,粒子旋转上升,粒子的透明度和颜色会改变,形成渐变的情况。除了最简单的火焰系统的实现,我们还增加了按键控制,如qe按键控制火势的大小,zc键控制了风向。3. Camera模块在camera.h中定义了camera类,包括移动camera,旋转camera等函数。在main.cpp中,使用了鼠标左键来控制camera的旋转,wasd按键控制camera的移

29、动。2.3本章小结本章给出了全部功能模块及实现。通过初始化场景设立合适的视点,然后通过编写的particle类生成火焰及雪花的效果模拟,并且在火焰上加上火势的按键控制,为火焰和雪花共同增加吹风效果。第三章 火焰模拟的实现3.1 开发环境介绍3.1.1 OpenGL 简介 经过多年来对计算机三维可视化技术的研究,目前研究者已经开发出许多优秀的可视化工具,尤其是由著名的 SGI 公司研发的 GL 三维图形库。GL 三维图形库使用起来简便而且具有强大的功能,因此获得许多三维应用软件开发者的青睐,开发出的三维软件在医学、产品设计、建筑设计及流体力学研究方面以获得广泛的应用。随着计算机技术的继续发展,G

30、L 已经进一步发展成为 OpenGL,OpenGL 规范由 ARB(OpenGL architecture review board)负责管理,SGI Microsoft(微软)、Intel(英特尔)、IBM、Sun、Compaq 和 HP 等公司都已经加入OpenGL ARB 成为成员。 OpenGL 独立于硬件设备、窗口系统和操作系统,因此以 OpenGL 为基础开发库的应用程序可以在各种平台之间移植,如 Windows 95、Windows NT、Unix、Linux、MacOS、OS/2。OpenGL 包括了 120 个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互。O

31、penGL 提供了一种比较直观的编程环境,三维图形开发的技术人员可以方便的借助 OpenGL 的图形处理能力以及图形函数很快地设计出三维图形以及三维交互软件。 OpenGL 可以用各种编程语言调用。各种流行的编程语言如 C、C+、FORTRAN、Ada 和 Java 等都可以调用 OpenGL 中的库函数。OpenGL 可以绘制各种简单的三维物体,也可以高效地生成交互的复杂动态场景,它有如下主要功能: (1)建模:OpenGL 图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。 (2)变换:OpenGL 图形库的变换包括

32、基本变换和投影变换。基本变换有平移、旋转、变比和镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。 (3)颜色模式设置:OpenGL 颜色模式有两种,即 RGBA 模式和颜色索引基于OpenGL 的真实感三维海面模拟(Color Index)。 (4)光照和材质设置:OpenGL 光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝

33、分量与材质红绿蓝分量的反射率相乘后形成的颜色。 (5)纹理映射(Texture Mapping)。利用 OpenGL 纹理映射功能可以十分逼真地表达物体表面细节。 (6)位图显示和图像增强图像功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图像效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果。 (7)双缓存动画(Double Buffering)双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 (8)选择和反馈:OpenGL 为支持交互式应用程序设计了选择操作模式

34、和反馈模式。在选择模式下,则可以确定用户鼠标制定或拾取的是哪一个物体,可以决定将把哪些图元绘制入窗口的某个区域。而反馈模式,OpenGL 把即将光栅化的图元信息反馈给应用程序,而不是用于绘图。3.1.2 OpenGL 绘图过程 OpenGL 的绘制主要是将二维或三维的物体模型描绘至帧缓存,这些物体由一系列的描述物体几何性质的顶点(vertex)或描述图形的像素组成。OpenGL 执行一系列的操作把这些数据最终转化为像素数据并在帧缓存中形成最后的结果。其基本过程如图3.1所示。图3.1 OpenGL的绘制过程OpenGL 指令从左侧进入 OpenGL,有两类数据,分别是由顶点描述的几何模型和由像

35、素描述的位图、影响等模型,其中后者经过像素操作后直接进入光栅化。评价器用于处理输入的模型数据,例如对顶点进行转换、光照,并把图元剪切到视景体中,为下一步光栅化做好准备。显示列表用于存储一部分指令,留待合适时间以便于快速处理。光栅化将图元转化成二维操作,并计算结果图像中每个点的颜色和深度等信息,产生一系列图像的帧缓存描述值,其生成结果称为基片。基片操作主要的有帧缓存的更新、测试、融合和屏蔽操作,以及基片之间的逻辑操作和抖动。3.2 主要功能模块的实现1. 摄像头控制模块包括camera类中的移动,旋转等,camera.h中的函数定义如代码3.1代码class CCameraprivate:SF3

36、dVector Position;SF3dVector ViewDir;bool ViewDirChanged;GLfloat RotatedX, RotatedY, RotatedZ;void GetViewDir ( void );public:CCamera();void Render ( void );void Move ( SF3dVector Direction );void RotateX ( GLfloat Angle );void RotateY ( GLfloat Angle );void RotateZ ( GLfloat Angle );void RotateXYZ (

37、 SF3dVector Angles );void MoveForwards ( GLfloat Distance );void StrafeRight ( GLfloat Distance );SF3dVector GetPosition();3.1 摄像头的类定义2. 粒子系统中粒子具有一些属性,比如粒子的速度,加速度,旋转速度,颜色,大小,透明度等。定义的代码如3.2.和3.3。代码3.2 粒子类中的粒子属性定义class CCCParticleprivate: /粒子的位置,这可能是全局或者局部的,取决于坐标系SF3dVector m_Position; /移动粒子:/粒子速度:SF3

38、dVector m_Velocity;/粒子每秒的加速度:SF3dVector m_Acceleration;/旋转粒子float m_fSpinAngle; /弧度度量/粒子旋转速度float m_fSpinSpeed;/旋转加速度float m_fSpinAcceleration;/粒子透明度float m_fAlpha;float m_fAlphaChange;/粒子颜色SF3dVector m_Color; /x=r, y=g, z=bSF3dVector m_ColorChange;/粒子大小 float m_fSize;float m_fSizeChange;/操作生命周期:flo

39、at m_fDieAge;/死亡时间float m_fAge;/粒子年龄CCCParticleSystem * m_ParentSystem;public:bool m_bIsAlive; /粒子是否活着void Initialize(CCCParticleSystem * ParentSystem);void Update(float timePassed);/如果粒子活着则更新void Render(); ;代码3.3 粒子在运动过程中的一些属性定义SF3dVectorm_EmitterPosition; /发射器位置SF3dVectorm_MaxCreationDeviation; /声

40、明距离发射器可能的位置SF3dVectorm_StandardEmitDirection; /发射方向SF3dVectorm_MaxEmitDirectionDeviation;floatm_fMinEmitSpeed;floatm_fMaxEmitSpeed; /发射速度floatm_fMinEmitSpinSpeed;floatm_fMaxEmitSpinSpeed; /旋转速度 角度/秒floatm_fMinSpinAcceleration;floatm_fMaxSpinAcceleration; /旋转加速度SF3dVectorm_AccelerationDirection; /加速度

41、方向(重力(0/-1/0):floatm_fMinAcceleration;floatm_fMaxAcceleration; /加速度大小floatm_fMinEmitAlpha;floatm_fMaxEmitAlpha; /粒子创造时的透明度floatm_fMinDieAlpha;floatm_fMaxDieAlpha; /粒子消亡时的透明度/粒子创造/死亡时的粒子大小floatm_fMinEmitSize;floatm_fMaxEmitSize;floatm_fMinDieSize;floatm_fMaxDieSize;/粒子创造/死亡时的粒子颜色:SF3dVectorm_MinEmitC

42、olor;SF3dVectorm_MaxEmitColor;SF3dVectorm_MinDieColor;SF3dVectorm_MaxDieColor;3. 当然,我们还具有一些键盘和鼠标控制功能,具体实现细节见代码3.4。注意:由于风向和火势大小控制代码量太多,没有贴上来。代码3.4 键盘和鼠标控制模块void KeyDown(unsigned char key, int x, int y)switch(key)case 27:exit(0);break;case 'w':g_Camera.MoveForwards( -0.1 ) ;Display();break;cas

43、e 's':g_Camera.MoveForwards( 0.1 ) ;Display();break;case 'a':g_Camera.StrafeRight(-0.1);Display();break;case 'd':g_Camera.StrafeRight(0.1);Display();break;intxold = 0;intyold = 0;static intleft_click = GLUT_UP;void MouseFunc(int button, int state, int x, int y)if (GLUT_LEFT_B

44、UTTON = button)left_click = state;xold = x;yold = y;void MotionFunc(int x, int y)if (GLUT_DOWN = left_click)g_Camera.RotateX(y - yold) / 10.0f);g_Camera.RotateY(x - xold) / 10.0f);glutPostRedisplay();xold = x;yold = y;4. 火焰和雪花的具体参数实现模块见代码3.5.代码3.5 火焰和雪花的粒子类实现/初始化火焰g_ParticleSystem1.Initialize(Num_Pa

45、rticleSystem1);g_ParticleSystem1.m_iParticlesCreatedPerSec = Num_ParticlesCreatedPerSec1;g_ParticleSystem1.m_fCreationVariance = 0.0f;g_ParticleSystem1.m_bRecreateWhenDied = false;g_ParticleSystem1.m_fMinDieAge = 0.5f;g_ParticleSystem1.m_fMaxDieAge = 1.5f;g_ParticleSystem1.SetCreationColor(1.0f,0.0f

46、,0.0f,1.0f,0.5f,0.0f);g_ParticleSystem1.SetDieColor(1.0f,1.0f,1.0f, 1.0f,0.5f,0.0f);g_ParticleSystem1.SetAlphaValues(1.0f,1.0f,0.0f,0.0f);g_ParticleSystem1.SetEmitter(0.0f,0.0f,0.0f,now_EmitterDeviationX1, now_EmitterDeviationY1, now_EmitterDeviationZ1);g_ParticleSystem1.SetAcceleration(F3dVector(Ac

47、celeration_X,1.0f,0.0f),0.3f,0.4f);g_ParticleSystem1.SetSizeValues(0.04f,0.08f,0.06f,0.12f);g_ParticleSystem1.m_fMaxEmitSpeed = 0.2f;g_ParticleSystem1.m_fMinEmitSpeed = 0.3f;g_ParticleSystem1.SetEmissionDirection(0.0f,1.0f,0.0f,0.08f,0.5f,0.08f);g_ParticleSystem1.m_bParticlesLeaveSystem = true;g_Par

48、ticleSystem1.SetSpinSpeed(-0.82*PI,0.82*PI);g_ParticleSystem1.m_iBillboarding = BILLBOARDING_PERPTOVIEWDIR;g_ParticleSystem1.LoadTextureFromFile("particle1.tga");/雨g_ParticleSystem2.Initialize(10000);g_ParticleSystem2.m_iParticlesCreatedPerSec = 4950;g_ParticleSystem2.m_fCreationVariance =

49、 0.0f;g_ParticleSystem2.m_bRecreateWhenDied = false;g_ParticleSystem2.m_fMinDieAge = 2.0f;g_ParticleSystem2.m_fMaxDieAge = 2.0f;g_ParticleSystem2.SetCreationColor(0.0f,0.0f,1.0f,0.3f,0.3f,1.0f);g_ParticleSystem2.SetDieColor(0.4f,0.4f,1.0f, 0.0f,0.0f,1.0f);g_ParticleSystem2.SetAlphaValues(1.0f,1.0f,1

50、.0f,1.0f); g_ParticleSystem2.SetEmitter(0.0f,2.0f,0.0f, 1.0f,0.0f,1.0f);g_ParticleSystem2.SetAcceleration(F3dVector(Acceleration_X, 0.0f, 0.0f),0.0f,1.0f);g_ParticleSystem2.SetSizeValues(0.01f,0.01f,0.01f,0.01f);g_ParticleSystem2.m_fMaxEmitSpeed = 1.0f;g_ParticleSystem2.m_fMinEmitSpeed = 1.0f;g_Part

51、icleSystem2.SetEmissionDirection(0.0f,-1.0f,0.0f,0.00f,0.0f,0.00f);g_ParticleSystem2.m_bParticlesLeaveSystem = true;g_ParticleSystem2.m_iBillboarding = BILLBOARDING_PERPTOVIEWDIR_BUTVERTICAL;g_ParticleSystem2.LoadTextureFromFile("particle2.tga");/火焰2g_ParticleSystem3.Initialize(Num_Particl

52、eSystem3);g_ParticleSystem3.m_iParticlesCreatedPerSec = Num_ParticlesCreatedPerSec3;g_ParticleSystem3.m_bRecreateWhenDied = false;g_ParticleSystem3.m_fMinDieAge = 0.5f;g_ParticleSystem3.m_fMaxDieAge = 1.0f;g_ParticleSystem3.SetCreationColor(1.0f,0.0f,0.0f,1.0f,0.5f,0.0f);g_ParticleSystem3.SetDieColor(1.0f,1.0f,1.0f, 1.0f,0.5f,0.0f);g_ParticleSystem3.SetAlphaValues(1.0f,1.0f,0.0f,0.0f);g_ParticleSystem3.SetEmitter(0.0f,0.0f,0.0f,now_EmitterDeviationX3, now_EmitterDeviationY3, now_EmitterDeviationZ3);g_ParticleSystem3.SetAcceleration(F3dVector(Acceleration_X,1.0f,0.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论