PDA

View Full Version : Turning off the light in shader



Abaturn
05-27-2014, 07:58 AM
This is my fragment shader:


varying vec3 n;
varying vec3 position;
varying vec2 tex_coord;

uniform sampler2D wood_tex;
uniform int light2;
void main()
{
vec3 light = normalize((gl_LightSource[2].position - position).xyz);
vec3 h = normalize(normalize(- position) + light);

vec4 amb = gl_LightSource[2].ambient * gl_FrontMaterial.ambient;
vec4 diff = gl_LightSource[2].diffuse * gl_FrontMaterial.diffuse * max(0.0, dot(n, light));
vec4 spec = gl_LightSource[2].specular * gl_FrontMaterial.specular * pow(max(0.0, dot(h, n)), gl_FrontMaterial.shininess);

vec4 wood = texture2D(wood_tex, tex_coord);
vec4 color = vec4(0.0,0.0,0.0,0.0);

color = (amb + diff) * wood + spec;

gl_FragColor = color;
}

Vertex shader:


varying vec3 n;
varying vec3 position;
varying vec2 tex_coord;

void main()
{
n = normalize(gl_NormalMatrix * gl_Normal);
position = (gl_ModelViewMatrix * gl_Vertex).xyz;

tex_coord = gl_MultiTexCoord0.st;

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

I use these shaders to texture object in my scene. The problem is that when the scene is loaded the object is already illuminated even though the light is turned off. I would like to ask how can I make the shader illuminate the object only when the light is turned on and when I turn the light off the shader will also stop illuminating the object.

Aleksandar
05-27-2014, 09:10 AM
Why don't you just set/reset some uniform variable and according to its state choose rendering path.