- 需要导入lib库和头文件
- 创建类Q3DDrawThread 专门来处理所有与irrlicht相关的事件
Q3DDrawThread 是继承于QThread,在Q3DDrawThread 的函数run()中,实现如下代码:
void Q3DDrawThread::run()
{
//初始化irrlicht引擎
if (!initIrr())
{
LOG(ERROR) << "initIrr Error====";
return;
}
// 创建场景
if (!buildIrrScene())
{
LOG(ERROR) << "buildIrrScene Error====";
return;
}
while (m_device->run() && !m_bStop)
{
//处理任务
processTasks();
m_driver->beginScene(true, true, video::SColor(255, 50, 50, 50));
drawOthers();
m_smgr->drawAll();
m_smgr->getGUIEnvironment()->drawAll();
m_driver->endScene();
}
m_device->drop();
m_device = nullptr;
}
- 创建窗口Q3DWidget 继承QWidget
- 在Q3DDrawThread启动前将Q3DWidget 的窗口句柄传给Q3DDrawThread 即可
- 将鼠标事件post给irrlicht 引擎使用postEventFromUser
注意:irrlicht是非线程安全的,与Irrlicht相关的操作一定要放在同一个线程中