天龙八部粒子开发(1)G
要实现天龙八部的粒子效果, 需要写自己的粒子插件, 主要实现三个内容:影响器(Affector), 发射器(Emitter), 粒子渲染器(Renderer)
1. 实现粒子插件
由于这些天龙八部的粒子效果是用插件的形式, 所以可以自己建立一个win32 dll工程, 然后需要用到的时候在plugin.cfg文件里加上这个dll文件就可以了
注意工程属性的 C++/预处理器/预处理定义要增加以下几个预定义: USRDL;OGRE_PARTICLEFXPLUGIN_EXPORTS
2. 根据Ogre源码的插件部分实现自己的粒子插件
仿造Ogre源码的Plugin_ParticleFX工程中的 OgreParticleFXPlugin.h, OgreParticleFXPrerequisites.h, OgreParticlFX.cpp, OgreParticleFXPlugin.cpp文件搭建这个工程的框架
TLBBOgrePluginFX.cpp 里面主要是提供被Ogre加载卸载时调用的函数dllStartPlugin和dllStopPlugin
OgreParticleFXPlugin.h, greParticleFXPlugin.cpp里面最重要的函数是install(), 用来创建新增加的影响器和发射器
OgreParticleFXPrerequisites.h 用于声明新创建的类
3. 影响器(Affector)的实现要点
创建每一个影响器都要有一个Affector.h, Affector.cpp, AffectorFactory.h文件
在Affecor.h和Affecotr.cpp文件中创建 ParticleAffector的派生类, 用于从脚本中读取该影响器的各个参数, 然后重写_initParticle函数初始化各个粒子, 重写_affectParticles函数设置每帧粒子的变化
这两个函数的内容, 要根据游戏里该粒子的实现效果来猜测, 我程序中的ColourFadingAffector实现的内容如下:
01 | void ColourFadingAffector::_affectParticles(ParticleSystem* pSystem, Real timeElapsed) |
03 | ParticleIterator pi = pSystem->_getIterator(); |
05 | ColourValue colourValue(0.0, 0.0, 0.0, 1.0); |
06 | mTotalTime += timeElapsed; |
07 | if (mTotalTime < mTime0) |
09 | colourValue = mColour0; |
11 | else if (mTotalTime < mTime1) |
13 | colourValue = mColour0 + (mColour1 - mColour0) * ((mTotalTime - mTime0)/(mTime1 - mTime0)); |
15 | else if (mTotalTime < mTime2) |
17 | colourValue = mColour1 + (mColour2 - mColour1) * ((mTotalTime - mTime1)/(mTime2 - mTime1)); |
19 | else if (mTotalTime < mTime3) |
21 | colourValue = mColour2 + (mColour3 - mColour2) * ((mTotalTime - mTime2)/(mTime3 - mTime2)); |
23 | else if (mTotalTime < mTime4) |
25 | colourValue = mColour3 + (mColour4 - mColour3) * ((mTotalTime - mTime3)/(mTime4 - mTime3)); |
27 | else if (mTotalTime < mTime5) |
29 | colourValue = mColour4 + (mColour5 - mColour4) * ((mTotalTime - mTime4)/(mTime5 - mTime4)); |
33 | colourValue = mColour5; |
38 | p->colour = colourValue; |
现在已实现了ScaleInterpolator, ColourFading, Movement影响器. 下一步写PolarEmitter发射器, 具体实现还在猜测中
这是粒子脚本中 boss_企鹅王_攻击01 粒子的实现效果

还有一个粒子的实现效果
