Hi osg-users!

I'm trying to write my first shader, it is a very simple test program which 
sets the color on a sphere. 
The color depends on whether the sphere has moved relative to its position in 
the previous frame.

I use two varying variables, which are set in the vertex shader, see the code 
below. If the sphere has moved, the variable called displacementNDC is /= 0.
Then I expect that it should still be /= 0 in the fragment shader, but by some 
reason the value is == 0.
The other varying variable, "green", does not change when going from vertex 
shader to fragment shader.
(Just for test, I also tried to put the variable called currentPosClip in a 
varying variable. Testing for currentPosClip == 0 in the vertex shader returned 
false, but it returned true in the fragment shader.)

Please, can anybody explain what is happening? Why are the values changing to 
zero?

Regards, 
Asa 

-----------Vertex shader ------------------
uniform mat4 prevModelViewProjectionMatrix;
varying vec2 displacementNDC;
varying vec4 green;     

void main()    
{
    // Calculate the previous and current position in clip space.
    vec4 currentPosClip = gl_ModelViewProjectionMatrix*gl_Vertex;       // 
Transforms vertex position 
    vec4 previousPosClip = prevModelViewProjectionMatrix*gl_Vertex;     // from 
object space to clip space.

    gl_Position = ftransform(); 

    // Calculate displacement in NDC space.
    vec2 displacementNDC = currentPosClip.xy/currentPosClip.w - 
previousPosClip.xy/previousPosClip.w;

    // If the displacement is zero, varying variable "green" is set to the RGBA 
value for green.
    if (displacementNDC == vec2(0,0))                                   // 
Object has not moved.
        green = vec4(0, 1, 0, 0);
    else                                                                        
// Object has moved.
        green = vec4(0.0);
}
-----------End vertex shader ------------------

-----------Fragment shader ------------------
varying vec2 displacementNDC;
varying vec4 green;     

void main()
{    
    if (displacementNDC == vec2(0,0))
        gl_FragColor = vec4(1,0,0,1) + green;
    else
        gl_FragColor = vec4(0,0,1,1) + green;
}
-----------End fragment shader ------------------


When the sphere has moved, the resulting color should be blue. But it becomes 
red.

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to