粒子系统
粒子系统
载入粒子系统模板
代码如下
- ParticleSystem* ps; //声明一个粒子系统
- //两个参数分别是新建粒子系统的名称(自己取)和载入的粒子系统模板名称
- ps = mSceneMgr->createParticleSystem("Fireworks", "Examples/Fireworks");
- 绑定到节点上
- mSceneMgr->getRootSceneNode()->attachObject(ps);
粒子系统模板格式如下,是一些参数的设定,
- particle_system Examples/Swarm
- {
- quota 3000
- material Examples/Flare2
- particle_width 12
- particle_height 24
- cull_each true
- renderer billboard
- sorted true
- local_space false
- billboard_type oriented_self
- emitter Box
- {
- angle 180
- colour 1 1 1 1
- colour_range_start 1 1 1 1
- colour_range_end 1 1 1 1
- direction 0 1 0
- emission_rate 30
- position 0 0 0
- velocity 50
- velocity_min 50
- velocity_max 1
- time_to_live 20
- time_to_live_min 20
- time_to_live_max 20
- duration 0
- duration_min 0
- duration_max 0
- repeat_delay 0
- repeat_delay_min 0
- repeat_delay_max 0
- width 80
- height 80
- depth 80
- }
- affector ColourFader
- {
- red -0.05
- green 0
- blue 0
- alpha 0
- }
- affector DeflectorPlane
- {
- plane_point 0 -50 0
- plane_normal 0 1 0
- bounce 1
- }
- affector DeflectorPlane
- {
- plane_point 0 50 0
- plane_normal 0 -1 0
- bounce 1
- }
- affector DeflectorPlane
- {
- plane_point 50 0 0
- plane_normal -1 0 0
- bounce 1
- }
- affector DeflectorPlane
- {
- plane_point -50 0 0
- plane_normal 1 0 0
- bounce 1
- }
- affector DeflectorPlane
- {
- plane_point 0 0 50
- plane_normal 0 0 -1
- bounce 1
- }
- affector DeflectorPlane
- {
- plane_point 0 0 -50
- plane_normal 0 0 1
- bounce 1
- }
- affector DirectionRandomiser
- {
- randomness 60
- }
- }
节点轨迹跟踪
如果是需要显示物体的运动轨迹,可以使用RibbonTrail类来实现,首先是创建一个RibbonTrail实例,然后把节点添加给RibbonTrail,要注意的是参数numberOfChains限定了可以添加的node数量。
- Ogre::NameValuePairList params;
- params["numberOfChains"] = "1";
- params["maxElements"] = "80";
- Ogre::RibbonTrail* m_pRocketTrail = static_cast<RibbonTrail*>(m_pSceneMgr->createMovableObject("RibbonTrail", ¶ms));
- m_pRocketTrail->setMaterialName("Examples/LightRibbonTrail");
- m_pRocketTrail->setTrailLength(20);
- m_pRocketTrail->setVisible(false);
- m_pSceneMgr->getRootSceneNode()->attachObject(m_pRocketTrail);
- m_pRocketTrail->setInitialColour(0, 1, 0.8, 0);
- m_pRocketTrail->setColourChange(0, 0.75, 1.25, 1.25, 1.25);
- m_pRocketTrail->setWidthChange(0, 1);
- m_pRocketTrail->setInitialWidth(0, 0.5);
- m_pRocketTrail->setVisible(true);
- m_pRocketTrail->addNode(m_pRocket->getParentNode());