Jump to content

  • Log In with Google      Sign In   
  • Create Account


GLSL shader problem


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 Shawn619   Members   -  Reputation: 342

Like
0Likes
Like

Posted 23 April 2013 - 08:24 PM

My shader program is clearly not computing vectors correctly, because I get these results:

 

NO Shader(fixed-function):

2d27zfn.jpg

 

Shader

2eeii9x.jpg

 

This is a plain diffuse shader that is supposed to create a green diffuse on the object:

.vert

 

varying vec3 vertex_light_position;

varying vec3 vertex_light_half_vector;

varying vec3 vertex_normal;

varying vec4 color;

varying vec3 N;

varying vec3 v;
 void main(void)

   {

      v = vec3(gl_ModelViewMatrix * gl_Vertex);

      N = normalize(gl_NormalMatrix * gl_Normal);
      color = gl_Color;

      vertex_normal = normalize(gl_NormalMatrix * gl_Normal);

      vertex_light_position = normalize(gl_LightSource[0].position.xyz);

      vertex_light_half_vector = normalize(gl_LightSource[0].halfVector.xyz);

     

      gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

   }

 

.frag

 

varying vec3 vertex_light_position;

varying vec3 vertex_light_half_vector;

varying vec3 vertex_normal;

varying vec4 color;

varying vec3 N;

varying vec3 v;
void main()

{ 

   vec3 L = normalize(gl_LightSource[0].position.xyz - v);

   vec3 E = normalize(-v);

   vec3 R = normalize(reflect(-L,N));

  

   vec4 diffuse_color = vec4(0.0,1.0,0.0,0.0);

   float diffuse_value = max(dot(vertex_normal, vertex_light_position), 0.0);
   if (gl_FrontFacing){

       gl_FragColor = color + ((diffuse_color-color) * (diffuse_value));

   }else{

       gl_FragColor = color;

   }
}

 

Im confused, because I get the correct effect on my shader designer:

zwj6h0.jpg


Edited by Shawn619, 23 April 2013 - 08:26 PM.


Sponsor:

#2 Shawn619   Members   -  Reputation: 342

Like
0Likes
Like

Posted 24 April 2013 - 12:10 AM

Solved.

 

Changed

float diffuse_value = max(dot(vertex_normal, vertex_light_position), 0.0);

 

to

 

float diffuse_value = max(dot(N, L), 0.0);





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS