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引擎也有大半个月了,但是我关注这款引擎已经很久了,记得那是去年的时候我看到了一篇博客中引用这样的引擎,好奇之下在搜了一下这个引擎,发现还不错,大家都说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 );
}
相关文章推荐
- cocos2d-x 菜鸟学习笔记十二(粒子系统的研究初接触)
- 我记录综合系统学习研究之用户管理二(wojilu.Web.Controller.Users MainController)
- cocos2d-x学习之粒子系统2
- Unity5.X- 粒子系统,粒子沿着一定的轨迹运动的研究
- [maya学习笔记(18)] 粒子系统 - 落叶纷飞
- cocos2d-x学习笔记(四)粒子系统使用中多次调用时GL calls不断增加的解决办法
- 我记录综合系统学习研究之用户管理四(用户空间)
- unity学习之粒子系统
- cocos2d-x学习之粒子系统3
- Unity3D学习之(粒子系统以及相机的跟随)
- STM32系统中应用的动态加载可行性研究过程之JavaScript语言的学习<二>
- Irrlicht系统学习---系统简介
- OpenGL学习笔记-2015.3.24——transform feedback缓存&粒子系统示例分析
- 虚幻引擎学习之路:粒子系统篇(一)
- 网络电台研究(3)Fragment系统学习,解决各种问题
- 【cocos2dx粒子系统】总结学习
- 论文学习一:卷积神经网络中类别不平衡问题的系统研究
- Unity学习之粒子系统及摄像机
- 虚幻引擎学习之路:粒子系统篇(二)
- COCOS学习笔记--粒子系统