欢迎来到天天文库
浏览记录
ID:30378605
大小:85.02 KB
页数:18页
时间:2018-12-29
《《粒子系统技术》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、粒子系统技术3D粒子系统可以产生各种各样的自然效果,像烟、火、闪光灯,也可以产生随机的和高科技风格的图形效果。可以说,粒子系统是一类令人激动又十分有趣的动画程序。它的实现方式主要需要用基于粒子系统构建的图形学、动力学以及数字艺术等多方面的知识。10.2.1粒子系统简介粒子系统主要用来实现物理模拟,比如自由落体、星空、爆炸等,或某些自然效果,比如烟雨、瀑布等。粒子系统是一些粒子的集合。它通过指定发射源,在发射粒子流的同时创建各种动画效果。在本章的代码中,粒子系统是一个对象,而发射的粒子是粒子对象,并且随时间调整粒子的属性,以控制粒子行为,然后将粒子系统作为一个整体进行绘制
2、。粒子系统是一个相对独立的造型系统,用来创建粒子物体模拟雨、雪、灰尘、泡沫、火花和气流等。采用纹理的粒子系统可以将任何造型作为粒子,所以其表现能力也大大增强,例如可以制作成群的蚂蚁、游动的热带鱼群、吹散飞舞的蒲公英等。粒子系统主要用于表现动态的效果,与时间、速度的关系非常紧密,一般用于动画制作。10.2.2粒子系统应用经过初步总结,粒子系统常常用来表现下面的特殊效果。n雨雪:使用喷射和暴风雪粒子系统,可以创建各种雨景和雪景,在加入Wind风力的影响后可制作斜风细雨和狂风暴雪的景象。n泡沫:可以创建各种气泡、水泡效果。n爆炸和礼花:如果将一个3D造型作为发散器,粒子系统可
3、以将它炸成碎片,加入特殊的材质和合成特技就可以制作成美丽的礼花。n群体效果:Blizzard(暴风雪)、PArray(粒子阵列)、PCloud(粒子云)和SuperSpray(超级喷射)这4种粒子系统都可以用3D造型作为粒子,因此可以表现出群体效果,如人群、马队、飞蝗和乱箭等。10.2.3粒子系统属性粒子系统除自身特性外,还有一些共同的属性,这些属性并不一定要划分明确,有时是在同一个类中设定的。nEmitter(发射属性):用于发射粒子。所有的粒子都由它喷出,它的设置决定了粒子发射时的位置、面积和方向。Emitter在视图中显示为黄色,不可以被渲染。nTiming(衰减
4、属性):控制粒子的时间参数,包括粒子产生和消失的时间、粒子存在的时间或寿命、粒子的流动速度以及加速度。nParticle-SpecificParameters(指定粒子参数):控制粒子的尺寸、速度,不同的粒子系统,其设置也不相同。nRenderingProperties(渲染特性):控制粒子在视图中、渲染时和动画中分别表现出的形态。由于粒子显示不易,所以通常以简单的点、线或交叉点来显示,而且数目也只用于操作观察之用,不用设置过多。对于渲染效果,它会按真实指定的粒子类型和数目进行着色计算。10.2.4粒子系统模型粒子系统可以说是一种基于物理模型来解决问题的方法,它的核心不
5、是在于如何显示而是在于对粒子运行规则的提取,粒子算法才是整个系统的精华所在。一个粒子运行过程如图10-13所示,图10-14为粒子在喷泉中的应用。图10-13粒子的运行过程图10-14粒子的喷泉应用10.2.5焰火粒子系统下面将构造一个简单的焰火粒子系统。整个系统由3个类组成:Particle、FireworksEffect和ParticleSystem。它们在整个系统中的作用和逻辑关系如图10-15所示。Particle类存储了每个粒子的基本属性,包括生命、衰减、速度、位置和颜色,对于复杂的粒子还包含其他更多属性。Particle类的代码如下:publicclassP
6、article{privatefloatlife=1.0f;//生命privatefloatdegradation=0.1f;//衰减privatefloatvel={0.0f,0.0f,0.0f};//速度privatefloatpos={0.0f,0.0f,0.0f};//位置privateintcolor=0xffffff;//颜色publicParticle(){}publicParticle(floatvelocity,floatposition,intcolor){setVel(velocity);//设置初始速度setPos(position);//设置初
7、始位置this.setColor(color);//设置初始颜色}voidsetLife(floatlife){//设置生命this.life=life;}floatgetLife(){//获取生命returnlife;}voidsetVel(floattvel){//设置速度System.arraycopy(tvel,0,vel,0,vel.length);}floatgetVel(){//获取速度returnvel;}voidsetPos(floattpos){//设置位置System.arraycopy(tpos,0,pos,0,p
此文档下载收益归作者所有