亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用C++實現跨平臺游戲開發之Irrlicht引擎

2019-11-17 05:08:09
字體:
來源:轉載
供稿:網友

  一、 引言

  Irrlicht引擎是一個用C++書寫的高性能實時的3D引擎,可以應用于C++程序或者.NET語言中。通過使用Direct3D(Windows平臺),OpenGL 1.2或它自己的軟件著色程序,可以實現該引擎的完全跨平臺。盡管是開源的,該Irrlicht庫提供了可以在商業級的3D引擎上具有的藝術特性,例如動態的陰影,粒子系統,角色動畫,室內和室外技術以及碰撞檢測等(見圖1)。

用C++實現跨平臺游戲開發之Irrlicht引擎
圖1.Irrlicht 3D引擎

  Irrlicht是一個德國神話故事中的一種動物的名字,它能夠發光和翱翔,可以在大部分的沼澤地四周發現它。單詞"Irrlicht"是兩個德國單詞("irr"意思是瘋狂的;而"Licht"意思是光)的組合。在英語中,它被譯為"鬼火"。

  Irrlicht十分幸運地為一個巨大的活躍的開發團隊以大量的工程所支持。然而,因為Irrlicht主要由游戲名家Nikolaus Gebhardt所設計,所以該游戲在設計上十分連貫。你可以在網上到處發現有Irrlicht的增強程序,如可選用的地形生成器,入口生成器,輸出器,world層生成器,相關教程和編輯器等。而且,它獨立地創建了到java,Perl,Ruby,BASIC,Python,LUA甚至更多種語言的綁定。而最為重要的是,它是完全自由的。

  二、 Irrlicht特性

  在深入分析API之前,請讓我更具體地介紹一下Irrlicht提供給了3D游戲開發者哪些功能:

  ·一個可以運行于linux以及Windows 98,ME,NT,2000和XP(MacOS在計劃之中)等操作系統之上的引擎

  ·針對Direct3D 8生成器或Direct3D 9生成器(可選)提供了Anti-aliasing支持

  ·可換膚的GUI環境(包括一個很酷的具有金屬質地的帶陰影的皮膚),給一些老式的對話框加上漂亮的外觀

  ·場景治理系統,它答應無縫的室內/室外過渡

  ·角色動畫系統,帶有骨骼和變形目標動畫功能

  ·一個非凡的效果系統,包括粒子效果(雨,煙,火,雪,等等),告示板,燈光貼圖,環境,地圖,模板緩沖區陰影,霧,紋理動畫,視差貼圖,凹凸貼圖,還有更多

  ·內建的材質支持,包括支持Pixel and Vertex Shaders版本1.1到3.0,ARB Fragment and Vertex程序以及HLSL(GLSL正在計劃中)

  ·.NET語言綁定,這使得引擎可用于所有的.NET語言例如C#,Visual Basic.NET以及Delphi.NET

  ·一內建的平臺獨立的軟件生成器,特性有:z-緩沖,Gouraud陰影,alpha混合和透明性,還有快速的2D繪圖(見圖2)

  ·你久已期待的2D繪圖功能,例如alpha混合,基于要害色的位圖復制,字體繪制,以及混合3D與2D圖形

  ·能直接導入常見的建模文件格式:Maya,3DStudio Max,COLLADA,DeleD,Milkshape,Quake 3 levels,Quake2 models,DirectX,Pulsar,My3DTools,FSRad以及Cartography Shop

  ·能直接從BMP,PNG,photoshop,JPEG,Targa和PCX導入紋理

  ·快速而易用的碰撞檢測與響應

  ·為快速的3D運算和容器模板庫進行了優化處理

  ·直接讀取檔案(可能是壓縮的,如.zip文件)

  ·集成了快速的xml分析器


  ·為實現輕易的本地化開發提供Unicode支持

用C++實現跨平臺游戲開發之Irrlicht引擎
圖2:基于Irrlicht的游戲Yet Another Space Shooter(YASS),這里顯示的是一個靜態游戲幀中的令人吃驚的著色效果

更多文章 更多內容請看C/C++相關文章  程序設計  網絡游戲開發專題,或
  三、 在Irrlicht中的非凡效果

  在本文的例子中,我將向你展示怎樣使用模板緩沖區影子技術,還有粒子系統,告示板,動態光以及水表面場景結點等技術。參見圖3。

