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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

粒子系统原理word版.docx

1、粒子系统原理word版粒子系统原理粒子系统几乎是每个引擎中比不可少的部分,它主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质,在计算机上的生成与显示的问题。经常使用粒子系统模拟的现象有火、爆炸、烟、 水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉 效果等等。如图8-1,8-2他们都是由粒子系统来完成的。图8-1 SimplePhysicsParticles1.0中的截图图8-2 由粒子系统完成的爆炸等效果通过上面的两幅图我们可以看出,其实粒子系统是一种特效发生器,它可以制造大量的小粒子来达到某种特殊的效果,比如烟雾、火焰或者爆炸。好的粒子效果甚至比渲染好的

2、动画都出色,正因为如此,当前几乎所有的游戏中都使用了粒子系统。为了制造真实的粒子效果,粒子发生器必须在不影响帧率的情况下控制成千上万的粒子运动。简单的粒子系统只允许设置粒子的一些属性,比如生存时间、重力或者颜色;复杂的粒子系统允许为每个粒子的运动函数编写代码。一些粒子系统也包含了光线生成器来创建光线或者轨迹。粒子系统基本原理粒子系统是采用大量的、具有一定生命和属性的微小粒子图元作为基本元素来描述不规则的模糊物体。在粒子系统中,每一个粒子图元均具有:形状、大小、颜色、透明度、运动速度和运动方向、生命周期等属性。而一个粒子究竟有什么样的属性,主要取决于粒子系统用来模拟什么。粒子系统是动态变化的,粒

3、子系统的所有属性都是时间t的函数,随着时间的推移,系统中不断有新粒子的加入,旧的粒子死亡,系统中“存活”的粒子其位置及生命值亦随时间变化而变化。随着虚拟世界时间的流逝,每个粒子都要在虚拟世界经历“产生”、“活动”和“消亡”三个阶段。一般而言,粒子系统的绘制基本可按照以下步骤进行。产生新的粒子加入系统中;赋予每个粒子一定的属性;删除超过生命值上限的粒子;根据粒子属性的动态变化对粒子进行移动和变换;绘制并显示由有生命的粒子组成的图形。其中第、步循环形成了物体的动态变化过程。粒子系统的组成通过前面的学习,我们知道了粒子系统中每一颗粒子他都具有自己的各种属性,因此这每一颗粒子就是一个粒子对象,所以我们

4、的例子系统首先需要一个代表粒子的类Particle。由于我们每一种特效都需要很多粒子来实现,这些粒子的运动方式以及发射的频率都是我们能够控制的,所以我们还需要一个用于控制粒子特效的类ParticleSystem。综上所诉,粒子系统将由粒子(Particle)和发射器(ParticleSystem)组成。粒子(Particle)这里我们的粒子类Particle主要就用于表示粒子特效中的每一颗粒子,他将包括每一颗粒子的各种属性,如代码清单8-1是我们用于表示粒子对象的类Particle的实现。代码清单8-1:Particleview plaincopy to clipboardprint?1./粒

5、子类 2.publicclassParticle 3./位置 4.YFSPointpos=YFSPoint.makeZero(); 5./开始位置 6.YFSPointstartPos=YFSPoint.makeZero(); 7./颜色 8.YFSColor4Fcolor=newYFSColor4F(); 9./辅助颜色变化 10.YFSColor4FdeltaColor=newYFSColor4F(); 11./尺寸和辅助尺寸变化 12.floatsize; 13.floatdeltaSize; 14./自转速度,辅助自转速度 15.floatrotation; 16.floatdelta

6、Rotation; 17./生命周期 18.floattimeToLive; 19./方向 20.YFSPointdirection=YFSPoint.makeZero(); 21./径向加速度,逃离发射原点的速度 22.floatradialAccel; 23./切线加速度,围绕发射原点旋转速度 24.floattangentialAccel; 25./弧度. 26.floatradian; 27.floatradianPerSecond; 28./半径. 29.floatradius; 30.floatdeltaRadius; 31./粒子类 public class Particle /

7、位置 YFSPoint pos = YFSPoint.makeZero(); /开始位置 YFSPoint startPos = YFSPoint.makeZero(); /颜色 YFSColor4F color = new YFSColor4F(); /辅助颜色变化 YFSColor4F deltaColor = new YFSColor4F(); /尺寸和辅助尺寸变化 float size; float deltaSize; /自转速度,辅助自转速度 float rotation; float deltaRotation; /生命周期 float timeToLive; /方向 YFSPo

