OGRE引擎可以渲染到任何窗口吗?

时间:2011-10-13 08:01:41

标签: windows visual-c++ com ogre3d ogre

我正在制作一个小型的插件式图形引擎接口,它在内部使用OGRE。我们的想法是,在Windows或Linux中创建程序的人可以使用我的插件进行他们需要做的任何图形渲染。

实际上已经有一个使用GDI& amp;的Windows应用程序了。 D3D调用绘图,我需要修改它,以便它可以使用OGRE进行绘图。

让我感到困惑的是,该应用程序是用VC ++编程的,因此具有Windows风格的菜单和用于绘图的客户区。但是由于OGRE创建了自己的渲染窗口,我是否可以将应用程序窗口客户区的句柄发送给OGRE,OGRE是否可以在窗口的客户区域中完成所有绘图?

我是Windows编程的新手,并且在一点时间限制下,所以不得不在这里问。

1 个答案:

答案 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,
                           &params );

QX11Info是Qt类,用于获取句柄。 句柄被插入到Ogre :: NameValuePairList作为名称:“parentWindowHandle”值:您的句柄和10作为参数发送到OgreRoot :: createRenderWindow()。我用Qt尝试了这个代码并且它有效。如果它不起作用,请尝试使用externalWindowHandle作为参数名称。

来源:http://www.ogre3d.org/tikiwiki/QtOgre