首页 > 代码库 > 在QT中使用Irrlicht引擎的方法与步骤

在QT中使用Irrlicht引擎的方法与步骤

  • 相关库,插件安装部分

本篇文档介绍在Qt5.2.0下面使用lrrlicht引擎在Qt窗口中输出(开发环境:vs2012)

  1. 首先安装好Qt5.2.0,下载地址:

http://download.qt-project.org/archive/qt/5.2/5.2.0/qt-windows-opensource-5.2.0-msvc2012-x86-offline.exe

  1. 接着安装qt中vs2012插件,下载地址:

http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe

  1. Irrlicht鬼火引擎下载,我使用的是irrlicht1.81.zip,地址:

http://irrlicht.sourceforge.net/downloads/

Irrlicht下载后就可以直接使用,里面的lib,dll已经编译好了,若要自己编译则需要安装direct9x,当然如果不安装也可以,可以在Irrlicht编译开关文件中关闭direct9x支持,强制使用openGL。

注释以下高亮行即可:

(文件: irrlicht-1.8.1\include\IrrCompileConfig.h)

//! Only define _IRR_COMPILE_WITH_DIRECT3D_8_ if you have an appropriate DXSDK, e.g. Summer 2004

// #define _IRR_COMPILE_WITH_DIRECT3D_8_

?

// modify by TMLi,不使用direct9 2014.9

//#define _IRR_COMPILE_WITH_DIRECT3D_9_

?

#ifdef NO_IRR_COMPILE_WITH_DIRECT3D_8_

#undef _IRR_COMPILE_WITH_DIRECT3D_8_

#endif

#ifdef NO_IRR_COMPILE_WITH_DIRECT3D_9_

#undef _IRR_COMPILE_WITH_DIRECT3D_9_

#endif

?

  1. 上述安装完成后,我们需要在VS2012中对Qt做相关配置,在VS2012中菜单-QT5-Qtoptions,打开Qt设置对话框,将我们安装的Qt5路径设置进去即可,如下图所示。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

  • 环境搭建部分

创建Qt工程,解决方案名称:IrrlichtSolution,工程名称:IrrlichtHelloWorld

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

qt会提示我们要使用的Qt部件,我们将OpenGL支持勾上

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

工程创建完毕后,我们来设置包含目录,库目录等。先看包含目录设置,如下图

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

库目录设置,如下图

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

链接器-输入-附加依赖项

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

完成上面步骤后,VC环境配置基本完成。

  • 设计与编码部分

设计

我们接下要写的例子是基于IrrLicht中的Example中的第一个例子:

01.HelloWorld (路径:irrlicht-1.8.1\examples\01.HelloWorld)

原例的运行效果如下:

?

?

?

?

?

?

?

?

?

?

?

我们要在其基础上之上做出改进,改进需求如下:

  • 在指定Qt窗口中显示Irrlicht引擎的输出画面
  • 可以手动开启或关闭Irrlicht引擎
  • 可以手动调节场景摄像机的位置

?

在正式看代码之前,我们先看下最后的效果,如下图所示,黑色屏幕即为输出Irrlicht的画面的窗口。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

分析:仔细观看irrlicht的helloworld我们发现可以使用createDeviceEx函数,通过irr::SIrrlichtCreationParameters来构建IrrlichtDevice,SIrrlichtCreationParameters中有一个windowId字段,通过文档可以发现,只要将显示irrlicht输出窗口ID传给irrlicht即可将画面输出到指定窗口。所以我们只要将某个QWidget窗口的windowID传给irrlicht即可。

指定窗口输出irrlicht画面的代码片断:

irr::SIrrlichtCreationParameters param;

param.WindowId = (void*)m_winID;

IrrlichtDevice *device = createDeviceEx(param);

?

开启,关闭irrlicht引擎,我们只需要启动或关闭irrlicht渲染线程即可办到,而控制摄像机的位置则更简单,我们只需要在创建场景摄像机时保存摄像机句柄和当前位置,然后将改变的位置传递给摄像机句柄即可。

m_camer_pos = vector3df(0,30,-40);

m_camer = smgr->addCameraSceneNode(0, m_camer_pos, vector3df(0,5,0));

?

下面为核心的irrlicht渲染线程,QIrrLichtTrhead继承至QThread。

void QIrrLichtThread::run()

{

????

????irr::SIrrlichtCreationParameters param;

????param.WindowId = (void*)m_winID;

????IrrlichtDevice *device = createDeviceEx(param);

?

????if (!device)

????????return ;

?

?

????device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

?

????IVideoDriver* driver = device->getVideoDriver();

????ISceneManager* smgr = device->getSceneManager();

????IGUIEnvironment* guienv = device->getGUIEnvironment();

?

????guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",

????????irr::core::rect<s32>(10,10,260,22), true);

?

?

?

????IAnimatedMesh* mesh = smgr->getMesh("sydney.md2");

????if (!mesh)

????{

????????device->drop();

????????return ;

????}

????IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );

?

????if (node)

????{

????????node->setMaterialFlag(EMF_LIGHTING, false);

????????node->setMD2Animation(scene::EMAT_STAND);

????????node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") );

????}

?

????m_camer_pos = vector3df(0,30,-40);

????m_camer = smgr->addCameraSceneNode(0, m_camer_pos, vector3df(0,5,0));

?

????while(device->run() && m_bquit == false)

????{

?

????????driver->beginScene(true, true, SColor(255,100,101,140));

?

????????smgr->drawAll();

????????guienv->drawAll();

?

????????driver->endScene();

????}

????device->drop();

}

?

至此,核心代码已经全部贴出。若需要完整工程,可从此处下载

在QT中使用Irrlicht引擎的方法与步骤