欢迎来到天天文库
浏览记录
ID:33912993
大小:107.73 KB
页数:23页
时间:2019-03-02
《粒子系统原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、粒子系统原理粒子系统几乎是每个引擎中比不可少的部分,它主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质,在计算机上的生成与显示的问题。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。如图8-1,8-2他们都是由粒子系统来完成的。图8-1SimplePhysicsParticles1.0中的截图图8-2由粒子系统完成的爆炸等效果通过上面的两幅图我们可以看出,其实粒子系统是一种特效发生器,它可以制造大量的小粒子来达到某种特殊的效果,比如烟雾、火焰或者爆炸。好的粒子效果甚至比渲染好的动画都出色,正因为如
2、此,当前几乎所有的游戏中都使用了粒子系统。为了制造真实的粒子效果,粒子发生器必须在不影响帧率的情况下控制成千上万的粒子运动。简单的粒子系统只允许设置粒子的一些属性,比如生存时间、重力或者颜色;复杂的粒子系统允许为每个粒子的运动函数编写代码。一些粒子系统也包含了光线生成器来创建光线或者轨迹。粒子系统基本原理粒子系统是采用大量的、具有一定生命和属性的微小粒子图元作为基本元素来描述不规则的模糊物体。在粒子系统中,每一个粒子图元均具有:形状、大小、颜色、透明度、运动速度和运动方向、生命周期等属性。而一个粒子究竟有什么样的属性,主要取决于粒子系统用来模拟什么。粒子系统是动态变化的,粒子系统的所
3、有属性都是时间t的函数,随着时间的推移,系统中不断有新粒子的加入,旧的粒子死亡,系统中“存活”的粒子其位置及生命值亦随时间变化而变化。随着虚拟世界时间的流逝,每个粒子都要在虚拟世界经历“产生”、“活动”和“消亡”三个阶段。一般而言,粒子系统的绘制基本可按照以下步骤进行。①产生新的粒子加入系统中;②赋予每个粒子一定的属性;③删除超过生命值上限的粒子;④根据粒子属性的动态变化对粒子进行移动和变换;⑤绘制并显示由有生命的粒子组成的图形。其中第③、④、⑤步循环形成了物体的动态变化过程。粒子系统的组成通过前面的学习,我们知道了粒子系统中每一颗粒子他都具有自己的各种属性,因此这每一颗粒子就是一个
4、粒子对象,所以我们的例子系统首先需要一个代表粒子的类Particle。由于我们每一种特效都需要很多粒子来实现,这些粒子的运动方式以及发射的频率都是我们能够控制的,所以我们还需要一个用于控制粒子特效的类ParticleSystem。综上所诉,粒子系统将由粒子(Particle)和发射器(ParticleSystem)组成。粒子(Particle)这里我们的粒子类Particle主要就用于表示粒子特效中的每一颗粒子,他将包括每一颗粒子的各种属性,如代码清单8-1是我们用于表示粒子对象的类Particle的实现。代码清单8-1:Particleviewplaincopytoclipboar
5、dprint?1.//粒子类 2.public class Particle { 3. //位置 4. YFSPoint pos = YFSPoint.makeZero(); 5. //开始位置 6. YFSPoint startPos = YFSPoint.makeZero(); 7. //颜色 8. YFSColor4F color = new YFSColor4F(); 9. //辅助颜色变化 10. YFSColor4F deltaColor = new YFSColor4F(); 11. //尺寸和辅
6、助尺寸变化 12. float size; 13. float deltaSize; 14. //自转速度,辅助自转速度 1. float rotation; 2. float deltaRotation; 3. //生命周期 4. float timeToLive; 5. //方向 6. YFSPoint direction = YFSPoint.makeZero(); 7. //径向加速度,逃离发射原点的速度 8. float radialAccel; 9. //切线加速度,围绕发射原
7、点旋转速度 10. float tangentialAccel; 11. //弧度... 12. float radian; 13. float radianPerSecond; 14. //半径... 15. float radius; 16. float deltaRadius; 17.} //粒子类publicclassParticle{//位置YFSPointpos=YFSPoint.ma
此文档下载收益归作者所有