[osg-users] Scene renders black when replacing a ShadowedScene
Mihai Radu
radu at cm-labs.com
Fri Nov 2 09:21:21 PDT 2007
The Matrox was probably not running the shader, and fixed-function will
work.
The fix you are looking for is in my earlier reply on this thread
Cheers
Mihai
Chris Denham wrote:
> 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" <c.m.denham at gmail.com>
>> Subject: [osg-users] Scene renders black when replacing a
>> ShadowedScene
>> To: osg-users at lists.openscenegraph.org
>>
>> 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
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
More information about the osg-users
mailing list