Ogre-天龙八部粒子插件的实现(1)
来源:互联网 发布:定音器软件下载 编辑:程序博客网 时间:2024/04/28 11:22
天龙八部粒子开发(1)
要实现天龙八部的粒子效果, 需要写自己的粒子插件, 主要实现三个内容:影响器(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实现的内容如下:
这是粒子脚本中 boss_企鹅王_攻击01 粒子的实现效果
还有一个粒子的实现效果
要实现天龙八部的粒子效果, 需要写自己的粒子插件, 主要实现三个内容:影响器(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实现的内容如下:
1 void ColourFadingAffector::_affectParticles(ParticleSystem* pSystem, Real timeElapsed)
2 {
3 ParticleIterator pi = pSystem->_getIterator();
4 Particle *p;
5 ColourValue colourValue(0.0, 0.0, 0.0, 1.0);
6
7 mTotalTime += timeElapsed;
8
9 if (mTotalTime < mTime0)
10 {
11 colourValue = mColour0;
12 }
13 else if (mTotalTime < mTime1)
14 {
15 colourValue = mColour0 + (mColour1 - mColour0) * ((mTotalTime - mTime0)/(mTime1 - mTime0));
16 }
17 else if (mTotalTime < mTime2)
18 {
19 colourValue = mColour1 + (mColour2 - mColour1) * ((mTotalTime - mTime1)/(mTime2 - mTime1));
20 }
21 else if (mTotalTime < mTime3)
22 {
23 colourValue = mColour2 + (mColour3 - mColour2) * ((mTotalTime - mTime2)/(mTime3 - mTime2));
24 }
25 else if (mTotalTime < mTime4)
26 {
27 colourValue = mColour3 + (mColour4 - mColour3) * ((mTotalTime - mTime3)/(mTime4 - mTime3));
28 }
29 else if (mTotalTime < mTime5)
30 {
31 colourValue = mColour4 + (mColour5 - mColour4) * ((mTotalTime - mTime4)/(mTime5 - mTime4));
32 }
33 else
34 {
35 colourValue = mColour5;
36 }
37
38 while (!pi.end())
39 {
40 p = pi.getNext();
41 p->colour = colourValue;
42 }
43 }
现在已实现了ScaleInterpolator, ColourFading, Movement影响器. 下一步写PolarEmitter发射器, 具体实现还在猜测中2 {
3 ParticleIterator pi = pSystem->_getIterator();
4 Particle *p;
5 ColourValue colourValue(0.0, 0.0, 0.0, 1.0);
6
7 mTotalTime += timeElapsed;
8
9 if (mTotalTime < mTime0)
10 {
11 colourValue = mColour0;
12 }
13 else if (mTotalTime < mTime1)
14 {
15 colourValue = mColour0 + (mColour1 - mColour0) * ((mTotalTime - mTime0)/(mTime1 - mTime0));
16 }
17 else if (mTotalTime < mTime2)
18 {
19 colourValue = mColour1 + (mColour2 - mColour1) * ((mTotalTime - mTime1)/(mTime2 - mTime1));
20 }
21 else if (mTotalTime < mTime3)
22 {
23 colourValue = mColour2 + (mColour3 - mColour2) * ((mTotalTime - mTime2)/(mTime3 - mTime2));
24 }
25 else if (mTotalTime < mTime4)
26 {
27 colourValue = mColour3 + (mColour4 - mColour3) * ((mTotalTime - mTime3)/(mTime4 - mTime3));
28 }
29 else if (mTotalTime < mTime5)
30 {
31 colourValue = mColour4 + (mColour5 - mColour4) * ((mTotalTime - mTime4)/(mTime5 - mTime4));
32 }
33 else
34 {
35 colourValue = mColour5;
36 }
37
38 while (!pi.end())
39 {
40 p = pi.getNext();
41 p->colour = colourValue;
42 }
43 }
这是粒子脚本中 boss_企鹅王_攻击01 粒子的实现效果
还有一个粒子的实现效果
转载自:http://www.cppblog.com/summericeyl/archive/2010/01/29/106696.html
- Ogre-天龙八部粒子插件的实现(1)
- Ogre-天龙八部粒子插件的实现(1)
- Ogre- 天龙八部粒子插件的实现
- OGRE实现天龙八部组合的骨骼动画
- 实现Ogre的脚本分离 - 天龙八部的源码分析(一)
- Ogre的御用粒子系统插件ParticleUniverse的整合
- OGRE - 实现天龙八部 组合骨骼动画
- Ogre的粒子
- Ogre 天龙八部frame格式的帧动画
- 菜鸟学习OGRE和天龙八部之四: 地表贴图的实现
- 菜鸟学习OGRE和天龙八部之四: 地表贴图的实现
- 菜鸟学习OGRE和天龙八部之十一: ParticleSystem 粒子系统基本搞定
- 菜鸟学习OGRE和天龙八部之十一: ParticleSystem 粒子系统基本搞定
- 用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
- 用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
- 用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
- 用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
- 用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
- CPaintDC dc(this)中的this指针的含义解析
- Android中Tabhost既可以点击切换又可滑动切换不同Activity的View小demo
- Hook :挂钩Windows API
- 第一篇博客
- Unity3D的断点调试功能
- Ogre-天龙八部粒子插件的实现(1)
- java顺序查找和折半查找
- 用CEImageDiff.exe工具备份WINCE的工程文件
- Smarty模板
- Node.js背后的技术体系和设计理念
- CPaintDC 、CWindowDC、 CClientDC、 CDC的区别与联系
- Introduction to MPlayer
- The requested resource (No result defined for action org.action.LoginAction and result success) is
- 在路上