Thank you both for your replies. I figured out how to do it with the help of
Terry's post. I'm putting my answer here in case anyone else comes across the
same problem.
I sub-classed osg.ShadowMap, and set a new custom fragment shader code. I
created a flag (which I call 'ghostObject') to mark those nodes for which the
effect will be applied. I set the flag on each node using:
node.getOrCreateStateSet().addUniform(osg.Uniform('ghostObject', True))
If the flag is set, the shader will set the alpha of every pixel to 0, except
those pixels that lie inside a shadowed area. If the flag is not set, the
shader will just darken shadowed areas.
Code:
shaderSource = """
uniform sampler2D osgShadow_baseTexture; \m
uniform sampler2DShadow osgShadow_shadowTexture; \n
uniform vec2 osgShadow_ambientBias; \n
uniform bool ghostObject;\n
void main(void) \n
{\n
vec4 shadowProj = shadow2DProj( osgShadow_shadowTexture, gl_TexCoord[1]
);\n
gl_FragColor = gl_Color * texture2D( osgShadow_baseTexture,
gl_TexCoord[0].xy );\n
if(ghostObject && shadowProj.x > 0.5 )\n
gl_FragColor.w = 0.0;\n
else if( shadowProj.x < 0.5 ){\n
gl_FragColor.x = gl_FragColor.x * 0.5;\n
gl_FragColor.y = gl_FragColor.y * 0.5;\n
gl_FragColor.z = gl_FragColor.z * 0.5;\n
}\n
}\n"""
Thank you!
Cheers,
Juan
Code:
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=57876#57876
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org