我正在尝试创建一个无窗口的 Ogre 应用程序,但该应用程序似乎完全忽略了 RenderWindow::setVisible(false) 方法。有没有办法做到这一点?
谢谢托马索_
你不应该使用RenderWindow
,但RenderTexture
如果你不想打开一个窗口。它的工作原理几乎完全相同,RenderWindow
因为它也来自于RenderTarget
。除了更改构造函数之外,您只需使用当前参数切换它们几乎没有问题。
如果您在切换时遇到问题,请使用一些具体代码更新您的问题。
据我所知,即使您只想创建一个无窗口应用程序,也必须创建一个窗口。如果不创建 RenderWindow ( window = m_root->initialise(true, "App")
) 就无法初始化 Ogre 使用 Ogre 1.8,您可以通过调用隐藏窗口。window->setHidden(true)
多亏了这种方法,您可以绕过问题并制作一个“无窗口”应用程序。
正如 Svenstaro 所说,您可以将渲染重定向到 RenderTexture。我使用下面的代码将我的帧渲染成纹理:
m_window = m_root->initialise(true, "App");
m_window->setHidden(true);
Ogre::WindowEventUtilities::messagePump(); // Force the window to be hidden (necessary under Ubuntu for my case)
m_camera = m_sceneMgr->createCamera("Cam");
Ogre::TexturePtr rtt_texture = Ogre::TextureManager::getSingleton().createManual("RttTex",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
Ogre::TEX_TYPE_2D, 640, 480, 0,
Ogre::PF_R8G8B8,
Ogre::TU_RENDERTARGET);
Ogre::RenderTexture* m_tex = rtt_texture->getBuffer()->getRenderTarget();
Ogre::Viewport* vp = m_tex->addViewport(m_camera);
vp->setClearEveryFrame(true);
vp->setBackgroundColour(Ogre::ColourValue::Black);
vp->setOverlaysEnabled(false);
m_camera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight()));
在渲染循环中:
while(1)
{
m_root->renderOneFrame();
m_tex->update();
// Other stuffs
}