gis_wudi 发表于 2012-8-15 17:30:25

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

最后的一帧中有这么一句话:
可将纹理对象texture与场景绘制的帧缓存绑定在一起。我们既可以将texture的内容保存成图片,作为场景的截图

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

木子匕 发表于 2012-8-15 17:33:12

你是说和截图一样的功能吗

gis_wudi 发表于 2012-8-15 17:36:11

和截图类似,不过只要一个特定相机的渲染内容存成图片
就是rrt中的纹理

gis_wudi 发表于 2012-8-15 17:47:14

本帖最后由 gis_wudi 于 2012-8-15 17:51 编辑

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

木子匕 发表于 2012-8-15 18:00:23

明白你说的意思了!坐等解决方案

liuzhiyu123 发表于 2012-8-16 08:16:17

Image可以关联到Camera,这时设置camera的setRenderTargetImplementation就行了。它保存的Image也就是当前摄像机所对应的视野之内的东西

gis_wudi 发表于 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");
}
这是主相机,相当与截屏了

如果是其他的渲染相机,同理,直接attach就可以了
发现这个截屏都不需要在camera的回调中做
下图是关联一个rtt相机存储后的图片
g_Image = new osg::Image;
rrtCamera->attach(osg::Camera::COLOR_BUFFER, g_Image.get());

gis_wudi 发表于 2012-8-16 09:59:01

本帖最后由 gis_wudi 于 2012-8-16 10:00 编辑

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

木子匕 发表于 2012-8-16 10:07:35

感谢楼主分享

独在风中凌乱 发表于 2019-7-13 22:48:58

楼主,对于rrt相机,用attach到图片后,得到的图片没有数据?请问您也是这样的嘛
页: [1]
查看完整版本: 如何直接将Texture对象保存成图像