Hey!

I read nearly everything about render to texture techniques and what you can do 
with them, but not how to SIMPLY display it. My intention is to pre-render the 
scene into a texture and sending this texture into my fragment shader (GLSL) to 
simulate blur effects.

But before I can do this shading stuff I need to display this pre-rendered 
scene and I don't know how to do it. Here my code so you can see what I 
programmed:


Code:
#include <osg/Node>
#include <osg/Texture2D>
#include <osg/Shader>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>

#include <iostream>

osg::Camera* createRTTCamera(int width, int height, osg::Texture2D* texture)
{
        texture->setTextureSize(width, height);
        texture->setInternalFormat(GL_RGB);
        texture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
        texture->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);

        osg::ref_ptr<osg::Camera> rttCamera = new osg::Camera;

        rttCamera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        rttCamera->setClearColor(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
        rttCamera->setViewport(0, 0, width, height);
        rttCamera->setRenderOrder(osg::Camera::PRE_RENDER);
        rttCamera->setReferenceFrame(osg::Transform::RELATIVE_RF);
        
rttCamera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
        rttCamera->attach(osg::Camera::COLOR_BUFFER, texture);

        return rttCamera.release();
}

int main(int argc, char** argv)
{
        osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("cessna.osg");

        osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
        osg::ref_ptr<osg::Camera> camera = createRTTCamera(1600, 900, 
texture.get());
        camera->addChild(model.get());

        osg::StateSet* ss = model->getOrCreateStateSet();
        ss->setTextureAttributeAndModes(0, texture.get(), 
osg::StateAttribute::ON);

        osg::ref_ptr<osg::Group> root = new osg::Group;
        root->addChild(camera.get());

        osgViewer::Viewer viewer;
        viewer.setSceneData(root.get());
        return viewer.run();
}




By running this code I get nothing, only if I add this line before my viewer my 
plane appears:


Code:
        root->addChild(model.get());




Can someone help me out?

lg Christian

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=48113#48113





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

Reply via email to