查看: 2176|回复: 8

求教!多窗口屏幕截图问题

[复制链接]

该用户从未签到

发表于 2010-12-27 17:29:29 | 显示全部楼层 |阅读模式
我用多窗口来渲染场景,用了compositeviewer的方式来产生两个窗口,compositeviewer下有viewer1与viewer2,由于特殊用途我让两个窗口重叠显示即一个完全盖住另外一个,然后分别对每一个窗口截图,
我用的代码
viewer1->getCamera()->setPostDrawCallback(new CaptuerDrawCallBack(image_c.get()));
//viewer2->getCamera()->setPostDrawCallback(new CaptuerDrawCallBack(image_c.get()));
c_viewer->frame();
这里CaptuerDrawCallBack是
struct CaptuerDrawCallBack:public osg::Camera:rawCallback
{
CaptuerDrawCallBack(osg::ref_ptr<osg::Image>image)
{
  _image=image;
}
~CaptuerDrawCallBack(){}
virtual void operator()(const osg::Camera& camera)const
{
  osg::ref_ptr<osg::GraphicsContext::WindowingSystemInterface>win;
  _image->allocateImage(720,576,1,GL_RGBA,GL_UNSIGNED_BYTE);
  _image->readPixels(0,0,720,576,GL_RGBA,GL_UNSIGNED_BYTE);
  pData=_image->data();
}
osg::ref_ptr<osg::Image>_image;
};
截不到图该如何解决?
谢谢!

该用户从未签到

发表于 2010-12-28 08:17:26 | 显示全部楼层
glReadPixels的局限性还是比较大的,建议您此时使用PBO或者FBO的方式进行截图,即另外建立一个Camera并设置RenderTargetImplementation属性和attach方法

该用户从未签到

 楼主| 发表于 2010-12-28 11:17:08 | 显示全部楼层
2# array
版主请具体点啊,我的程序有什么问题啊?我发现进行两次回调好像不行,而且我已经知道了每个窗口句柄,该如何处理?
谢谢!

该用户从未签到

发表于 2010-12-28 13:10:38 | 显示全部楼层
glReadPixels不能处理截图分辨率大于屏幕分辨率的情况,以及窗口本身被遮挡或者最小化的情况,此时它的结果是不确定的。我的建议是使用Camera::attach()将屏幕结果传递到image对象上,同时设置setRenderTargetImplementation为PBO或者FBO

该用户从未签到

 楼主| 发表于 2010-12-28 15:23:23 | 显示全部楼层
4# array
但是用fbo截图一定要用回调么?DrawCallback可以有几个啊?我在
viewer1->getCamera()->setPostDrawCallback(new CaptuerDrawCallBack(image_c.get()));
viewer2->getCamera()->setPostDrawCallback(new CaptuerDrawCallBack(image_c.get()));
c_viewer->frame();
循环中用了两个回调可以么?

该用户从未签到

发表于 2010-12-28 16:59:46 | 显示全部楼层
用FBO截图就完全用不到回调了,您可以参考osgposter例子来了解使用Camera截取任意分辨率图像的用法

该用户从未签到

 楼主| 发表于 2010-12-28 21:59:44 | 显示全部楼层
6# array
我想对截屏后的像素进行操作,不用回调可以么?

该用户从未签到

发表于 2010-12-29 08:54:14 | 显示全部楼层
那么就是您自己的问题了,可以参考osgprerender例子来了解如何在回调中修改像素数据

该用户从未签到

发表于 2013-3-2 11:21:09 | 显示全部楼层
请问实现多窗体显示具体怎么实现的?谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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