> depthReadP->readPixels(0,0,719,575, GL_RGB ,GL_UNSIGNED_BYTE); Shouldn't the type be GL_DEPTH instead of GL_RGB? I think you can find this info under glReadPixels in the OpenGL blue book.
Paul Martz Skew Matrix Software LLC http://www.skew-matrix.com +1 303 859 9466 -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Johannes Leidheiser Sent: Thursday, April 30, 2009 2:38 PM To: [email protected] Subject: [osg-users] render depth buffer to image for one time Hi, for my current project I need to render the depth buffer of a scene off screen into a texture or an image. During the last few days I tried to solve it but I couldn't get a good result. I got it work to render the color buffer into an image, but I need the depth buffer. In the following code I tried different ways to solve the problem, so it's a little bit mixed. Maybe somebody can give me a hint? I think I'm not far away from the solution. Thank you in advance, Jojo Code: osg::Image* renderToImage() { osgViewer::Viewer* v = new osgViewer::Viewer; v->setCameraManipulator(new osgGA::TrackballManipulator()); v->getCameraManipulator()->setHomePosition(getCameraPosition2(), getLookAtPoint(), getUpVector()); osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; traits->x =0; traits->y = 0; traits->width = 720; traits->height = 576; traits->windowDecoration = false; traits->doubleBuffer = false; traits->sharedContext = 0; traits->pbuffer = true; osg::GraphicsContext* _gc= osg::GraphicsContext::createGraphicsContext(traits.get()); osg::Camera* camera = v->getCamera(); camera->setGraphicsContext(_gc); camera->setViewport(new osg::Viewport(0,0,720,576)); double fovy, aspectRatio, zNear, zFar; camera->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar); std::cout<< fovy << " " << aspectRatio<< " " << zNear << " " << zFar<<"\n"; fovy+=41.0; camera->setProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar); std::cout<< fovy << " " << aspectRatio<< " " << zNear << " " << zFar<<"\n"; //camera->setViewMatrixAsLookAt(getCameraPosition2(), getLookAtPoint(), getUpVector()); v->setSceneData(osgDB::readNodeFile("Scene1.osg")); v->setDataVariance(osg::Object::DYNAMIC); v->setThreadingModel(osgViewer::Viewer::SingleThreaded); v->realize(); osg::ref_ptr<osg::Image> depth = new osg::Image; //depth->allocateImage(720, 576, 1, GL_LUMINANCE, GL_UNSIGNED_BYTE); camera->attach(osg::Camera::DEPTH_BUFFER, depth.get(),0,0); v->frame(); float* bl =(float*)depth->data(); for(int i=0; i < 10000; i++) std::cout<< "Depth: " << bl[i]<<"\n"; osgDB::writeImageFile(*depth.get(),"depth.png"); osg::ref_ptr<osg::Image> depthReadP = new osg::Image; depthReadP->readPixels(0,0,719,575, GL_RGB ,GL_UNSIGNED_BYTE); osgDB::writeImageFile(*depthReadP.get(),"depthReadP.png"); delete v; osg::notify(osg::NOTICE)<<"Success"<<std::endl; return new osg::Image(); } [/code] ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=11145#11145 _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

