如何在OSG中捕获图像以进行后期处理

时间:2013-06-29 14:29:23

标签: openscenegraph

我需要从我的查看器中捕获一个图像,并需要进行一些后期处理并将其显示在其上。 现在对它的第一部分更感兴趣。那就是从观众中捕捉图像。

在浏览OSG时,我遇到了ScreenCaptureHandler。 但我无法从中获得图像。

我仍然在努力完成它,但万一你们有任何其他方式可以完成它或者你可以分享的screencapturehandler示例。

1 个答案:

答案 0 :(得分:3)

要将渲染视图捕获到图像中,我使用自定义osg :: Camera :: DrawCallback。

要在任何点捕获视图,请在相机上设置drawCallback,强制渲染,恢复为NULL回调。

请注意,以下代码是自定义查看器的成员函数的一部分(可能不是您的情况):

osgViewer::View::getCamera()->setFinalDrawCallback(new ViewCaptureCallback(img));
osgViewer::Viewer::renderingTraversals();
osgViewer::View::getCamera()->setFinalDrawCallback(NULL);

ViewCaptureCallback基本上使用image-> readPixels()从后备缓冲区读取。

glReadBuffer( GL_BACK ); 
osg::GraphicsContext* gc = renderInfo.getState()->getGraphicsContext(); 
// Here you should process the backbuffer's size and format
image->readPixels(0, 0, gc->getTraits()->width, gc->getTraits()->height, pixelFormat, GL_UNSIGNED_BYTE);

希望有所帮助