亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

irrlicht引擎源碼剖析1 - 引擎概覽

系統(tǒng) 1573 0

irrlicht是跨平臺,支持多種圖形庫的開源3d引擎。irrlicht的設計很好的體現(xiàn)了接口和實現(xiàn)分離的原則,整個框架設計精巧清晰,是學習3d引擎設計的不錯的教材。

先看下名字空間的劃分,可以看到irr具有非常清晰的結構:

irr Everything in the Irrlicht Engine can be found in this namespace
irr::core In this namespace can be found basic classes like vectors, planes, arrays, lists and so on
irr::gui The gui namespace contains useful classes for easy creation of a graphical user interface
irr::io
irr::scene
irr::scene::quake3
irr::video The video namespace contains classes for accessing the video driver. All 2d and 3d rendering is done here

irr空間中提供了引擎的一些底層構架的支持,如事件處理系統(tǒng),操作系統(tǒng)抽象,引用計數(shù),設備抽象等。
irr::core空間中提供了基礎的數(shù)學和數(shù)據(jù)結構構件,如向量,矩陣,四元數(shù),列表,數(shù)組,紅黑樹等。
irr::io空間提供了io操作的構件并提供對象屬性序列化和xml支持。
irr::video空間包含了3d圖形功能接口和構件。如對圖形驅動,材質渲染的抽象。
irr::scene空間包含了基于scene graph的3d引擎渲染和管理,并提供了camera,骨骼動畫,粒子系統(tǒng)等的豐富支持。
irr::gui空間包含了irrlicht的GUI模塊,同樣也是基于接口的設計。

我 想重點剖析的是irr::video和irr::scene,這是3d引擎的核心部分,目的是分析irrlicht是如何將不同的圖形API進行抽象的, 以及如何使用scene graph-material體系進行引擎的運轉,并將各種3d技術融入到這個體系中的。另外irr如何做到跨平臺支持的也會進行剖析。

作為引擎的概覽,首先看下文檔中的short example:

IrrlichtDevice *device = createDevice ( video::EDT_DIRECT3D8 , core::dimension2d(640,480)); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* scenemgr = device->getSceneManager();

這三句代碼顯示了irrlicht最基本的三個對象-設備,圖形驅動和場景管理器。簡單看來,通過全局函數(shù)createDevice根據(jù)指定的驅動類型創(chuàng)建一個設備,之后可通過設備對象得到驅動對象以及場景管理器對象。

device->setWindowCaption(L "Hello World!" );

設備對象具有一些設備相關的能力,比如這兒可以設置窗口標題。

// load and show quake2 .md2 model
scene::ISceneNode* node=scenemgr->addAnimatedMeshSceneNode(scenemgr->getMesh( "quake2model.md2" ));
// if everything worked, add a texture and disable lighting

if
(node)
{
node->setMaterialTexture(0, driver->getTexture( "texture.bmp" ));
node->setMaterialFlag( video::EMF_LIGHTING , false );
}
// add a first person shooter style user controlled camera
scenemgr->addCameraSceneNodeFPS();

這幾行代碼顯示了scene graph體系,ISceneNode是irrlicht場景中基礎組成部分節(jié)點的抽象,這兒添加了一個動畫mesh節(jié)點,和一個camera節(jié)點。節(jié)點 具有材質屬性(當然camera并不需要材質,但是ISceneNode作為一個抽象要盡量兼顧各種節(jié)點,為了讓接口的層次簡單些,這樣做也是一個實用的 方法)

// draw everything
while
(device->run() && driver)
{
driver->beginScene( true , true , video::SColor(255,0,0,255));
scenemgr->drawAll();
driver->endScene();
}
這幾行是引擎運轉的過程,首先引擎運轉的條件是設備仍然在運轉:device->run(),可通過closeDevice關閉設備。 scenemgr->drawAll()執(zhí)行了所有節(jié)點的渲染,節(jié)點的渲染不僅僅是draw,節(jié)點的transform計算,動畫計算(包括骨骼動 畫),camera這種特殊節(jié)點的操作(特殊的節(jié)點還有光源等),都包含在渲染的范疇中,在drawAll中統(tǒng)一調(diào)用,各種節(jié)點實現(xiàn)各自的渲染,最終由 scenemgr統(tǒng)一管理(如排序)繪制,這正是基于scene graph架構的引擎的特點之一。

device->drop();
這一句體現(xiàn)了irrlicht的引用計數(shù)機制,通過grab,drop管理對象引用次數(shù)。這兒如果一切正常應該是引用drop為0,device銷毀自己,退出程序。

從 這個很短的例子可以看到irrlicht的基本構件和運行過程。irrlicht提供了scene的管理機制,并提供了大量預定義好的scene nodes,實現(xiàn)了很多的功能,這樣你就可以很方便的使用引擎。并且這種機制的好處是,節(jié)點可以不斷的擴展,并可以在以后的項目中復用。

當然,irrlicht引擎不是完美的,我準備在這個源碼剖析的系列的最后,分析一下irrlicht的一些具體問題和不足,當然作為一個開源引擎,irrlicht已經(jīng)非常好了,我的主要目的正是通過分析學習irrlicht給自己設計3d引擎打一個基礎。

irrlicht引擎源碼剖析1 - 引擎概覽


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 牛牛影视在线入口 | 最新精品国产 | 天天综合天天添夜夜添狠狠添 | 视频一区日韩 | 四虎影院网址大全 | 亚洲在线视频免费观看 | 欧美韩国日本一区 | 亚洲美日韩 | 亚洲精品国产免费 | 日本中文在线三级在线播放 | 国产一级精品毛片 | 国产精品久久久久影院色老大 | 精品一区二区三区中文 | 亚洲欧美日韩成人一区在线 | 久久国产欧美日韩精品免费 | 中文字幕 日韩在线 | 欧美综合一区二区三区 | jizjizjiz亚洲人| 免费福利网站在线观看 | 成人一级黄色毛片 | 在线亚洲一区二区 | 欧美一级毛片欧美一级 | 日韩第三页 | 91精品刘玥在线播放 | 中文字幕一区2区3区 | 亚洲天堂区 | 国内精品美女久久久久 | 亚洲性生活 | 手机看片日韩日韩国产在线看 | 色综合久久综合欧美综合图片 | 九九视频免费精品视频免费 | 99伦理 | 欧美大狠狠大臿蕉香蕉大视频 | 黄页成人免费网站 | 欧美a在线 | 亚洲一区成人 | 天天拍拍夜夜出水 | 一级毛片一级毛片一级毛片 | 国产日韩亚洲 | 伊人久久精品亚洲午夜 | 欧美在线观看一区二区三 |