用C++實現跨平台遊戲開發之Irrlicht引擎(3)

來源:互聯網
上載者:User

六、 粒子系統

  下面介紹的這個特別效果更有趣:一個粒子系統。在Irrlicht引擎中,粒子系統既是組件化的,也是可擴充的,但是仍然便於使用。你只需要簡單地把粒子發射器放到一個粒子系統情境結點,這樣以來粒子看上去沒有產生源。這些發射器可以據需要進行靈活配置,並經常帶有許多參數,如粒子方向,粒子數量,以及粒子顏色等。

  當然,發射器類型有區別(例如,一個點發射器能夠使粒子從一個固定的點上發出粒子)。如果該引擎提供的粒子發射器還不能滿足你的要求,你可以容易地建立你自己的發射器。這隻需簡單地從IParticleEmitter介面派生一個新類並使用setEmitter()方法把它依附到粒子系統上去即可。

  下一個執行個體將建立一個盒子粒子發射器。你可能已經猜出,它從一個跳躍的盒中隨機產生粒子。由參數來定義盒子,粒子的方向,每秒產生粒子的最小和最大數目,顏色以及粒子的最小和最大生命週期。

  一個完全由發射器組成的粒子系統將是令人生厭的,因為缺乏真實感。因此,Irrlicht支援粒子影響器-它負責在粒子到處飛揚時予以修整。一旦添加到粒子系統上,它們就能模仿另外的更真實的效果,象重力或風。在本例中的粒子影響器只是簡單地修改粒子的顏色來產生一種淡出效果。

  可能你已經猜出,粒子影響器是通過派生IParticleAffector介面實現的,然後通過使用addAffector()方法把它添加到粒子系統上去。在你為該粒子系統設定了一種好看的材質後,你就有了一個看上去相當酷的野外宿營火的效果。通過調整材質,紋理,粒子發射器,還有影響器參數,你能容易地建立煙霧,下雨,爆炸,下雪等效果:

scene::IParticleSystemSceneNode* ps = 0;
ps = smgr->addParticleSystemSceneNode(false);
ps->setPosition(core::vector3df(-70,60,40));
ps->setScale(core::vector3df(2,2,2));
ps->setParticleSize(core::dimension2d(20.0f, 10.0f));
scene::IParticleEmitter* em = ps->createBoxEmitter(
core::aabbox3d(-7,0,-7,7,1,7),
core::vector3df(0.0f,0.03f,0.0f),
80,100,
video::SColor(0,255,255,255), video::SColor(0,255,255,255),
800,2000);
ps->setEmitter(em);
em->drop();
scene::IParticleAffector* paf =ps->createFadeOutParticleAffector();
ps->addAffector(paf);
paf->drop();
ps->setMaterialFlag(video::EMF_LIGHTING, false);
ps->setMaterialTexture(0, driver->getTexture,"particle.bmp"));
ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);

  七、 影子投射

  最後但也不容忽視一個問題是,你需要為一個動畫角色產生一個動態影子。為此,你裝載一個Quake2.md2模型檔案並把它放到你的world上去。為了建立影子,你只需要調用方法addShadowVolumeSceneNode()。你可能通過調用ISceneManager::setShadowColor()來控制影子的顏色;注意,這僅是全域可調整的,並影響所有的影子。好,下面就是你的產生動態影子效果的代碼:

mesh = smgr->getMesh("http://www.cnblogs.com/media/faerie.md2");
scene::IAnimatedMeshSceneNode* anode = 0;
anode = smgr->addAnimatedMeshSceneNode(mesh);
anode->setPosition(core::vector3df(-50,45,-60));
anode->setMD2Animation(scene::EMAT_STAND);
anode->setMaterialTexture(0, driver->getTexture("http://www.cnblogs.com/media/Faerie5.BMP"));
anode->addShadowVolumeSceneNode();
smgr->setShadowColor(video::SColor(220,0,0,0));

  八、 遊戲迴圈

  最後,你能進入由device->run()方法控制的遊戲迴圈。該迴圈將不斷運行,直到通過擷取一個關閉視窗事件(例如在Windows作業系統下的ALT-F4擊鍵)來退出裝置。你必須在一個beginScene()和endScene()命令對之間繪製每樣東西。beginScene()用指定的一種顏色清屏,如果需要的話,可以同時清除深度緩衝區。然後你就可以讓情境管理器和GUI環境來繪製它們的內容。隨著調用endScene(),每一樣東西都被繪製到螢幕上去。在本例中,你還可以動態地在標題列上顯示幀每秒(FPS)數,這對於嚴肅的遊戲開發人員是十分重要的事情:

scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS();
camera->setPosition(core::vector3df(-50,50,-150));
int lastFPS = -1;
while(device->run())
{
 driver->beginScene(true, true, 0);
 smgr->drawAll();
 driver->endScene();
 int fps = driver->getFPS();
 if (lastFPS != fps)
 {
  core::stringw str = L"Campfire FX example [";
  str += driver->getName();
  str += "] FPS:";
  str += fps;
  device->setWindowCaption(str.c_str());
  lastFPS = fps;
 }
}
device->drop();

  結束迴圈後,你必須刪除先前用createDevice()方法建立的Irrlicht裝置。通過使用Irrlicht引擎,你應該刪除所有你用以’create’開頭的方法或函數建立的所有對象。你可以通過簡單地調用device->drop()來刪除該裝置對象。

  九、你可能喜歡的Irrlicht外掛程式

  正如在前面所介紹的,Irrlicht有一群勤奮的獨立程式開發人員並為之產生了大量的外掛程式,也用之開發了相當多的遊戲。這些開發人員中提出的許多的改進被再次整合到Irrlicht的隨後的發行版本中。下面我列舉其中的幾個例子,我想這會吸引許多頗有前程的開發人員感興趣:

  ·OCTTools,是一套用於Irrlicht的工具,由Murphy McCauley所建立,用於操作OCT檔案相關的:輸出器,載入器,甚至更多。

  ·ICE(Irrlicht通用引擎)是一個開發架構,它提供了一個工程的輪廓實現,從而加快了新工程的開發。

  ·MIM,由Murphy McCauley所建立,是一個非常有用的基於XML的檔案格式,可用於Irrlicht的載入器,轉換器及其各種工具。

  ·My3D是一個開發套件,它能夠使你把來自於各種3D包(3DStudio MAX,Giles,等等)中的燈光貼圖情境直接輸出到Irrlicht中。

  ·Dusty引擎允許程式員建立"任務"-這些"任務"可以完成程式員想做的任何事情。之後,這些任務被添加到一棵普通的任務樹上去,而每個任務可以有它們希望數目的孩子任務。任務"組"允許遊戲設計者在一棵完整的樹上執行普通的操作,例如暫停,繼續或破壞等。

  ·Irrlicht RPG(Erring Light)是一個3D 繞行走遊戲引擎,最初是針對RPG類遊戲開發的。

  ·2D 映像和精靈類組成了一個很有用的庫,它擴充了Irrlicht的2D能力。

  ·Zenprogramming網站,提供第一個針對Irrlicht的非正式的外部地形產生器,此處也提供很多相關的教程

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/huangchonghai/archive/2007/09/02/1768849.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.