If you are seeing transparent objects, then you are probably getting a
value smaller than 1.0 in the alpha component of gl_FragColor.  It
looks like you could be getting alpha from gl_Color,
gl_FrontLightProduct[0].ambient, or from your texture.  Try to figure
out where the problem is by sending those sources to gl_FragColor
individually and view your scene using each one.

Also, you should be able to get this working without 'if' statements,
which will slow down your shader.  Ambient light is usually added, not
multiplied.  Try something like this:   color = ((direct light *
shadow) + ambient light) * surface color.
- Terry

> Message: 7
> Date: Sun, 04 Nov 2007 16:48:02 +0100
> From: Andreas Goebel <[EMAIL PROTECTED]>
> Subject: [osg-users] Fragment Shader Question
> To: OpenSceneGraph Users <[email protected]>
> Message-ID: <[EMAIL PROTECTED]>
> Content-Type: text/plain; charset=ISO-8859-15; format=flowed
>
> Hi,
>
> I have played around a bit with the FragmentShader for ShadowMap.cpp
>
> Instead of using a predefined bias I wanted the shadow to appear exactly
> in the currents materials ambient color.
>
> That's what I did:
>
> static const char fragmentShaderSource_withBaseTexture[] =
>         "uniform sampler2D osgShadow_baseTexture; \n"
>         "uniform sampler2DShadow osgShadow_shadowTexture; \n"
>         "uniform vec2 osgShadow_ambientBias; \n"
>         "\n"
>         "void main(void) \n"
>         "{ \n"
>         "    if (!shadow2DProj(osgShadow_shadowTexture,
> gl_TexCoord[1])[0] ) { \n"
>         "        gl_FragColor = gl_FrontLightProduct[0].ambient *
> texture2D( osgShadow_baseTexture, gl_TexCoord[0].xy ); \n"
>         "   } else { \n"
>         "        gl_FragColor = gl_Color * texture2D(
> osgShadow_baseTexture, gl_TexCoord[0].xy ); \n"
>         "    } \n"
>         "}\n";
>
> This works, and the result is quite good when looking at the object from
> the same direction as the light-source.
>
> If I look at it from the other side then at the places where the shadow
> is (which is invisible here, as it uses the ambient color) the object is
> slightly transparent.
>
> Any clues on this?
>
> Regards,
>
> Andreas
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to