1,粒子系统介绍
每个引擎都会有自己的粒子系统,粒子系统特效在游戏中运用广泛,比如射击类游戏中的爆炸特效,烟雾特效,开枪时喷出的火焰,撞击时击出的火花等等多半由粒子系统实现。粒子系统的基本单元是粒子,每个粒子一般具有形状、大小、颜色、透明度、位置、速度、加速度、方向、生命周期等属性。每一帧,粒子系统一般都会执行如下步骤:
1) 产生新的粒子,并赋予相应的属性;
2) 删除超过生命周期的粒子;
3) 更新粒子的动态属性;
4) 渲染所有有效粒子。
2, OGRE 粒子系统。
OGRE粒子系统还是比较清晰易懂的,它由ParticleSystemManage(粒子系统管理器)、ParticleSystem(粒子系统)、ParticleSystemRenderer(粒子渲染器)、ParticleEmitter(粒子发射器)、ParticleAffector(粒子影响器)、Particle(粒子)等组成。
1) ParticleSystemManager(粒子系统管理器)
此类类似于OGRE中的SceneManager,单件模式,内含粒子系统工厂集合,粒子发射器工厂集合,粒子影响器工厂集合,以及粒子渲染器工厂集合,用于创建和管理粒子系统、粒子发射器、粒子影响器、粒子渲染器。该类还负责加载和分析粒子系统脚本。
2) ParticleSystem(粒子系统)
具体的粒子系统类,它需要包含具体的ParticleEmitter 集合、ParticleAffector集合、ParticleSystemRenderer,Particle集合,用于粒子的创建、更新、渲染。
3) ParticleEmitter(粒子发射器)
用于创建粒子,赋予粒子初始属性赋值,最重要的方法是_initParticle(),该类为抽象类,OGRE中提供了如下派生类,自己也可以根据需要编写自己的Emitter:
AreaEmitter
BoxEmitter
CylinderEmitter
EllipsoidEmitter
HollowEllipsoidEmitter
PointEmitter
RingEmitter
4) ParticleAffector(粒子影响器)
用于在粒子的生命周期内更新粒子的属性,最重要的方法是 _affectParticles(),OGRE中提供了如下派生类,自己也可以根据需要编写自己的Affector:
ColourFaderAffector
ColourImageAffector
ColourInterpolatorAffector
DeflectorPlaneAffector
DirectionRandomiserAffector
LinearForceAffector
RotationAffector
ScaleAffector
6) ParticleSystemRenderer(粒子渲染器)
该类用于渲染粒子系统,该类为抽象类,ORGE提供了BillboardParticleRenderer具体类,自己也可以根据需要编写自己的粒子渲染类。
7) Particle(粒子)
粒子系统的基本元素,粒子,存储了粒子的所有属性和状态。
3 OGRE粒子系统执行流程
1)初始化
ParticleSystemManager::addEmitterFactory()
ParticleSystemManager::addAffectorFactory()
ParticleSystemManager ::addRendererFactory()
ParticleSystemManager::createTemplate()
ParticleSystem::setRenderer()
ParticleSystemManager::_createRenderer()
ParticleSystem::addEmitter()
ParticleSystemManager::_createEmitter()
ParticleSystem::addAffector()
ParticleSystemManager::_createAffector()
2) 每一帧,执行如下更新
ParticleSystem::_update()
ParticleSystem::_triggerAffectors()
Affector::_affectParticles()
ParticleSystem ::_triggerEmitters()
Emitter::_initParticle()
ParticleSystem::_updateRenderQueue()
ParticleRenderer::_updateRenderQueue()