如何在Ogre中创建一个无窗口应用程序?

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

我从未使用过Ogre,但我认为setVisible(true)的意思是显示窗口? - Nifle
2个回答

8
如果您不想打开窗口,那么就不应该使用RenderWindow,而应该使用RenderTexture。因为它也是从RenderTarget派生的,所以它的工作方式几乎与RenderWindow相同。只需更改构造函数,您就几乎没有任何问题可以使用当前参数轻松切换它们。
如果您对此感到困惑,请通过一些具体代码更新您的问题。

所以说它应该有一个可以工作的RenderTexture而不需要RenderWindow吗?我在使用RenderTexture时遇到了奇怪的问题:RenderTexture bigger than RenderWindow - Alessandro Pezzato
1
但是在1.9中RenderTexture是一个抽象类吗? - paulm

0
据我所知,即使您只想创建一个无窗口应用程序,您也必须创建一个窗口。不可能在不创建RenderWindow的情况下初始化Ogre (window = m_root->initialise(true, "App")) 使用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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接