I implemented a Phong shader in GLSL, but there is a bug.What you are (supposed) to see down below:A point light source rotating around the center of the world,with a radiance of (0, 100, 0)A textured quad with kd of (1, 0, 0).The problem is:Why is there a a green line to the center of the world instead of a green spot light where the quad is lit? (where the center of the point light source is)(Btw in this case there would be only a yellow spot of light, because red + green = yellow)Vertex Shader:#version 330uniform mat4 ModelMatrix, ViewMatrix, ProjectionMatrix;   uniform vec4 wLiPos[5];       // pos of light source uniform vec3 wEye;         // pos of eyeuniform int lightSize;      //number of lightslayout(location = 0) in vec3 vtxPos;layout(location = 1) in vec3 vtxNorm;layout(location = 2) in vec2 vtxUV;out vec2 texCoord;out vec3 wNormal;           // normal in world spaceout vec3 wView[5];             // view in world spaceout vec3 wLight[5];            // light dir in world spacevoid main() {    gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(vtxPos, 1);    texCoord = vtxUV;    vec4 wPos = ModelMatrix * vec4(vtxPos, 1);    wNormal = (vec4(vtxNorm, 0) * inverse(ModelMatrix)).xyz;    for(int i = 0; i < lightSize; i++) {        wView[i] = wEye * wPos.w - wPos.xyz;        wLight[i] = wLiPos[i].xyz * wPos.w - wPos.xyz * wLiPos[i].w;    }}Fragment shader:#version 330uniform sampler2D samplerUnit;uniform vec3 kd, ks, ka;   // diffuse, specular, ambient refuniform vec3 La, Le[5];    // ambient and point source raduniform float shininess;    // shininess for specular refuniform int lightSize;in vec2 texCoord;    in vec3 wNormal;       // interpolated world sp normalin vec3 wView[5];         // interpolated world sp viewin vec3 wLight[5];        // interpolated world sp illum dirlayout(location = 0) out vec4 fragmentColor;void main() {         vec3 color = vec3(0, 0, 0);    for(int i = 0; i < lightSize; i++) {        vec3 N = normalize(wNormal);        vec3 V = normalize(wView[i]);        vec3 L = normalize(wLight[i]);        vec3 H = normalize(L + V);        float cost = max(dot(N,L), 0);        float cosd = max(dot(N,H), 0);        color += ka * La + (kd * cost + (ks * pow(cosd, shininess)) * Le[i]) / pow(length(wLight[i]), 2);    }    vec3 gamma = vec3(1.0/2.2);    fragmentColor = vec4(pow(color * vec3(texture2D(samplerUnit, texCoord)), gamma), 1);}
Phong shading in OpenGL: line of light from the center of the world
opengl;shader;glsl
I forgot to set the wEye uniform, so it was always (0, 0, 0).