我正在制作一个小型的插件式图形引擎接口,它在内部使用OGRE。我们的想法是,在Windows或Linux中创建程序的人可以使用我的插件进行他们需要做的任何图形渲染。
实际上已经有一个使用GDI& amp;的Windows应用程序了。 D3D调用绘图,我需要修改它,以便它可以使用OGRE进行绘图。
让我感到困惑的是,该应用程序是用VC ++编程的,因此具有Windows风格的菜单和用于绘图的客户区。但是由于OGRE创建了自己的渲染窗口,我是否可以将应用程序窗口客户区的句柄发送给OGRE,OGRE是否可以在窗口的客户区域中完成所有绘图?
我是Windows编程的新手,并且在一点时间限制下,所以不得不在这里问。
答案 0 :(得分:2)
也许这可以提供帮助:
Ogre::String winHandle;
#ifdef WIN32
// Windows code
winHandle += Ogre::StringConverter::toString((unsigned long)(this->parentWidget()->winId()));
#else
// Unix code
QX11Info info = x11Info();
winHandle = Ogre::StringConverter::toString((unsigned long)(info.display()));
winHandle += ":";
winHandle += Ogre::StringConverter::toString((unsigned int)(info.screen()));
winHandle += ":";
winHandle += Ogre::StringConverter::toString((unsigned long)(this->parentWidget()->winId()));
#endif
Ogre::NameValuePairList params;
params["parentWindowHandle"] = winHandle;
mOgreWindow = mOgreRoot->createRenderWindow( "QOgreWidget_RenderWindow",
this->width(),
this->height(),
false,
¶ms );
QX11Info是Qt类,用于获取句柄。 句柄被插入到Ogre :: NameValuePairList作为名称:“parentWindowHandle”值:您的句柄和10作为参数发送到OgreRoot :: createRenderWindow()。我用Qt尝试了这个代码并且它有效。如果它不起作用,请尝试使用externalWindowHandle作为参数名称。