Irrlicht学习之粒子系统的研究

Irrlicht学习之粒子系统的研究

 

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

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

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

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

         下面是演示程序的截图:

Irrlicht学习之粒子系统的研究_第1张图片

         有关粒子系统的内容,我用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)