[osg-users] Depth texture display
Julien Valentin
julienvalentin51 at gmail.com
Fri Feb 26 09:50:22 PST 2016
According some old code of mine , difference are the following:
Code:
_depthtexture->setInternalFormat(GL_DEPTH_COMPONENT16_ARB);
cam->attach(osg::Camera::DEPTH_BUFFER, _depthtexture.get(),0, 0);
char linearize_depth[]=
"float LinearizeDepth(float z)\n"
"{\n"
" return((gl_DepthRange.diff * z) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n"
"}\n";
Hope it helps
MadWatch wrote:
> Hello everyone.
>
> I'm trying to save my depth buffer into a texture and then render it on a quad using a fragment shader.
>
> First I create a texture and attach it to a camera
>
> Code:
> _depth = new osg::Texture2D();
> _depth->setTextureSize(_w, _h);
> _depth->setInternalFormat(GL_DEPTH_COMPONENT);
> _depth->setSourceFormat(GL_DEPTH_COMPONENT);
> _depth->setSourceType(GL_FLOAT);
> _depth->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::NEAREST);
> _depth->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::NEAREST);
>
> _camera = new osg::Camera();
> _camera->setViewport(0., 0., _w, _h);
> _camera->setRenderOrder(osg::Camera::PRE_RENDER);
> _camera->setClearColor(Color(0., 0., 0., 1.));
> _camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
> _camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
> _camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
> _camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
> _camera->attach(osg::Camera::DEPTH_BUFFER, _depth);
> _camera->setGraphicsContext(_view->getCamera()->getGraphicsContext());
> _view->addSlave(_camera, true);
>
>
>
>
> Then I bind my depth texture to a uniform and try to display it with the following shader.
>
> Code:
> uniform sampler2D depth;
>
> float linearize(vec2 uv)
> {
> float n = 1000.; // Near
> float f = 100000.; // Far
> float z = texture2D(depth, uv).r;
> return (2. * n) / (f + n - z * (f - n));
> }
>
> void main()
> {
> float d = linearize(gl_TexCoord[0].st);
> gl_FragColor = vec4(d, d, d, 1.);
> }
>
>
>
>
> It doesn't work, all I see is black, as if my depth texture was cleared.
> If I do the same thing with the color buffer (with an RBGA texture) it works as expected, so I know my camera is working and looking at the scene as it should. But I can't make it work with a depth texture. What did I do wrong ?
>
> Thanks,
> Nicolas
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=66444#66444
More information about the osg-users
mailing list