|
我做了一个RTT过程:
osg::ref_ptr<osg::GraphicsContext::Traits> pTraits = new osg::GraphicsContext::Traits;
pTraits->x = 0;
pTraits->y = 0;
pTraits->width = 800;
pTraits->height = 600;
pTraits->windowDecoration = false;
pTraits->doubleBuffer = true;
pTraits->sharedContext = 0;
pTraits->pbuffer = true;
pTraits->inheritedWindowData = NULL;
osg::ref_ptr<osg::GraphicsContext> pGraphicsContext = osg::GraphicsContext::createGraphicsContext(pTraits.get());
pGraphicsContext->realize();
osg::ref_ptr<osg::Camera> pSlaveCamera = new osg::Camera;
pSlaveCamera->setName(“My Slave Camera”);
pSlaveCamera->setGraphicsContext(pGraphicsContext.get());
pSlaveCamera->setViewport(new osg::Viewport(0, 0, 800, 600));
m_pBufferImage = new osg::Image;
m_pBufferImage->setName("My Buffer Image");
m_pBufferImage->allocateImage(800, 600, 1, GL_BGRA, GL_UNSIGNED_BYTE);
pSlaveCamera->attach(osg::Camera::COLOR_BUFFER, m_pBufferImage.get());
pSlaveCamera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
osg::ref_ptr<FetchingSignal> pSignal = new FetchingSignal(this);
pSlaveCamera->setFinalDrawCallback(pSignal.get()); // 在这个回调里面将图片保存到文件,使用osgDB::writeImageFile
const GLenum eBuffer = pTraits->doubleBuffer ? GL_BACK : GL_FRONT;
pSlaveCamera->setDrawBuffer(eBuffer);
pSlaveCamera->setReadBuffer(eBuffer);
m_pTargetView->addSlave(pSlaveCamera, osg::Matrix(), osg::Matrix(), true);
企图通过Slave相机在后台截图,并存储到文件。
现在遇到一个麻烦:
1、osg报出错误信息:
RenderStage::runCameraSetUp(), FBO setup failed, FBO status= 0x8cd6
Warning: detected OpenGL error 'invalid enumerant' at end of SceneView::draw()
这些出错的位置我全部用断点拦下来,可惜看不出是什么原因导致的错误,因此目前还没有纠正。
2、若我主场景的根节点中包含PageLOD的节点,那么保存出来的图片中都看不到纹理,建筑都是白色的。光影效果都存在,就建筑的纹理都不见了。若场景中没有PageLOD节点,比如就仅仅只是osg的那条奶牛,那么尽管上面提到有osg的报错信息,但是还是能够完整无误的生成图片。
哪位能够给我个建议啊? |
|