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

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條評論
主站蜘蛛池模板: 国产91在线看| 亚州精品一区二区三区 | 亚洲欧美不卡 | 亚洲高清免费 | 日日摸夜夜添夜夜添久久 | 日本精品高清一区二区不卡 | 日本不卡高清免费v | 日韩一区二区三区在线观看 | 国产九九免费视频 | 人人干在线观看 | 欧美黄色毛片 | 久久一日本道色综合久久m 久久一色本道亚洲 | 久草免费资源视频 | 无遮挡又黄又爽又色的视频免费 | 99久久国产综合精品成人影院 | 中国免费一级毛片 | 激情五月色婷婷丁香伊人 | 成人网在线免费观看 | 看看的在线视频国产 | 精品亚洲国产国拍 | 国产精品视频免费在线观看 | 天堂一区二区三区精品 | 国产视频一区在线播放 | 中文字幕欧美亚洲 | 可以免费观看的一级毛片 | 久久99精品久久久久久园产越南 | 亚洲区视频在线观看 | 一级毛片在线免费观看 | 国产免费人成在线视频视频 | 国产成人精品自拍 | 天天久久综合 | 日日摸夜夜添夜夜添欧美毛片 | 99久久99热久久| 久久精品23| 深夜精品寂寞在线观看黄网站 | 久久国内免费视频 | 欧美性爰视频 | 久久久久久中文字幕 | 国产区在线视频 | 国产亚洲欧美一区二区三区 | 九九涩 |