Hi, I m a newbie to both GLSL and this forum :-)
Anyway, I'm trying to implement screen space effect, and ATI's RenderMonkey help me to concentrate on GLSL itself. My question is this, when I tried to implement screen space effect with GLSL, I've got into strange problems.
In vertex shader, I used the quad vertices(which has coordinate range from -1 to 1) directly without applying any matrix transformation. That is,
For a screen quad mesh, each component of gl_Vertex always range from -1 to 1, so I can directly assign gl_Vertex to gl_Position. TexCoord is used later in the fragment program.Code :uniform sampler2D Texture0; varying vec2 TexCoord; void main(void) { gl_Position.xy = sign(gl_Vertex.xy); gl_Position.w=1.0; gl_Position.z=0.0; TexCoord.x=(gl_Vertex.x+1.0) * 0.5; TexCoord.y=(gl_Vertex.y+1.0) * 0.5; }
Fragment program is even simpler. That is,
I thouth these two shader would display the texture named "Texture0" directly on screen, but it only display a full black rectangle without any colored pixel. That makes me crazy, because the program itself is so simple that nothing can be wrong. To find out the problem, I tried the following vertex shader ,Code :uniform sampler2D Texture0; varying vec2 TexCoord; void main(void) { vec4 c0= texture2D(Texture0, TexCoord); gl_FragColor = c0; }
With the same fragment shader, it displays OK. But what I intended is not this vertex shader(not a fully screen aligned quad).Code :uniform sampler2D Texture0; varying vec2 TexCoord; void main(void) { // gl_Position.xy = sign(gl_Vertex.xy); // gl_Position.w=1.0; // gl_Position.z=0.0; TexCoord.x=(gl_Vertex.x+1.0) * 0.5; TexCoord.y=(gl_Vertex.y+1.0) * 0.5; gl_Position=gl_ModelViewProjectionMatrix * gl_Vertex; }
Whew, thanks for reading boring wrong thread. Is there anything wrong with the first two shaders? Any reply or suggestins would be appreciated.



