PDA

View Full Version : GLSL shader problem



shawn619
04-23-2013, 07:51 PM
My shader program is clearly not computing vectors correctly, because I get these results:

NO Shader(fixed-function):
http://oi34.tinypic.com/2d27zfn.jpg
Shader
http://oi34.tinypic.com/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:
http://oi36.tinypic.com/zwj6h0.jpg

mobeen
04-23-2013, 09:56 PM
The diffuse component should be dot(N,L) i.e eye space vertex normal with eye space light vector (vector from lightpos to vertex position in eye space) So you should change this line


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

to this


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


PS: There are some redundant calculations going on here. you are calculating the eye space vertex postiion and normals twice.

shawn619
04-23-2013, 10:54 PM
Works perfect, thanks Mobeen! I understand the error in the dot product, now. http://oi33.tinypic.com/2je1qir.jpg