查看: 1996|回复: 4

OSG中如何生成一幅深度图像

[复制链接]

该用户从未签到

发表于 2011-12-7 15:00:40 | 显示全部楼层 |阅读模式
在OSG中如何能够得到一幅深度图像?照相机是通过函数setViewMatrixAsLookAt(eyePoint,center,upDirection)自己在程序中设定的。得到的深度图像用于下一步计算。希望大家指点。

该用户从未签到

 楼主| 发表于 2011-12-7 16:35:01 | 显示全部楼层
本帖最后由 luo9168 于 2011-12-7 17:16 编辑

下面是查找的一些资料:

查到了这个帖子

osghud例子中的SnapImage类的写法为:
  1. struct SnapImage : public osg::Camera::DrawCallback
  2. {
  3.     SnapImage(const std::string& filename):
  4.         _filename(filename),
  5.         _snapImage(false)
  6.     {
  7.         _image = new osg::Image;        
  8.     }

  9.     virtual void operator () (osg::RenderInfo& renderInfo) const
  10.     {

  11.         if (!_snapImage) return;
  12.    
  13.         osg::notify(osg::NOTICE)<<"Camera callback"<<std::endl;

  14.         osg::Camera* camera = renderInfo.getCurrentCamera();
  15.         osg::Viewport* viewport = camera ? camera->getViewport() : 0;

  16.         osg::notify(osg::NOTICE)<<"Camera callback "<<camera<<" "<<viewport<<std::endl;

  17.         if (viewport && _image.valid())
  18.         {
  19.             _image->readPixels(int(viewport->x()),int(viewport->y()),int(viewport->width()),int(viewport->height()),
  20.                                GL_RGBA,
  21.                                GL_UNSIGNED_BYTE);
  22.             osgDB::writeImageFile(*_image, _filename);
  23.             
  24.             osg::notify(osg::NOTICE)<<"Taken screenshot, and written to '"<<_filename<<"'"<<std::endl;            
  25.         }
  26.       
  27.         _snapImage = false;
  28.     }

  29.     std::string                         _filename;
  30.     mutable bool                        _snapImage;
  31.     mutable osg::ref_ptr<osg::Image>    _image;
  32. };
复制代码
其中osg::Image::readPixels的解释如下:
virtual void osg::Image::readPixels  ( int  x,  int  y,  int  width,  int  height,  GLenum  pixelFormat,  GLenum  type   );
Read pixels from current frame buffer at specified position and size, using glReadPixels.
Create memory for storage if required, reuse existing pixel coords if possible.

该用户从未签到

发表于 2011-12-8 09:42:41 | 显示全部楼层
获取深度请使用GL_DEPTH_COMPONENT和GL_FLOAT作为相应的格式参数

该用户从未签到

发表于 2011-12-8 10:52:58 | 显示全部楼层
你可以参考osgshadow中的showmap里的实现,有现成的代码

该用户从未签到

 楼主| 发表于 2011-12-8 13:14:03 | 显示全部楼层
谢谢二位解惑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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