在OGRE中,可以将渲染窗口的内容保存下来,通常我们只希望将程序渲染结果保存下来,RenderTarget有一个纯虚函数叫writeContentsToFile()如果调用RenderTarget子类RenderWindow实现的writeContentsToFile,则是调用
D3DRenderWindow中实现的writeContentsToFile(),可是这样有一个问题,如果窗口在渲染的时候,有其它应用程序窗口在渲染窗口之上,会将其它程序在覆盖窗口的部分都保存下来。
那是因为D3DRenderWindow中的writeContentsToFile()是保存的屏幕缓冲的内容
所以为了解决这个问题,我们应该采用RenderTexture实现的writeContentsToFile()
它的原理是将Viewport中看到的内容渲染到手动定义的RenderTexture中,再将RenderTexture保存为文件即可。
通常有初始化:
Ogre::RenderTexture* mPrivateTex;
void CreatRenderTexture(void)
{
int width = mWindow->getWidth();
int height = mWindow->getHeight();
mPrivateTex =
mRoot->getRenderSystem()->createRenderTexture("rtt", width, height, Ogre::TEX_TYPE_2D);
mRoot->getRenderSystem()->attachRenderTarget(*mPrivateTex);
mPrivateTex->addViewport(mCamera);
}
Ogre::RenderTexture* GetRenderTexture(void)
{
return mPrivateTex;
}
在保存文件调用时:
Ogre::RenderTexture* renderTex;
renderTex = GetRenderTexture();
renderTex->update();
renderTex->writeContentsToFile(fileName);