大家好,
我一直在尝试osg立体模式下同时抓取左右眼的图片。结果老是不对。
参照论坛上早期的帖子,写了一个类class TestCameraCallBack:public osg::CameraDrawCallback.
其中关键函数,void operator() (osg::RenderInfo &renderInfo) const
(取王老师解答帖子精华
http://bbs.osgchina.org/forum.php?mod=viewthread&tid=2374)
基本步骤是这样的:
void operator() (osg::RenderInfo &renderInfo) const
{
if(capture)//通过事件触发开关
{
//期望读取左眼颜色缓存
renderInfo.getCurrentCamera()->setrReadBuffer(GL_BACK_LEFT);
imageL->allocateImage(width,height,1,GL_RGBA,GL_UNSIGNED_BYTE);
imageL->readPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE);
osgDB::writeImageFile(*imageL,"F:\\L1.png");
//然后是右眼
renderInfo.getCurrentCamera()->setrReadBuffer(GL_BACK_RIGHT);
imageR->allocateImage(width,height,1,GL_RGBA,GL_UNSIGNED_BYTE);
imageR->readPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE);
osgDB::writeImageFile(*imageR,"F:\\R1.png");
}
}
通过事件来开关capture,实现抓图(主要是测试能不能读,效率问题暂时先放一下)。
主程序能正常显示QUAD_BUFFER时的立体效果。但是抓下来的左右眼图却是一样的。
(肉眼看左右眼图片完全没有重影,也通过QUAD显卡带的立体视频播放器验证的)。
请各位路过的大牛提携。