游戏开发设计火焰与爆炸

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机游戏开发与设计课程设计报告作品名:火焰与爆炸效果姓名:李传根学号:2012211699班级:0411203任课老师:栾晓《DirectX特效游戏程序设计》分为三个部分,第一部分介绍了Windows编程、3D图形学以及DirectX的基础知识;第二部分以示例方式介绍了在特效游戏中使用DirectX实现各种二维图形效果的方法,包括火焰、二维水面、图像反馈的扭曲、云彩、图像模糊化及消隐等;第三部分介绍了实现三维图形效果的方法,包括各种粒子、爆炸、投射、炫光、三维水体及顶点和像素的消隐等。《DirectX特效游戏程序设计》叙述深入浅出,代码举例丰富而精炼,读者可在其指导下迅速上手掌握DirectX特效游戏程序设计的基本方法。《DirectX特效游戏程序设计》适合各种水平的编程人员学习和参考。一、作品原理内容简述Reeves在1983年首次提出粒子系统的概念,它是一种很有影响的模拟不规则物体的方法,与传统的图形学方法完全不同,这种方法充分体现了不规则模糊物体的动态性和随机性,能够很好的模拟比如爆炸、火焰、喷泉、巨浪等场景,用粒子系统进行字幕的爆炸特效制作是字幕制作近年来的一个热点和难点。在采用粒子系统来模拟这些碎片时,为了充分考虑到图象的绘制和实时动态效果,采用了两级粒子的方法,并利用VisualC++编程环境,在字幕机中得到了比较真实的爆炸效果。1粒子系统方法基本原理粒子系统方法的基本思想是将许多简单形状的微小粒子作为基本元素聚集起来,形成一个不规则的模糊物体,从而构成一个封闭的系统——粒子系统。随着时间的推移,系统中的粒子不断变化、运动,而且不断有新的粒子加入并有旧的粒子消失。生成粒子系统某瞬间的画面的基本步骤是:(1)生成新的粒子并将其加入系统中。(2)赋予每一新粒子以一定的属性。(3)删除那些已经超过其生命周期的粒子。(4)根据粒子的动态属性对粒子进行移动和变换。(5)绘制并显示由有生命的粒子组成的图形。1.1粒子的产生粒子的产生用随机函数控制,对每一粒子属性参数均确定其变化范围。在该范围内随机的确定它的属性值,而其变化范围则由给定的平均期望值和最大方差来确定,基本表达式为(1)其中,rand()是返回值在[-0.1,+0.1]内均匀分布的函数,和是第帧新产生粒子数目的均值和方差。一般,方差定位为事先给定的常数;均值可以采用较简单的线性函数其中是粒子系统被激活的帧号。1.2粒子的属性对新产生的粒子必须为其赋予初始属性值,它包括:初始位置、初始颜色、初始运动速度和运动方向、初始透明度、生存期和形状等。通常,粒子的初始位置p和初始运动方向由粒子诞生的区域的形状,也即由粒子发射器的形状来决定。常见的粒子发射器形状有:平面、球体、长方体等。而粒子的其它初始属性则也由随机函数来控制:初始速度v=平均速度mv+rand()vv初始颜色c=平均颜色mc+rand()vc初始透明度t=平均透明度mt+rand()vt生存期l=平均生存期ml+rand()vl其中υv,υc,υt,υl分别为速度、颜色、透明度、生存期方差。上述属性中,平均值和方差均为事先给定的常数;rand()为在[-1,1]上均匀分布的随机函数。1.3粒子的变化粒子系统中每个粒子都在不断的运动,同时也在不断的改变颜色、透明度和大小。在赋给初始属性后,粒子开始进行活动,即随着时间t的流逝而不断改变它的各种属性值。第帧时粒子的各属性值为:位置速度颜色透明度生存期其中,a为粒子的加速度;为粒子颜色的变化率;为粒子的透明度变化率。1.4粒子的消亡一般而言,粒子的消亡会有两种情况:(1)粒子的生存周期结束。(2)粒子属性或运动超出了给定的阈值。2字幕机中爆炸效果的实现在具体的算法流程中,用粒子系统对爆炸的模拟有如下几个特点:(1)爆炸过程中,粒子只在帧产生,而在随后的帧序列中只要改变在帧产生的粒子属性即可,而不必再产生新粒子。(2)实际爆炸产生的碎片形状可以多种多样,要完全模拟实际情况是不可能的。但可以通过建模预先定义一系列不同形状的爆炸碎片,如:三角面片、长方体、多面体等。比如:现已有12种不同形状的碎片,把它们编号为:1,2,⋯,12。(3)爆炸过程中,各粒子除了在速度方向上的运动外,还有绕A、E、C三轴的旋转运动。假设粒子与A、E、C三轴正向所成的角度分别为:Pitch、Yaw和Roll,而绕某一帧时,绘制的是位于粒子当前运动位置的点或者是代表粒三轴的转动角速度分别为:、和,则第fi帧时粒子与x、y、z三轴所成的夹角为:(4)由于重力的作用,各碎片的运动轨迹应为抛物线运动,直至最后坠落在地面上。此条件也是粒子的死亡条件之一。假设粒子在x轴上的运动速度为,则在第fi帧时有:2火焰特效的实现2.1分析火焰特效的特征要实现火焰特效,就先要分析其特征,确定要实现的特效的外观,以及是否可以用具有一些特有属性的粒子来描述,比如什么颜色、如何运动、什么形状等。火焰的特征是非常鲜明的,就是红红的烈火熊熊燃烧。所以首先确定火焰的颜色主要由红色和黄色2种基本色构成,加上默认的背景颜色黑色,那么火焰效果需要3种基本颜色。然后分析火焰的运动形式:火焰的运动多数以火苗向上为主,即从火源开始向上升腾,颜色由淡黄色到红褐色最后变成黑色消失。就火焰的形状而言,其形状很难确定。但是常用的效果如蜡烛、火把等,其形状都是上下窄中间偏下方位宽,用多个这样形状的火焰也可以组合成壮观的熊熊大火。效果的颜色决定了绘制时所需要的调色板,火焰特效所需要的基本颜色是红、黄(一般抽象出2、3种基本颜色即可,然后根据调色板的生成原理来生成其他的过渡颜色);运动规律决定了粒子在各个方向的速度,以及它们的生命周期,即决定了最核心的算法部分;效果的形状决定了如何对最终的效果进行剪裁,使之更具真实感。2.2创建调色板通过上述分析,可知首先要创建一个合适的调色板,它决定了效果的外在颜色,是效果实现中非常关键的一个环节。另外,创建调色板时,颜色的数量是一个需要考虑的问题。在兼顾效果的同时,调色板的颜色数越少越好,这样,不仅可以节省内存空间,而且创建的复杂度和速度都会相应地降低和加快,调整起来也比较方便,所以一般选择2的整数次幂的颜色数量。最后根据以上的分析及不断的对比和调整,获取随机数,后按照一定的算法进行换算,得到了64种颜色,这完全可以满足火焰效果的要求。颜色若再少,其升腾的高度就会受到影响,因为变成黑色的速度快了,并且从64种颜色减少到32种,只节省100B左右的空间,没有太大的实际意义。2.3粒子的初始化一般来说,要对粒子的所有属性进行初始化设置,比如:粒子的水平速度,垂直速度以及相应的加速度,粒子的颜色,生命周期等。根据各种不同的效果,粒子有很多不同的初始化方法。针对火焰特效而言,粒子的初始化主要是火焰粒子的数量、火焰升腾的速度、火焰的高度和宽度。2.4特效的运动算法特效的运动算法是整个粒子特效中最关键的一步。一个好的算法不仅可以很好地展现出所需的效果,其速度也非常快,速度比效果更重要,效果再逼真,在手机上根本无法运行也是毫无用处的。这里采用了模糊技术来处理火焰的升腾,即由周围的点获得当前点的颜色值。(1)即把屏幕上的每一个点用它自己以及下面的3个点的平均值代替。式(1)也可以这样理解,每一点都是由下面的3个点所产生的,而火源在最下面,那么新产生的颜色一定比下面的平均颜色深,即越到上面越深,渐渐变成黑色而消失。又由于火源是在不断的变化的,因此各点消失的高度会有多种变化,看起来像是火焰在燃烧。2.5.2火焰特效的优化根据以上介绍的优化方法,来优化火焰特效的算法和代码。由于在设计粒子运动算法的阶段必须考虑效率,选择了简练的火焰粒子运动算法,因此核心算法基本上不需要再优化。但是在实现火焰特效的代码中,要重复执行生成火源和火焰升腾这2部分的代码,其中升腾部分的代码比较简单固定,就是根据式(1)计算。而火源的产生的代码要在每一个循环中获取一个随机数,但获取随机数是一个相对较慢的过程,所以该部分的代码的运行速度还不尽人意,可以进行代码优化。优化的基本思想是提出帧的概念。将火焰的每次处理周期作为一帧,为了避免反复地获取随机数,在最开始,即创建调色板的同时,把火焰各帧的随机数都取好,储存在一个数组中,每次产生新的火源时,只需要一个简单的赋值操作即可,这样效率就会有所提升。二、实现过程与实验结果三、小组分工这次小组作业中,我们由三名成员组成:在这次的小组作业中,每个小组成员都起着重要的作用。在前期,我们小组成员进行了积极的讨论和查阅相关知识,以使我们能顺利完成它。同时我们小组进行了小组成员分工,使我们能在这次作业中都有所收获。成员组长组员组员姓名李传根谢昊明胡永森班级041120304112030411203学号201221169920122118292012211929分工前期资料收集PPT演讲代码编写调试前期资料收集PPT制作代码编写调试前期资料收集环境搭建代码编写调试四、心得体会我觉得这个课程非常有意义,让我们学到了很多一些关于游戏制作的知识和原理。对于游戏开发的深入学习和研究有着非常大的帮助。通过一学期的学习大概地知道了一些游戏引擎的使用和一些常规的游戏编程。这门课程非常有趣,增加了我们对面游戏开发的热爱与兴趣。

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功