8、int direction = YFSPoint.makeZero(); /径向加速度,逃离发射原点的速度 float radialAccel; /切线加速度,围绕发射原点旋转速度 float tangentialAccel; /弧度. float radian; float radianPerSecond; /半径. float radius; float deltaRadius; 从代码清单8-1我们可以看出,这些成员变量实际上都是每一颗粒子所共同拥有的一些通用的属性,其中我们给每一个变量都加入了注解,这里所要说明的就是,粒子特效都是需要运动的,所以大多数数据需要一个初始值,然后还需要指定

9、一个该值的变化范围,比如上面的radius表示粒子的半径,而deltaRadius则表示该半径可以在一个什么样的范围之内变化。timeToLive则表示该粒子的生命周期,即粒子从激活之后到消亡这段时间,因为我们的每颗粒子都会消亡,这里我们说一下,通常一个粒子消亡之后,我们不会去释放他,而是将其标记为为激活状态,用来作为下一个将要产生的例子(去修改其属性值即可),这样就避免了重复的分配内存空间。当然如果你确实需要释放也是可以的。发射器(ParticleSystem)上面我们介绍了单独的一刻粒子对象,这里我们来分析一下如何实现一个发射器,来控制每一颗粒子的发射情况,在分析这个发射器之前,我们首先看

10、一下粒子系统一般包括哪几种?粒子系统一般可以按照其特性分为两类:模拟重力效果 以半径来进行扩散 重力效果相信不用过多的介绍了,就是通过程序来模拟物理重力效果,那么另外一种是以一个中心点,来根据所设定的半径进行扩散的粒子,因此我们首先将这两种不同的粒子通过一个enum分区开来,起定义如代码清单8-2所示。代码清单8-2:Modeview plaincopy to clipboardprint?1./粒子系统模式 2.publicstaticenumMode 3.GRAVITY,/模拟重力 4.RADIUS;/以半径来扩散 5./粒子系统模式 public static enum Mode GRA

11、VITY,/模拟重力 RADIUS;/以半径来扩散 稍后我们会在程序中实现这样两种粒子效果,现在大家可以思考一个问题,在我们的粒子系统中,这些微粒他们应该如何运动呢?实际上运动就是改变这些微粒的坐标位置,那么我们可以按照坐标的位置来将粒子系统分为两种,他们分别是:自由运动,成组运动。每一颗粒子他可以按照自己的属性来自由的运动,当然在某些特殊需求时,我们可以将粒子分成很多组,然后对这每一组的所有粒子采用一种运动方式,那么就是我们所说的成组运动的方式,我们同样也先通过一个enum将其分别定义出来,如代码清单8-3所示。代码青岛那8-3:PositionTypeview plaincopy to c

12、lipboardprint?1./位置类型 2.publicstaticenumPositionType 3.FREE,/自由 4.GROUPED;/组 5./位置类型 public static enum PositionType FREE,/自由 GROUPED;/组 其中FREE代表自由运动,GROUPED代表成组的运动。好的,我们已经对粒子系统,也就是发射器进行了分类,下面我们来分析如何实现这个发射器呢?这里我们将以一个通用的发射器来作为基类进行实现,具体的特殊的特效,我们可以继承自该发射器来完善,首先看一下我们这个发射器他需要包括哪些属性呢?如代码清单8-4所示。代码清单8-4:Pa

13、rticleSystem成员view plaincopy to clipboardprint?1./粒子系统基类 2.publicclassParticleSystemextendsNodeimplementsNode.IBlendableTextureOwner 3.publicstaticfinalintPARTICLE_DURATION_INFINITY=-1; 4.publicstaticfinalintPARTICLE_START_SIZE_EQUAL_TO_END_SIZE=-1; 5.publicstaticfinalintPARTICLE_START_RADIUS_EQUAL_

14、TO_END_RADIUS=-1; 6./是否要更新 7.privatebooleanmUpdating; 8./是否激活 9.privatebooleanmActive; 10./运行时间 11.protectedfloatmDuration; 12./流失的时间 13.privatefloatmElapsed; 14./所有粒子重心,(变化范围) 15.protectedYFSPointmCenterOfGravity; 16.protectedYFSPointmCenterOfGravityVar; 17./角度,(变化范围) 18.protectedfloatmAngle; 19.protectedfloatmAngleVar; 20./开始结束尺寸,(变化范围) 21.protectedfloatmStartSize; 22.protectedfloatmStartSiz

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

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