Come ottenere un'applicazione senza finestre in Ogre?
Domanda
Sto cercando di creare un finestre applicazione Ogre, ma sembra che il metodo RenderWindow :: setVisible (false) viene completamente ignorata dall'applicazione. C'è un modo per realizzare questo?
Grazie
Tommaso
Soluzione
Non si dovrebbe usare RenderWindow
ma RenderTexture
se si don' t vuole aprire una finestra. Funziona quasi esattamente la stessa di RenderWindow
perché è derivato da RenderTarget
pure. Si dovrebbe avere quasi alcuna difficoltà solo il passaggio in giro con i tuoi parametri correnti, tranne per cambiare il costruttore.
Si prega di aggiornare la tua domanda con un codice di cemento se non esegue in problemi con l'interruttore.
Altri suggerimenti
Per quanto ne so si sono per creare una finestra, anche se si vuole solo creare un'applicazione senza finestre. Non è possibile inizializzare Ogre senza creare un RenderWindow (window = m_root->initialise(true, "App")
)
Con Ogre 1.8 è possibile nascondere la finestra chiamando window->setHidden(true)
Grazie a questo metodo di bypassare il problema e si può fare un'app "senza finestre".
Come ha detto Svenstaro, è possibile reindirizzare il rendering in un RenderTexture. Io uso il codice qui sotto per rendere i miei fotogrammi in una texture:
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()));
Nel RenderLoop:
while(1)
{
m_root->renderOneFrame();
m_tex->update();
// Other stuffs
}