0

我正在制作一个在内部使用 OGRE 的小型插件式图形引擎界面。这个想法是,在 Windows 或 Linux 中创建程序的人将能够使用我的插件来进行他们需要做的任何图形渲染。

事实上,已经有一个 Windows 应用程序使用 GDI 和 D3D 调用进行绘图,我需要对其进行修改,以便它可以使用 OGRE 进行绘图。

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

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

4

1 回答 1

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 作为 name:"parentWindowHandle" 值:你的句柄和十作为参数发送到 OgreRoot::createRenderWindow()。我用 Qt 尝试了这段代码,它奏效了。如果它不起作用,请尝试使用 externalWindowHandle 作为参数名称。

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

于 2011-10-17T15:30:11.663 回答