查看: 3658|回复: 9

如何直接将Texture对象保存成图像

[复制链接]

该用户从未签到

发表于 2012-8-15 17:30:25 | 显示全部楼层 |阅读模式
最后的一帧中有这么一句话:
可将纹理对象texture与场景绘制的帧缓存绑定在一起。我们既可以将texture的内容保存成图片,作为场景的截图

现在正好用到这个功能,只想把当前反射相机中的内容保存出来,而不是全部的场景内容,不知道怎么实现,非常感谢!

该用户从未签到

发表于 2012-8-15 17:33:12 | 显示全部楼层
你是说和截图一样的功能吗

该用户从未签到

 楼主| 发表于 2012-8-15 17:36:11 | 显示全部楼层
和截图类似,不过只要一个特定相机的渲染内容存成图片
就是rrt中的纹理

该用户从未签到

 楼主| 发表于 2012-8-15 17:47:14 | 显示全部楼层
本帖最后由 gis_wudi 于 2012-8-15 17:51 编辑

如下图,texture已经关联了一个相机,并获取了颜色缓存进行了渲染,现在想把texture直接存储成图片(也就是矩形框上的内容),而不是全部的场景内容
as.png

该用户从未签到

发表于 2012-8-15 18:00:23 | 显示全部楼层
明白你说的意思了!坐等解决方案

该用户从未签到

发表于 2012-8-16 08:16:17 | 显示全部楼层
Image可以关联到Camera,这时设置camera的setRenderTargetImplementation就行了。它保存的Image也就是当前摄像机所对应的视野之内的东西

该用户从未签到

 楼主| 发表于 2012-8-16 09:46:47 | 显示全部楼层
本帖最后由 gis_wudi 于 2012-8-16 09:54 编辑
可以关联到Camera,这时设置camera的setRenderTargetImplementation就行了。它保存的Image也就是当前摄像机所对应的视野之内的东西

谢谢您的提示,我没有看attach接口就直接来发帖了,现把调用代码贴出来,希望对以后类似需求的人能有所帮助
直接将image对象关联到相机上即可
包括截屏都可以
g_Image = new osg::Image;
viewer->getCamera()->attach(osg::Camera::COLOR_BUFFER, g_Image.get());
同时加了一个handler来做键盘响应,用以将image存成图片
if(ea.getKey() == 'p')
{
     osgDB::writeImageFile(*g_Image, "capture.bmp");
}
这是主相机,相当与截屏了
capture.png
如果是其他的渲染相机,同理,直接attach就可以了
发现这个截屏都不需要在camera的回调中做
下图是关联一个rtt相机存储后的图片
g_Image = new osg::Image;
rrtCamera->attach(osg::Camera::COLOR_BUFFER, g_Image.get());
capture.png

该用户从未签到

 楼主| 发表于 2012-8-16 09:59:01 | 显示全部楼层
本帖最后由 gis_wudi 于 2012-8-16 10:00 编辑

我的最终目的是用来显示给任意一个模型的轮框线
当然用shader方式也可以达到这个目的,但没有设计好shader的具体实现,感觉效果不尽人意,只能现权宜一下了
result.jpg

该用户从未签到

发表于 2012-8-16 10:07:35 | 显示全部楼层
感谢楼主分享

该用户从未签到

发表于 2019-7-13 22:48:58 | 显示全部楼层
楼主,对于rrt相机,用attach到图片后,得到的图片没有数据?请问您也是这样的嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表