Does your shader code take into account you have no texture on the non textured nodes.
One possible issue that I have seen before I presume in your shader code you get and use the texture's rgb, but if you get this on a non textured fragment you will get Zero so if you doing a multiplication in your color calculation then it will most likely end up with Zero thus black. You need to pick up that you have not texture and use a fixed value for your RGB, __________________________________________________________________________ Capture the magic of Christmas this year see www.capturethemagic.com ____________________________________________________________________________ __________ Gordon Tomlinson gor...@gordontomlinson.com IM: gordon3db...@3dscenegraph.com www.vis-sim.com www.gordontomlinson.com ____________________________________________________________________________ __ -----Original Message----- From: osg-users-boun...@lists.openscenegraph.org [mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Joseba Sent: Tuesday, January 27, 2009 3:22 AM To: osg-users@lists.openscenegraph.org Subject: Re: [osg-users] Render to Texture and per vertex colors Anyone has experience something similar? J. > Hi all, > I want to do an RTT of the current camera to do some PostProcesses on it > (using shaders). When the geometry is textured, everything works ok, but > when i use non-textured objects, the objects renders in black. I tryed > the code in osgprerender example in my app and it does the same thing, > but the osgprerender example works correctly (with the cessna model for > ex.). I Attach an image of the result. > Here is the code i use: > > /// Texture for RTT /// > { > sourceSceneTexture = new osg::Texture2D; > sourceSceneTexture->setTextureSize(textureWidth, textureHeight); > sourceSceneTexture->setInternalFormat(GL_RGBA); > > sourceSceneTexture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LIN EAR); > > sourceSceneTexture->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LIN EAR); > } > > // Geode without ilumination for attaching the RTT > rttPlaneGroup = new osg::Group; > osg::ref_ptr<osg::Geode> geo = new osg::Geode; > geo->setName("PlanoGeode"); > osg::StateSet* ss = geo->getOrCreateStateSet(); > ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF); > finalPlaneGeometry = new osg::Geometry(); > > finalPlaneGeometry->setName("PlanoGeometry"); > geo->addDrawable(finalPlaneGeometry.get()); > > > osg::Vec3Array* vertex = new osg::Vec3Array; > vertex->push_back( osg::Vec3 (0,0,0) ); // down left > vertex->push_back( osg::Vec3 (1,0,0) ); // down right > vertex->push_back( osg::Vec3 (1,1,0) ); // up right > vertex->push_back( osg::Vec3 (0,1,0) ); // up left > finalPlaneGeometry->setVertexArray(vertex); > > GLuint vertplane[4] = {3,2,1,0}; > finalPlaneGeometry->addPrimitiveSet(new > osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 4, vertplane)); > > osg::Vec4Array* colors = new osg::Vec4Array; > colors->push_back(osg::Vec4(1.0, 1.0, 1.0, 1.0)); > colors->push_back(osg::Vec4(1.0, 1.0, 1.0, 1.0)); > colors->push_back(osg::Vec4(1.0, 1.0, 1.0, 1.0)); > colors->push_back(osg::Vec4(1.0, 1.0, 1.0, 1.0)); > > finalPlaneGeometry->setColorArray(colors); > finalPlaneGeometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX); > > > osg::Vec2Array* tcoords = new osg::Vec2Array(4); > (*tcoords)[0].set(0.0f, 0.0f); > (*tcoords)[1].set(1.0f, 0.0f); > (*tcoords)[2].set(1.0f, 1.0f); > (*tcoords)[3].set(0.0f, 1.0f); > finalPlaneGeometry->setTexCoordArray(0, tcoords); > > geo->addDrawable(finalPlaneGeometry); > rttPlaneGroup->addChild(geo.get()); > > > /////////////FBO - > Scene//////////////////////////////////////////////////////// > // then create the camera node to do the render to texture > > { > camShot = new osg::Camera; > camShot->setName("CamShot"); > camShot->setClearColor(osg::Vec4(0.7,0.1,0.3,1)); > camShot->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); > camShot->setProjectionMatrix(osg::Matrix::identity()); > camShot->setViewMatrix(osg::Matrix::identity()); > camShot->setReferenceFrame(osg::Transform::RELATIVE_RF); > camShot->setViewport(0, 0, textureWidth, textureHeight); > camShot->setRenderOrder(osg::Camera::PRE_RENDER); > > camShot->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); > camShot->attach(osg::Camera::COLOR_BUFFER, sourceSceneTexture); > camShot->addChild(root); > rttPlaneGroup->addChild(camShot.get()); > } > > osg::ref_ptr<osg::Camera> camPlano = new osg::Camera; > camPlano->setReferenceFrame(osg::Transform::ABSOLUTE_RF); > camPlano->setProjectionMatrixAsOrtho2D(0, 1, 0, 1); > camPlano->setViewMatrix(osg::Matrix::identity()); > camPlano->setName("CamPlano"); > camPlano->setClearColor(osg::Vec4(0.0,0.0,0.0,1.0)); > camPlano->addChild(geo.get()); > rttPlaneGroup->addChild(camPlano.get()); > > osg::StateSet* stateset = new osg::StateSet; > stateset->setTextureAttributeAndModes(0, sourceSceneTexture > ,osg::StateAttribute::ON); > rttPlaneGroup->setStateSet(stateset); > > where root is the original scene and rttPlaneGroup the final render group. > > > Thanks in advance!! > > J. _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org