Hello Jean-Sebastien,
I followed your advice. Everything works well. Thanks a lot for
clarifying those things and for your help.
Denis
On Jul 23, 2008, at 4:58 AM, Jean-Sébastien Guay wrote:
Hello Denis,
When I added vertex shader, the object was not shadowed properly
(with the same exact fragment shader). I suspect I'm doing
something wrong with the texture coordinates in a vertex shader. I
looked in ShadowMap.cpp, it has only fragment shaders. Do you know
where can I find default vertex shader?
When you start using a shader for one part of the pipeline (vertex
or fragment) you need to do everything that that part of the
pipeline used to do (and which is needed by your rendering). In the
case of shadows, you'll notice that the code in ShadowMap.cpp adds
an osg::TexGen that calculates some texture coordinates for texture
unit 1. But that's the fixed pipeline, so you will need to
calculate texture coordinates for unit 1 as glTexGen would in your
vertex shader now that it has replaced the fixed-function vertex
processing.
Something like this should work, though you should probably have
finer control over when these are calculated or not:
gl_TexCoord[1].s = dot( ecPosition, gl_EyePlaneS[1] );
gl_TexCoord[1].t = dot( ecPosition, gl_EyePlaneT[1] );
gl_TexCoord[1].p = dot( ecPosition, gl_EyePlaneR[1] );
gl_TexCoord[1].q = dot( ecPosition, gl_EyePlaneQ[1] );
Note that ecPosition is:
vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
I also assume you're transforming your texture coordinates for
texture unit 0 properly:
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
Just assigning gl_MultiTexCoord0 to gl_TexCoord[0] will work until
you try to use a texture matrix (osg::TexMat)...
I highly recommend you get/read the Orange Book, as this is all
given there. You can also download the ShaderGen program from
3DLabs (now hosted on http://mew.cx/glsl since 3DLabs removed it
from their site) which can generate shaders that emulate the fixed
pipeline. Note that for speed, you should probably only use the
features you need in your shaders, so I am not recommending that
you generate a shader that does *all* of what the fixed pipeline
would do... Just use what ShaderGen produces as a guide.
Hope this helps,
J-S
--
______________________________________________________
Jean-Sebastien Guay [EMAIL PROTECTED]
http://www.cm-labs.com/
http://whitestar02.webhop.org/
_______________________________________________
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