Additional questions:
1) Why shadowPassCamera->setClearColor(osg::Vec4f(1000.0f, 0.0f, 0.0f,
1.0f))?
2) Why length() in all the shadow related shader code?


2013/10/12 michael kapelko <[email protected]>

> Thanks for the example. I've forked it and playing with it now to find out
> the difference.
> Why is there only shadow when I use light directions of (0, 0.8, 1), (0,
> 0.0001, 1), but not when I try (0, 0, 1)?
> That's the direction I use for my own example.
> Thanks.
>
>
> 2013/10/11 Marcel Pursche <[email protected]>
>
>> Hi,
>>
>> shadow mapping is a projective texturing approach. A good methaphor to
>> explain it is that from the light source a slide projector is casting the
>> depth buffer on your scene. For this to work you need to do two things:
>> 1. create your depth buffer with screenspace coordinates(the screenspace
>> of the shadow camera)
>> 2. Pass the view projection matrix of your shadow pass to the main pass
>> and use it to project the world coordinates of your scene into screenspace
>> coordinates of the shadow camera. The projected coordinates can then be
>> used as texture coordinates for your depth buffer.
>> I have written a very basic shadow mapping example:
>> https://github.com/MPursche/3dcgtutorials/tree/master/03_ShadowMapping
>> It uses a GL_R32F depth buffer(I wanted to evaluate the performance
>> against a regular depth buffer). It uses forward shading but I hope you can
>> apply the principle on your deferred shading renderer.
>>
>> Here is the part where I calculate the shadow matrix for the main pass:
>>
>> Code:
>>
>> osg::Matrixd shadowMatrix = viewMatrix * projectionMatrix *
>> osg::Matrixd::translate(1.0, 1.0, 1.0) * osg::Matrixd::scale(0.5, 0.5, 0.5);
>>
>>
>>
>> The translation and scale at the end is to come from [-1,1] coordinates
>> to [0,1] coordinates.
>>
>> You just need to do the following, to compute the texture coordinates for
>> your depth texture:
>>
>> Code:
>>
>> gl_TexCoord[0] = shadowMatrix * gl_Vertex; // insert modelMatrix here if
>> necessary -> shadowMatrix * modelMatrix * gl_Vertex
>>
>>
>>
>>
>> This is how my fetch in the shader looks like:
>>
>> Code:
>>
>> float depth = texture2D(depthTexture, gl_TexCoord[0].st).x;
>> float visibility = (shadowDepth <= (depth + 0.1)) ? 1.0 : 0.0;
>>
>>
>>
>>
>> Thank you!
>>
>> Cheers,
>> Marcel
>>
>> ------------------
>> Read this topic online here:
>> http://forum.openscenegraph.org/viewtopic.php?p=56749#56749
>>
>>
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to