我需要从我的查看器中捕获一个图像,并需要进行一些后期处理并将其显示在其上。 现在对它的第一部分更感兴趣。那就是从观众中捕捉图像。
在浏览OSG时,我遇到了ScreenCaptureHandler。 但我无法从中获得图像。
我仍然在努力完成它,但万一你们有任何其他方式可以完成它或者你可以分享的screencapturehandler示例。
答案 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);
希望有所帮助