OGRE3d的官方網站為 https://www.ogre3d.org/ ,使用該開源3D引擎的項目也很多了,我們知道在機器人模擬器中和三維游戲中使用的比較多,像Gazebo 機器人模擬器就是用的OGRE,這個開源引擎定位為三維圖形引擎,不是完整功能的游戲引擎概念,做科學計算可視化或者圖形圖像研究等方面的也很多,它是基於插件機制在下面包裝了DX和OpenGL圖形API,向上抽象了場景,節點,攝像機,材質等圖形對象,總體上具有研究價值,細節復雜,文檔和國內研究者都太少,不適合入門或者游戲集成開發商選型,基本上是別人做的很棒到自己運行都可能出錯,唯有花大量時間研究代碼和摸索,可能是該庫作者的初衷吧!今天抽空把QtOgre及相關筆記整理了一下。
主要是參考的OGRE 的WIKI的QtOgre文章 http://wiki.ogre3d.org/QtOgre ,但是也是改了很多,工程源代碼 qtogre0.zip 的鏈接放在百度網盤上 https://pan.baidu.com/s/1Qqi-0x-UsQCpYBlL5n4YHA。基於 Qt4.8.6 和 OGRE1.8.1 步驟如下:
1.下載預編譯的 OgreSDK1.8.1 https://www.ogre3d.org/download/archives,選擇 OGRE 1.8.1 SDK for Visual C++ 2010 (32-bit),鏈接為
https://sourceforge.net/projects/ogre/files/ogre/1.8/1.8.1/OgreSDK_vc10_v1-8-1.exe/download
下載的 OgreSDK_vc10_v1-8-1 解壓到 D:\mclib ,用notepad++打開 D:\mclib\OgreSDK_vc10_v1-8-1\bin\debug\plugins_d.cfg
將 Plugin=RenderSystem_Direct3D11_d 前加 # 注掉,如下
即我們缺省用OpenGL作為渲染API,免得還要安裝DX11
2.Qt4.8.6及VC2010環境保證也已經安裝,然后打開下載的 qtogre0.zip解壓,VC2010打開工程
這里OgreWidget類即上面wiki頁面的代碼,主要添加了:
a.構造函數設置了OgreSDK的路徑,我們是解壓在D:/mclib/OgreSDK_vc10_v1-8-1
OgreWidget::OgreWidget(QWidget *parent):
QGLWidget( parent ),
mOgreWindow(NULL)
{
// mOgreSdkPath 是OgreSDK解壓后的路徑
mOgreSdkPath = "D:/mclib/OgreSDK_vc10_v1-8-1";
...
b.bool OgreWidget::loadResource()中是加載材質相關的資源
c. void OgreWidget::initializeGL()中初始化了資源,似乎只能在initializeGL()中初始化資源才能成功,應該跟OpenGL上下文有關。
創建了燈光,加載了ogrehead.mesh作為測試場景模型
void OgreWidget::initializeGL() { ... Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); ... Ogre::Light* l = mSceneMgr->createLight("MainLight"); l->setPosition(20,80,50); ... Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh"); Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); }
3.編譯運行,在
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups
會花一點時間,最后就是下面的運行結果,左邊的widget是UI,右邊的是OgreWidget是3D視圖