writeContentsToFile问题

在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); 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值