2013-06-29 32 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); 

希望它可以幫助

相關問題