I am using GLSL version 1.20 with OpenGL 2.1 .
I am trying to compute when a fragment falls into the area of a spot light. I have already set all the light values with glLightfv and glLightf, also the material. This is how I initialize the spot direction and spot cutoff:
float spotCutoff= 5.0;
vector<GLfloat> spotDirection= vector<GLfloat>{0,0,0,1};
// I use [0,0,0,1] because the object is in the [0,0,0] position
// but I also have tried (in vain) many other values.
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotDirection.data());
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,spotCutoff);
In the fragment shader I use a function to know if the fragment is inside this cone:
bool isRayInsideCone(vec3 Light)
{
// Light is taken from the vertex shader and normalized.
// It is exactly computed as normalize(lightPos - eyePos)
// With lightPos= gl_LightSource[0].position.xyz ,
// and eyePos= gl_ModelViewMatrix * gl_Vertex (re-normalized in
// the fragment shader).
vec3 D= normalize(gl_LightSource[0].spotDirection);
return dot(-Light,D) > gl_LightSource[0].spotCutoff;
}
But the problem is that this function returns false for every fragment. I can test this by just doing something like this:
if(isRayInsideCone(Light))
{
gl_FragColor= some_color;
}
else
{
gl_FragColor= other_color;
}
I just guess what I'm doing of wrong.