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

È stato utile?

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top