Hmm... think this might me a video card/driver specific problem. I just tried this test on my colleague's PC that has a matrox video card and seemed to work ok. Oh rats.... does that mean it not so easy/impossible to fix the problem? :-( Chris.
> Date: Thu, 1 Nov 2007 17:56:06 +0000 > From: "Chris Denham" <[EMAIL PROTECTED]> > Subject: [osg-users] Scene renders black when replacing a > ShadowedScene > To: [email protected] > > I'm getting a problem when assigning a new shadowed scene to the viewer. > What seems to happen is that once the first scene has been rendered, > the assignment of a new shadowed scene results in a everything in the > scene being drawn black. Also odd is the fact that there doesn't seem > to be a problem when a texture is assigned to objects being drawn. > > I have created a minimal example that exhibits the problem, and pasted > it below. > Any ideas what's going wrong? Can anyone reproduce the effect? > > [I'm using osg2.2 on windowsXP with Radeon X300 with latest drivers.] > > ---------------------------------------------------------------------------------------------------- > #include <osg/ShapeDrawable> > #include <osg/Geode> > #include <osgGA/TrackballManipulator> > #include <osgShadow/ShadowedScene> > #include <osgShadow/ShadowMap> > #include <osgDB/ReadFile> > #include <osgViewer/Viewer> > > const int ReceivesShadowTraversalMask = 0x1; > const int CastsShadowTraversalMask = 0x2; > > osg::Node* createShadowedScene(bool withTexture) > { > osgShadow::ShadowedScene* shadowedScene = new osgShadow::ShadowedScene; > shadowedScene->setReceivesShadowTraversalMask(ReceivesShadowTraversalMask); > shadowedScene->setCastsShadowTraversalMask(CastsShadowTraversalMask); > shadowedScene->setShadowTechnique(new osgShadow::ShadowMap()); > > osg::LightSource* lightSource = new osg::LightSource; > lightSource->getLight()->setPosition(osg::Vec4(0, 0.2, 1, 0)); > > osg::ShapeDrawable * shape = new osg::ShapeDrawable(new > osg::Sphere(osg::Vec3(0.0f, 0.0f, 0.0f), 200.0)); > shape->setColor(osg::Vec4(0.8f, 0.8f, 0.8f, 1.0f)); > osg::Geode* geode = new osg::Geode(); > geode->addDrawable(shape); > > if (withTexture) > { > geode->getOrCreateStateSet()->setTextureAttributeAndModes( 0, > new osg::Texture2D(osgDB::readImageFile("Images/lz.rgb")), > osg::StateAttribute::ON); > } > > shadowedScene->addChild(geode); > shadowedScene->addChild(lightSource); > > return shadowedScene; > } > > int main(int argc, char** argv) > { > bool withTexture = false; > > osgViewer::Viewer viewer; > viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); > viewer.setCameraManipulator(new osgGA::TrackballManipulator()); > viewer.realize(); > > viewer.setSceneData(createShadowedScene(withTexture)); > #if 1 > // Drawing the frame then assigning a new shadowed scene > // seems to result in scene being rendered black. > // Although, seems ok when texture is assigned to the object. > viewer.frame(); > viewer.setSceneData(createShadowedScene(withTexture)); > #endif > > viewer.run(); > > return 0; > } > > #endif > _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

