PDA

View Full Version : light position transformations in shader



Warzywo
06-08-2008, 07:49 AM
Hi, i'm trying to write point light shader, as listed.
When i use the light vector:

L = vec3(gl_LightSource[0].position - V4);

the position comes from GL_LIGHT and it's already in eye-space.
And thats fine - it works correctly, but what i need is the
light position passed as vec4 vector, for example vec4(5,5,5,1).

What exactly transformations do I need to use to make vec4 behave
like GL_LIGHT position ?

please help me :)


void main(void)
{
vec3 camPos = vec3(100,20,100);
vec3 L,R,H,C,Cx,S,V,N;
vec4 diff,spec,V4,L4;
vec4 color = gl_FrontLightModelProduct.sceneColor;
float diffuse, specular, d ,att;

C = vec3(0.0,0.0,1.0);
vec4 parameter[2];
parameter[0] = vec4(5,5,5,1);
parameter[1] = vec4(1,1,1,0);

gl_FrontColor = vec4(0.0);


//V4 = gl_Vertex;
N = normalize(gl_NormalMatrix * gl_Normal);
//N = normalize(gl_Normal);
N = N * gl_NormalScale;
//V4 = gl_ModelViewMatrix * gl_Vertex;
V4 = gl_ModelViewMatrix * gl_Vertex;


//N = normalize(gl_Normal);
vec4 position = vec4(parameter[0]);



specular = 0.0;

//L = normalize(vec3(gl_ModelViewMatrix * vec4(parameter[i].xyz,1.0)));

L = vec3(gl_LightSource[0].position - V4);

//L = vec3(position - V4);

//Cx = -normalize(V);
L = normalize(L);
diffuse = max(0.0,dot(N,L));


H = normalize(L + C);



if(diffuse > 0.0)
specular = pow(max(0.0,dot(N,H)),gl_FrontMaterial.shininess);

diff = vec4(parameter[1].xyz,0.0) * diffuse;
spec = vec4(parameter[1].xyz,0.0) * specular;

color += diff * gl_FrontMaterial.diffuse + spec * gl_FrontMaterial.specular;





gl_FrontColor = color;
gl_Position = ftransform();
}

V-man
06-08-2008, 11:22 AM
You want to transform vec4(5, 5, 5, 1) to eye space?
Multiply it by the modelview matrix.

Warzywo
06-09-2008, 07:46 AM
I did - the transformation is done incorrectly. shouldn't be there MV matrix passed from opengl program ? Cause this gl_ModelViewMatrix generates wrong result :p

dletozeun
06-09-2008, 08:08 AM
If you use the modelview matrix that transforms vertices, it transforms the light position too.

Warzywo
06-10-2008, 03:46 AM
I know - it should, but it's wrong - i tried such transformation. Does the ModelViewMatrix change during shader lifetime ? is it different at the begining and for example in the middle of the pipeline ?

dletozeun
06-10-2008, 03:59 AM
No during the shader execution until you change the modelview matrix yourself in the application