2013-06-29 2 views
3

내 뷰어에서 이미지를 캡처해야하고 일부 사후 처리를 수행하고 다시 표시해야합니다. 지금 바로 그 첫 번째 부분에 더 관심이 있습니다. 그것은 뷰어로부터 이미지를 캡쳐하는 것입니다.OSG에서 후 처리를 위해 이미지를 캡처하는 방법

OSG를 진행하면서 ScreenCaptureHandler를 발견했습니다. 그러나 이미지를 가져올 수 없습니다.

나는 그것을 끝내기 위해 노력하고있다.하지만 당신이 할 수있는 다른 방법이 있거나, 공유 할 수있는 screencapturehandler의 예가있는 경우를 대비해서.

답변

3

렌더링 된 뷰를 이미지로 캡처하려면 사용자 정의 osg :: Camera :: DrawCallback을 사용합니다.

언제든지보기를 캡처하려면 카메라에서 drawCallback을 설정하고 렌더링을 강제 실행하고 NULL 콜백으로 복원하십시오. 다음 코드는 사용자 정의 뷰어의 멤버 함수의 일부임을

공지 사항 (즉, 아마 그렇지 않다) :

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

ViewCaptureCallback 기본적> 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); 

희망이 도움
관련 문제