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视图