Как я могу захватить изображение для постобработки в OSG

Мне нужно захватить изображение из моего средства просмотра, выполнить некоторую пост-обработку и отобразить его обратно. Сейчас меня больше интересует первая часть. То есть захватить изображение из средства просмотра.

Проходя OSG, я наткнулся на ScreenCaptureHandler. Но я не могу получить изображение из него.

Я все еще работаю над тем, чтобы это сделать, но на случай, если у кого-то из вас есть другой способ, как это можно сделать, или пример обработчика экрана, которым вы можете поделиться.


person Sinay    schedule 29.06.2013    source источник


Ответы (1)


Чтобы захватить визуализированный вид в изображение, я использую пользовательский 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);

Надеюсь, поможет

person josepcn    schedule 10.07.2013