Hi Community,
I am attaching to the main camera DepthBuffer and ColorBuffer as Texture2D
- attached is the setup. I also have shader to check the depth buffer - so
it is ok as on the image. And I am displaying it on a quad. The depth
buffer is still getting me zeros when the colorbuffer is attached,
otherwise when it is not, then it works as it should.
Any hints?
mOsgExternalDepth = new osg::Texture2D;
mOsgExternalDepth->setSourceFormat(GL_DEPTH_COMPONENT);
mOsgExternalDepth->setSourceType(GL_FLOAT);
mOsgExternalDepth->setInternalFormat(GL_DEPTH_COMPONENT32F);
mOsgExternalDepth->setTextureWidth(screenWidth);
mOsgExternalDepth->setTextureHeight(screenHeight);
mOsgExternalDepth->setResizeNonPowerOfTwoHint(false);\
mOsgExternalColor = new osg::Texture2D;
mOsgExternalColor->setInternalFormat(GL_RGBA16F_ARB);
mOsgExternalColor->setSourceFormat(GL_RGBA);
mOsgExternalColor->setSourceType(GL_FLOAT);
mOsgExternalColor->setTextureWidth(screenWidth);
mOsgExternalColor->setTextureHeight(screenHeight);
mOsgExternalColor->setResizeNonPowerOfTwoHint(false);
mainCamera->attach(osg::Camera::COLOR_BUFFER,
(osg::Texture*)mOsgExternalColor);
mainCamera->attach(osg::Camera::DEPTH_BUFFER,
(osg::Texture*)mOsgExternalDepth);
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setProjectionMatrix(osg::Matrixd::ortho2D(0, screenWidth, 0,
screenHeight));
camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
camera->setViewMatrix(osg::Matrixd::identity());
camera->setClearMask(0);
camera->setRenderOrder(osg::Camera::POST_RENDER);
camera->setAllowEventFocus(false);
context.getImageGenerator()->getViewer()->getView(0)->getSceneData()->asGroup()->addChild(camera);
osg::ref_ptr<osg::Geometry> quad =
osg::createTexturedQuadGeometry(osg::Vec3(0, 0, 0),
osg::Vec3(screenWidth/2, 0, 0), osg::Vec3(0, screenHeight/2, 0));
quad->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
quad->getOrCreateStateSet()->setTextureAttributeAndModes(0,
mOsgExternalDepth);
const std::string vertShader = ""\
"void main() "\
"{ "\
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; "\
" gl_TexCoord[0] = gl_TextureMatrix[0] *gl_MultiTexCoord0;"\
"}";
const std::string fragShader = ""\
"uniform sampler2D texture0; "\
"void main() "\
"{ "\
" float d = texture2D( texture0, gl_TexCoord[0].xy ).x; "\
" gl_FragColor = vec4(d, d, d, 1); "\
"}";
osg::ref_ptr<osg::Shader> vert = new osg::Shader(osg::Shader::VERTEX,
vertShader);
osg::ref_ptr<osg::Shader> frag = new osg::Shader(osg::Shader::FRAGMENT,
fragShader);
osg::ref_ptr<osg::Program> program = new osg::Program;
program->addShader(vert);
program->addShader(frag);
quad->getOrCreateStateSet()->setAttributeAndModes(program);
quad->getOrCreateStateSet()->addUniform(new
osg::Uniform(osg::Uniform::SAMPLER_2D, "texture0", 0));
osg::ref_ptr<osg::Geometry> quadColor =
osg::createTexturedQuadGeometry(osg::Vec3(screenWidth / 2, 0, 0),
osg::Vec3(screenWidth/2 , 0, 0), osg::Vec3(0, screenHeight/2, 0));
quadColor->getOrCreateStateSet()->setMode(GL_LIGHTING,
osg::StateAttribute::OFF);
quadColor->getOrCreateStateSet()->setTextureAttributeAndModes(0,
mOsgExternalColor);
camera->addChild(quadColor);
camera->addChild(quad);
--
trajce nikolov nick
--
You received this message because you are subscribed to the Google Groups
"OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/osg-users/CAO-%2BzinLTwJppWDbAVy1r9ovjOgZgX0gj0ufrdqBMr%3DRwQqPpw%40mail.gmail.com.