如何在Ogre中获得无窗口应用程序?

时间:2010-03-07 17:32:14

标签: windows window ogre3d ogre

我正在尝试创建一个无窗口的Ogre应用程序,但似乎应用程序完全忽略了RenderWindow :: setVisible(false)方法。有没有办法实现这个目标?

谢谢你 托马索

2 个答案:

答案 0 :(得分:8)

如果您不想打开窗口,则不应使用RenderWindow,而应使用RenderTexture。它与RenderWindow几乎完全相同,因为它也来自RenderTarget。除了更改构造函数之外,使用当前参数切换它们几乎没有问题。

如果您 遇到问题,请使用一些具体代码更新您的问题。

答案 1 :(得分:0)

据我所知,即使您只想创建一个无窗口应用, 也可以创建一个窗口。如果不创建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()));

在RenderLoop中:

while(1)
{
  m_root->renderOneFrame();
  m_tex->update();

  // Other stuffs
}