Ogre- 天龙八部粒子插件的实现

本文介绍如何为游戏《天龙八部》开发自定义粒子效果插件,包括影响器、发射器及粒子渲染器的实现过程。重点介绍了ColourFadingAffector影响器的具体实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

天龙八部粒子开发(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实现的内容如下:

01void ColourFadingAffector::_affectParticles(ParticleSystem* pSystem, Real timeElapsed)
02{
03    ParticleIterator pi = pSystem->_getIterator();
04    Particle *p;
05    ColourValue colourValue(0.0, 0.0, 0.0, 1.0);
06    mTotalTime += timeElapsed;
07    if (mTotalTime < mTime0)
08    {
09        colourValue = mColour0;
10    }
11    else if (mTotalTime < mTime1)
12    {
13        colourValue = mColour0 + (mColour1 - mColour0) * ((mTotalTime - mTime0)/(mTime1 - mTime0));
14    }
15    else if (mTotalTime < mTime2)
16    {
17        colourValue = mColour1 + (mColour2 - mColour1) * ((mTotalTime - mTime1)/(mTime2 - mTime1));
18    }
19    else if (mTotalTime < mTime3)
20    {
21        colourValue = mColour2 + (mColour3 - mColour2) * ((mTotalTime - mTime2)/(mTime3 - mTime2));
22    }
23    else if (mTotalTime < mTime4)
24    {
25        colourValue = mColour3 + (mColour4 - mColour3) * ((mTotalTime - mTime3)/(mTime4 - mTime3));
26    }
27    else if (mTotalTime < mTime5)
28    {
29        colourValue = mColour4 + (mColour5 - mColour4) * ((mTotalTime - mTime4)/(mTime5 - mTime4));
30    }
31    else
32    {
33        colourValue = mColour5;
34    }
35    while (!pi.end())
36    {
37        p = pi.getNext();
38        p->colour = colourValue;
39    }
40}

现在已实现了ScaleInterpolator, ColourFading, Movement影响器. 下一步写PolarEmitter发射器, 具体实现还在猜测中
这是粒子脚本中 boss_企鹅王_攻击01 粒子的实现效果

还有一个粒子的实现效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值