Hi there

I have the following RTT method:

    ref_ptr<Image> image = new Image;
image->allocateImage(osgViewer->width(), osgViewer->height(), 1, GL_RGBA, GL_UNSIGNED_BYTE);

    // resets the size of the texture
    texture->setTextureSize(osgViewer->width(), osgViewer->height());

    // sets the clear mask the depth buffer
    camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // sets the clear color to white
    camera->setClearColor(Vec4(1.0, 1.0, 1.0, 1.0));

    ...matrices and viewport...

    // sets the reference frame to an absolute coordinate frame
    camera->setReferenceFrame(Camera::ABSOLUTE_RF_INHERIT_VIEWPOINT);

    // sets the texture camera to render before rendering to the screen
    camera->setRenderOrder(Camera::PRE_RENDER);

// sets the rendering target of the texture camera to the frame buffer object (FBO)
    camera->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);

// attaches the texture to the texture camera (important: samples mustn't be greater than zero) // buffer component, texture, level, face, mip map generation, samples, color samples
    camera->attach(Camera::COLOR_BUFFER, image.get(), 0, 0);

// adds the node to the texture camera (this node will be rendered to the texture)
    camera->addChild(node);

    // adds the texture camera to the root node
    root->addChild(camera);

If I write this image to file, it works great, I have my "balance" in the middle of the image --> see attachment color_buffer.png. Now I would like to write the depth buffer to the image (just for debugging, afterward I write it to the texture), so I change the following lines:

image->allocateImage(osgViewer->width(), osgViewer->height(), 1, GL_RGBA, GL_UNSIGNED_BYTE); --> image->allocateImage(osgViewer->width(), osgViewer->height(), 1, GL_DEPTH_COMPONENT, GL_FLOAT);

camera->attach(Camera::COLOR_BUFFER, image.get(), 0, 0); --> camera->attach(Camera::DEPTH_BUFFER, image.get(), 0, 0);

After that I get the image depth_buffer.png, but this isn't correct, is it?

The texture looks like this, is it correct?

    // creates the texture for the shadow map
    texShadowMap = new Texture2D;
    texShadowMap->setInternalFormat(GL_DEPTH_COMPONENT);
    texShadowMap->setShadowComparison(true);
    texShadowMap->setShadowTextureMode(Texture2D::LUMINANCE);
    texShadowMap->setFilter(Texture2D::MIN_FILTER, Texture2D::LINEAR);
    texShadowMap->setFilter(Texture2D::MAG_FILTER, Texture2D::LINEAR);
    texShadowMap->setWrap(Texture2D::WRAP_S, Texture2D::CLAMP_TO_BORDER);
    texShadowMap->setWrap(Texture2D::WRAP_T, Texture2D::CLAMP_TO_BORDER);
    texShadowMap->setBorderColor(Vec4(1.0, 1.0, 1.0, 1.0));

What am I doing wrong in this function?

Thanks a lot
Dominic

<<attachment: color_buffer.png>>

<<attachment: depth_buffer.png>>

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to