用C++實現跨平臺游戲開發之Irrlicht引擎
圖3.結合動態的光和水進行的場景著色

  Irrlicht引擎自動地檢查是否你的硬件支持模板緩沖;而假如不支持,則不啟動陰影。在這個演示程序中,在方法createDevice()中的’shadows’標志被置位,以產生從一個動畫角色投下的動態影子。假如這個實例程序在你的PC上運行太慢,可以把這個標志設置為false或者干脆再買一塊更好些的圖形加速卡。

  為能夠使用Irrlicht.DLL文件,你需要鏈接到Irrlicht.lib庫文件。你可以在工程設置對話框中設置這個選項;但是為了輕易實現,你可以使用一個PRagma預編譯注釋命令。方法createDevice()負責實例化根對象-它使用引擎完成一切事情。參數如下:

  ·deviceType:設備類型。當前你可選取Null設備以及軟設備,如DirectX8,DirectX9或OpenGL。

  ·windowSize:要創建的窗口的大小或全屏幕模式。這個例子中使用512x384。

  ·bits:每像素位數(當在全屏幕情況時)。僅答應值為16或者32。

  ·fullscreen:指定是否你想使設備運行于全屏幕方式。

  ·stencilbuffer:指定是否你想使用模板緩沖區以用于繪制陰影。

  ·vsync:指定是否你想啟動vsync(僅在全屏幕情況),可選。

  ·eventReceiver:一個接收事件的對象,可選。

  為適合于本實例環境,你將裝載一個3D Studio Max文件(一幢房子)。該房子看起來并沒有什么非凡的,但是Irrlicht引擎能為你創建一個相當酷的紋理貼圖。只需使用造型操縱器并為之創建一個planar紋理貼圖即可:

