您的位置:首页 > 其它

Irrlicht学习之粒子系统的研究

2013-11-26 20:33 435 查看
Irrlicht学习之粒子系统的研究
 

         马上十一月份就要过去了,感觉时间过得很快的样子,我学习的Irrlicht引擎也有大半个月了,但是我关注这款引擎已经很久了,记得那是去年的时候我看到了一篇博客中引用这样的引擎,好奇之下在搜了一下这个引擎,发现还不错,大家都说Irrlicht是一款轻量级的引擎,非常适合3D游戏开发的初学者进行学习,而且这款引擎是对接口进行编程,内存管理这些可以大可不用操心,需要释放的内容可以调用drop()函数即可。总而言之,Irrlicht引擎对我来说比较简单,我希望在不久后以它为基础进行深入的探析,深入了解游戏引擎的工作原理。

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/16971489

         粒子系统是作为游戏引擎不可或缺的一部分,它可以创造出非常炫的效果,但是传统上,如果是从Direct3D或者是从OpenGL/GLUT开始,将会遇到很大的麻烦,因为需要定义粒子发射器以及粒子管理器,还有种种复杂的东西,以前我曾经用Direct3D模仿粒子系统制作弹幕,就知道管理粒子有多么的复杂。不过在使用了Irrlicht之后,我觉得使用粒子系统简单了许多,只需要调用几个函数就可以解决问题。

         演示程序和源代码的下载地址:这里

         下面是演示程序的截图:



         有关粒子系统的内容,我用C语言的方式把它放在了一个函数中。这个函数负责添加所有与粒子系统相关的内容。顺便说一下,Irrlicht的粒子系统其实也是一个场景节点,所以它隶属于场景管理器(ISceneManager)。它和带动画的mesh一样也可以设置动画,也就是粒子的运动。粒子系统既可以使用代码实现,也可以作为场景的一部分使用CopperCube(IrrEdit)进行编辑预览。

         不过,我这回使用的是代码实现。如果项目比较大且有这样的需求,我会转向使用场景编辑器。下面就是创建粒子系统的核心代码,代码中有简单的注释,便于大家和我以后对其进行查阅。

void CreateParticles( ISceneManager* pSMgr)
{
IParticleSystemSceneNode*pParticle =
pSMgr->addParticleSystemSceneNode(false );

IParticleEmitter*pEmitter =
pParticle->createBoxEmitter(
aabbox3d<f32>(-5.0f, 0.0f, -5.0f, 5.0f, 1.0f, 5.0f ), //碰撞盒
vector3df(0.0f, 0.1f, 0.0f ), //方向
50, //每秒最少粒子
200, //每秒最大粒子
SColor(0, 0, 0, 255 ), //最小开始颜色
SColor(0, 255, 255, 255 ), //最大开始颜色
800, //最小生存时间
1000, //最大生存时间
0, //最大角(弧度制)
dimension2df(10.0f, 10.0f ), //最小开始大小
dimension2df(20.0f, 20.0f ) ); //最大开始大小

pParticle->setEmitter(pEmitter );
pEmitter->drop();// 发射器可以不用了

//设置粒子系统
pParticle->setPosition(vector3df( 0.0f, -10.0f, 0.0f ) );
pParticle->setScale(vector3df( 2.0f, 2.0f, 2.0f ) );
pParticle->setMaterialFlag(EMF_LIGHTING, false );
pParticle->setMaterialFlag(EMF_ZWRITE_ENABLE, false );
pParticle->setMaterialTexture(
nullptr,
pSMgr->getVideoDriver()->getTexture( "fireball.bmp" ) );
pParticle->setMaterialType(EMT_TRANSPARENT_ADD_COLOR );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Irrlicht 游戏引擎