查看: 2113|回复: 8

OSG高分辨率截图

[复制链接]

该用户从未签到

发表于 2013-9-5 09:58:12 | 显示全部楼层 |阅读模式
在程序中想要保存场景图片,但是在图片保存时要能够交互设置图片的分辨率,如输出高分辨率的图片,设置为当前电脑桌面分辨率的二倍、四倍等,以达到效果图的分辨率。哪位大神做过类似的工作,麻烦指引一下,小弟完全没有思路,谢了!

该用户从未签到

发表于 2013-9-5 14:33:57 | 显示全部楼层
自己写个事件回调吧,在里面实现交互

该用户从未签到

发表于 2013-9-5 17:31:47 | 显示全部楼层
离屏渲染技术,这种情况选择使用Pbuffer或者FBO, 创建虚拟设备,制定虚拟设备的大小。
参见osg的autoCapture的例子。

该用户从未签到

 楼主| 发表于 2013-9-5 17:38:33 | 显示全部楼层
谢谢你的提示,但是本人是一个菜鸟,只知道怎样用事件回调,但是怎样提高分辨率还是不知道怎么处理,这是我在回调函数中写的代码:
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
unsigned int _width, _height;
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), _width, _height);
_image->allocateImage( _width,_height,1,GL_RGB,GL_UNSIGNED_BYTE);//分配一个image
_image->readPixels(0, 0, width,height, GL_RGB, GL_UNSIGNED_BYTE);//读取像素信息抓图
_image->scaleImage(_width,_height,1);//
没有实现目的,能否再详细点,谢谢!!!



                                                               

该用户从未签到

发表于 2013-9-5 21:29:03 | 显示全部楼层
这代码也没看到哪里在渲染高分辨率的图形。。。总之@CWorld说的没错,好好的研究一下autoCapture的代码,你会找到解决方案的。关键是离屏渲染。

该用户从未签到

发表于 2013-9-8 22:35:17 | 显示全部楼层
落叶归根 发表于 2013-9-5 17:38
谢谢你的提示,但是本人是一个菜鸟,只知道怎样用事件回调,但是怎样提高分辨率还是不知道怎么处理,这是我 ...

     这个,因为最近比较忙,实际上我是想写一个离屏渲染的教程的,不过一直没来及写,改天一定奉上。
         
      可以这么考虑,你显示在显示器上的一副图像是需要指定宽高的。

    但是GPU显卡的渲染分辨率的能力是比较高的,如果你换个一个大的显示器,它亦能显示。
     所以你可以构建一个虚拟的显示设备,这个就是pbuffer或者FBO的一些浅显的理解, 请好好看看我说的那个例子,试着调通,会很有帮助的,祝好!

该用户从未签到

发表于 2013-9-9 17:15:51 | 显示全部楼层
可以在网上搜索array写的PosterPrinter的代码,学习吃透就可以实现。

该用户从未签到

发表于 2013-9-10 07:00:32 | 显示全部楼层
Davidwu 发表于 2013-9-9 17:15
可以在网上搜索array写的PosterPrinter的代码,学习吃透就可以实现。

恩,赞同, Array写的那个PosterPrinter更复杂,还有一些图像拼接的意思,这个要是吃透了,真是就可以满足绝大部分截图的需求了。

该用户从未签到

发表于 2013-9-10 09:57:20 | 显示全部楼层
不用网上搜索,这个例子早就贡献为官方源码里的osgposter
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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