[原創]irrlicht 3d遊戲武器粒子特效的實現1 頂 原

3d遊戲裏的武器特效比如有粒子發光,火焰,或者是劍氣散發出來。一般都可以用粒子來實現(有點偷懶還可以用精靈圖片動畫來實現= =更節約資源,比如夢幻西遊那種2d的特效都是圖片動畫)。

例如上圖的武器粒子效果。

思路是這樣的。

找到武器劍柄節點以及武器劍尖節點。然後把粒子系統設置在這個AB兩點之間噴射即可,萬一武器是移動的位置方向變化的,那麼也要隨時update方向,或者綁定到父節點方式,一勞永逸。

 

首先是武器模型要設置骨骼節點。

我的武器劍尖節點叫joint4,劍柄joint2

 

下面開始代碼了,我用irrlicht 3d引擎來做示範。

加載人物。。

加載武器綁定到人物後背節點

 

//添加武器節點
scene::IAnimatedMeshSceneNode*  weaponNode = smgr->addAnimatedMeshSceneNode( weaponmesh );



video::SColor startcolor,endcolor;

startcolor=video::SColor(0,50,0,50);//粒子系統開始到結束的顏色定義 可產生漸變效果
endcolor=SColor(0,0,40,50);

     // 創建 粒子系統    
    scene::ISceneNode* pJointNode =weaponNode->getJointNode("joint2");  //joint4是劍尖
    if(pJointNode)
    {
   
        vector3df pos1=pJointNode->getAbsolutePosition();
        vector3df pos2=weaponNode->getJointNode("joint4")->getAbsolutePosition();

        vector3df dir=pos1-pos2;

        dir.normalize();


        ps = device->getSceneManager()->addParticleSystemSceneNode(false); //創建一個粒子系統,並使用自定義的發射器
        
        
        em=ps->createPointEmitter(dir,20,20,
            startcolor, endcolor,//開始顏色和結束顏色
            2000,2000   //存活時間,800-2000毫秒
            );
        em->setMaxStartSize(core::dimension2d<f32>(5.0f, 5.0f));
        em->setMinStartSize(core::dimension2d<f32>(5.0f, 5.0f));

        ps->setEmitter(em);//粒子系統設置發射器
        em->drop();

        ps->setMaterialFlag(video::EMF_LIGHTING, false);
        ps->setMaterialFlag(video::EMF_ZWRITE_ENABLE, false);
        ps->setMaterialTexture(0, device->getVideoDriver()->getTexture("textures/flare.bmp")); // fireball
        //ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
        ps->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);

        pJointNode->addChild(ps);
    }

 

然後不斷更新武器的粒子方向

void MyWeapon::update()
{
	if(weaponType>0 && ps){

		vector3df pos1=weaponNode->getJointNode("joint4")->getAbsolutePosition();
		vector3df pos2=weaponNode->getJointNode("joint2")->getAbsolutePosition();

		vector3df dir=pos1-pos2;

		dir.normalize();
	 	dir*=0.007f;
		em->setDirection(dir);


	}


}

 

完。

 

歡迎任何形式的轉載,但請務必註明出處,尊重他人勞動成果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章