#include <irrlicht.h>
#include <iostream>
using namespace irr;
#pragma comment(lib, "Irrlicht.lib")
int main()
{
 //讓我們假定用戶在本例中使用OpenGL
 //當然,也可以指定DirectX 8, 9, 等等.
 video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
 //創建設備,假如創建失敗立即退出。
 IrrlichtDevice *device = createDevice(driverType,
 core::dimension2d(640, 480), 16, false, true);
 if (device == 0)
  return 1;
 video::IVideoDriver* driver = device->getVideoDriver();
 scene::ISceneManager* smgr = device->getSceneManager();

  我對從這個導入文件產生的發射光線顏色的效果并不滿足。下列代碼顯示怎樣實現這些步驟:

scene::IAnimatedMesh* mesh = smgr->getMesh("room.3ds");
smgr->getMeshManipulator()->makePlanarTextureMapping(
mesh->getMesh(0), 0.008f);
scene::ISceneNode* node = 0;
node = smgr->addAnimatedMeshSceneNode(mesh);
node->setMaterialTexture(0, driver->getTexture("wall.jpg"));
node->getMaterial(0).EmissiveColor.set(0,0,0,0);
  四、 水動畫

  你將添加的第一個非凡的效果是水動畫。為此,WaterSurfaceSceneNode導入一個造型文件并使之象水表面一樣地波動。假如你讓這個場景結點使用一種相當好的材質如MT_REFLECTION_2_LAYER,那么它看起來相當酷:

mesh = smgr->addHillPlaneMesh("myHill",
core::dimension2d(20,20),
core::dimension2d(40,40), 0, 0,
core::dimension2d(0,0),
core::dimension2d(10,10));
node = smgr->addWaterSurfaceSceneNode(mesh->getMesh(0),3,300,30);
node->setPosition(core::vector3df(0,7,0));
node->setMaterialTexture(0,driver->getTexture("water.jpg"));
node->setMaterialTexture(1,driver->getTexture("stones.jpg"));

node->setMaterialType(video::EMT_REFLECTION_2_LAYER);
  作為輸入造型,你可以創建一個陡峭的平面造型,但是你也可以為此使用任何其它的造型。你甚至能重用room.3ds輸入文件(它看上去確實很希奇)。該實例還用一個普通的石頭紋理模型來繪制所有另外的表面。

  五、透明的告示板和燈光

  第二個非凡的效果是很基本的但是非常有用:一個透明的告示板,伴之有一個動態的燈光。為產生這種效果,你只需要產生一個燈光場景結點,并讓它四處飛行;而且,為了讓它看起來更酷一些,可以把一個告示板場景結點依附到它上面:

//創建燈光
node = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);
scene::ISceneNodeAnimator* anim = 0;
anim = smgr->createFlyCircleAnimator(core::vector3df(0,150,0),250.0f);
node->addAnimator(anim);
anim->drop();
// 把告示板依附到燈光
node = smgr->addBillboardSceneNode(node, core::dimension2d(50, 50));
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
node->setMaterialTexture(0,driver->getTexture("particlewhite.bmp"));
更多文章 更多內容請看C/C++相關文章  程序設計  網絡游戲開發專題,或   六、 粒子系統

  下面介紹的這個非凡效果更有趣:一個粒子系統。在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("../../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("../../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的非正式的外部地形生成器,此處也提供很多相關的教程。 更多文章 更多內容請看C/C++相關文章  程序設計  網絡游戲開發專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜剧场成人观在线视频免费观看| 国产噜噜噜噜噜久久久久久久久| 亚洲美女动态图120秒| 欧美黑人xxx| 神马国产精品影院av| 日韩精品极品在线观看播放免费视频| 国内精品中文字幕| 欧美成在线视频| 91国内免费在线视频| 最新91在线视频| 国产精品电影一区| 亚洲美女av在线| 国产精品r级在线| 91视频免费网站| 亚洲图中文字幕| 欧美日韩国产123| 久久久亚洲国产| 国产精品扒开腿做爽爽爽男男| 欧美日韩性视频| 色妞一区二区三区| 欧美亚洲视频一区二区| 国产亚洲视频中文字幕视频| 91久久久久久国产精品| 亚洲精品欧美一区二区三区| 日韩视频在线一区| 精品人伦一区二区三区蜜桃免费| 97av在线视频免费播放| 日韩中文字幕视频在线观看| 91视频国产一区| 26uuu久久噜噜噜噜| 亚洲免费av电影| 欧美精品亚州精品| 4388成人网| 亚洲精品一区二区在线| 69影院欧美专区视频| 国产精品电影网| 国产精品第三页| 国产精品一区二区三区在线播放| 国产欧美一区二区三区久久| 欧美国产日本在线| 中文字幕亚洲欧美日韩高清| 国产日韩欧美在线| 日韩av片电影专区| 欧美在线观看视频| 国产啪精品视频| 日本国产一区二区三区| 神马久久桃色视频| 亲爱的老师9免费观看全集电视剧| 欧美日韩美女在线| 久久亚洲精品中文字幕冲田杏梨| 国产成人精品在线| 久久精品国亚洲| 成人xxxx视频| 亚洲成av人乱码色午夜| 成人福利视频网| 在线观看亚洲视频| 欧美福利视频在线| 狠狠躁夜夜躁人人爽天天天天97| 国产精品一区二区三区在线播放| 欧美伦理91i| 一区二区福利视频| 91青草视频久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 91极品视频在线| 欧美日韩国产页| 最近2019免费中文字幕视频三| 国产成人黄色av| 国产成人精品999| 欧美激情乱人伦一区| 欧美www视频在线观看| 国外成人在线视频| 午夜精品一区二区三区av| 精品久久久久久中文字幕一区奶水| 日本精品免费观看| 日韩欧美高清视频| 欧美三级免费观看| 亚洲91精品在线观看| 国产精品美腿一区在线看| 国产精品揄拍一区二区| 国产精品电影网站| 亚洲激情在线视频| 久久夜色精品国产亚洲aⅴ| 在线国产精品播放| 88国产精品欧美一区二区三区| 欧美性jizz18性欧美| 国产精品久久久久久久久久久久| 国产精品伦子伦免费视频| 成人在线观看视频网站| 亚洲成人在线视频播放| 国产精品午夜一区二区欲梦| 国产原创欧美精品| 日韩av电影在线免费播放| 91麻豆桃色免费看| 国产亚洲欧美视频| 国产精品色婷婷视频| 亚洲bt天天射| 欧美日韩国产123| 成人免费自拍视频| 国产日韩在线观看av| 97在线日本国产| 91日本在线观看| 最近2019年好看中文字幕视频| 亚洲高清免费观看高清完整版| 久久久免费观看| 久久久免费高清电视剧观看| 国产精品成人av在线| 国产欧美精品一区二区| 中文字幕日韩精品有码视频| 日韩在线视频中文字幕| 亚洲欧美成人网| 亚洲人成电影在线观看天堂色| 亚洲女性裸体视频| 在线精品视频视频中文字幕| 中文字幕日韩电影| 亚洲电影在线看| 欧美视频精品一区| 久久亚洲国产精品| 精品偷拍各种wc美女嘘嘘| 91国产精品91| 国产精品扒开腿做| 久久成人18免费网站| 久久91亚洲人成电影网站| 亚洲少妇激情视频| 亚洲欧洲一区二区三区在线观看| 亚洲一区久久久| 国产精品香蕉av| 久久亚洲国产精品| 国产亚洲aⅴaaaaaa毛片| 九九热精品视频在线播放| 久久久99久久精品女同性| 日本韩国欧美精品大片卡二| 中文字幕日韩视频| www.日韩欧美| 国产中文欧美精品| 中文字幕欧美在线| 狠狠躁夜夜躁人人爽天天天天97| 91av在线影院| 国产精品夫妻激情| 久久综合久久88| 亚洲国产精品悠悠久久琪琪| 欧美视频中文在线看| 久久成人18免费网站| 亚洲国产一区二区三区在线观看| 国产综合在线观看视频| 久久成年人免费电影| 欧美黑人一级爽快片淫片高清| 久久精品视频导航| 国内成人精品视频| 国产亚洲欧美日韩精品| 欧美日韩免费在线| 国产精品黄色av| 久久福利网址导航| 欧美成人黑人xx视频免费观看| 日韩一区二区福利| 欧美日韩国产精品一区| 成人欧美在线观看| 国内精品久久久久影院优| 51午夜精品视频| 热99久久精品| 欧美激情一级二级| 欧美理论电影网| 丝袜美腿亚洲一区二区| 97精品一区二区三区| 国产xxx69麻豆国语对白|