Thanks Mihai, can you also change the PSSM implementation and update the
code, so robert has only one review to do !
if i will submiss the pssm stuff, he has to review two equal changes.
thanks.

may you can also have a look at PSSM, there are other mails on this topic.
the GLSL shader doesn't work very nice for every
env. may you can test it (The smooth stuff in the PSSM doesn't work nice,
for my ATI card is nice but on others, i don't know)

/Adegli

2007/11/1, Mihai Radu <[EMAIL PROTECTED]>:
>
> Hi Chris, Adrian
>
> Here's an updated version of ShadowMap[.cpp] that includes the 'fake'
> texture.
>
> Now any model will show up properly, textured or nor.
> To see run [the dumptruck is not textured] :
> osgshadow dumptruck.osg
>
> Adrian, in your code (PSSM) you assign black(0,0,0,0) as the color for
> the 'fake', this gives the same result as a bad texture access, it works
> perfectly if you set it to white(1,1,1,1).
>
> This is a nice loose end to take care of, I can now do without an 'if'
> in GLSL, and since it's a pretty costly operation, every little bit helps
> :)
> I will submit this to Robert for svn.
>
> Cheers
> Mihai
> <cid:part1.08090808.06060803@cm-labs.com>Adrian Egli wrote:
> > :-) Yes a fake texture can help GLSL shader based issue. Feel free to
> > migrate the other shadow
> > technics.  And if you like working with PSSM feel free to fix the
> > little issues we still have. i don't
> > get the time to work on PSSM for next generation.
> >
> > /adegli
> >
> > 2007/11/1, Mihai Radu <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:
> >
> >     Just to make sure I understand the issue: from what you are
> >     describing,
> >     the problem is that non-textured scene is drawn is black.
> >
> >     This is a result of the shader in use, if you are using the one for
> >     textured objects, it will do a texture access on unit 0, and since
> >     there
> >     is no bound texture the result is vec4(0,0,0,1), that when
> >     multiplied to
> >     any other color value gives black.
> >
> >     This is a result of some polish still needed for ShadowMap, and
> >     some of
> >     the options are:
> >     - if using non-textured scene, make use of the relevant shader ( by
> >     setting _shadowTextureUnit to 0, and then init() )
> >     - set a custom shader and use per-object uniform flag to control
> color
> >     application ( this is what I've done for work )
> >        like this:
> >     > if (!s_TexturedObject)
> >     >     {
> >     >         color.rgb *= gl_Color.rgb;
> >     >         color.a = gl_Color.a;
> >     >     }
> >     >     else
> >     >     {
> >     >         texColor = texture2D(osgShadow_baseTexture,
> >     gl_TexCoord[0].st);
> >     >         color *= texColor;
> >     >     }
> >     - the most elegant solution :
> >         create a 'fake' texture with (1,1,1,1) and set it to the root
> >     of the
> >     scene, so that it will texture any object that was not textured, but
> >     it's superseded by any more localized textures, this way one
> >     shader will
> >     work for all objects.
> >     This is borrowed from ParallelSplitShadowMap, and I hope I'll have
> >     time
> >     to integrate the same idea in ShadowMap.
> >
> >     Cheers
> >     Mihai
> >
> >     Chris Denham wrote:
> >     > 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@lists.openscenegraph.org
> >     <mailto:osg-users@lists.openscenegraph.org>
> >     >
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >     >
> >     _______________________________________________
> >     osg-users mailing list
> >     osg-users@lists.openscenegraph.org
> >     <mailto:osg-users@lists.openscenegraph.org>
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >     <
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org>
> >
> >
> >
> >
> > --
> > ********************************************
> > Adrian Egli
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > 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
>
>
>


-- 
********************************************
Adrian Egli
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to