Can someone help me with the Point Light per pixel? 
the only thing not working is placing the Light source. as you can see i set the position to a very high y amount so basically it shouldn’t be visible at all but in the 3D room, the light comes from the Point(0|0|0)
Vertex Shader:
varying vec4 pos;
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
pos = gl_Vertex;
gl_Position = ftransform();
vec3 normal = normalize(gl_NormalMatrix * gl_Normal);
vec4 mul = vec4(normal.z,normal.z,normal.z,1.0);
gl_FrontColor = gl_Color * mul;
}
Fragment Shader:
uniform sampler2D tex;
// Lights
uniform vec3 lpos[100];
uniform vec3 color[100];
uniform float intense[100];
uniform int amount;
uniform float alpha[100];
varying vec4 pos;
void main()
{
int i;
vec4 finalcolor = texture2D(tex,gl_TexCoord[0].st)*gl_Color;
for(i = 0; i < amount; i++){
// distance
vec3 ppos = vec3(pos.x,pos.y,pos.z);
float distance = length(lpos[i]-ppos);
if(distance < intense[i]){
float falpha = 1.0-(distance/intense[i]);
finalcolor.r = finalcolor.r + color[i].r * falpha * alpha[i];
finalcolor.g = finalcolor.g + color[i].g * falpha * alpha[i];
finalcolor.b = finalcolor.b + color[i].b * falpha * alpha[i];
}
}
gl_FragColor = finalcolor;
}
Rendering:
public void render() {
cam.lookThrough();
test.shader.addLight(new Vector3f(0, 1000000, 0),
new Vector3f(1, 0, 0), 1f, 10);
GL11.glColor4f(r, g, b, a);
GL11.glBegin(GL11.GL_LINES);
GL11.glVertex3f(-10f, 0, 0);
GL11.glVertex3f(10f, 0, 0);
GL11.glVertex3f(0, 0, -10f);
GL11.glVertex3f(0, 0, 10f);
GL11.glEnd();
model.draw();
}
Shader init:
package util.shader;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.lwjgl.opengl.ARBFragmentShader;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.ARBVertexShader;
import org.lwjgl.opengl.GL20;
import org.lwjgl.util.vector.Vector3f;
public class Shader {
public int program, vert, frag;
public Shader(String path) throws Exception {
// Load Vertex Shader
vert = 0;
vert = ARBShaderObjects
.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB);
ARBShaderObjects.glShaderSourceARB(vert, readFileAsString(path
+ ".vert"));
ARBShaderObjects.glCompileShaderARB(vert);
if (GL20.glGetShaderi(vert, GL20.GL_COMPILE_STATUS) == 0) {
System.err.println(GL20.glGetShaderInfoLog(vert, 1024));
System.exit(1);
}
// Load Fragment Shader
frag = 0;
frag = ARBShaderObjects
.glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);
ARBShaderObjects.glShaderSourceARB(frag, readFileAsString(path
+ ".frag"));
ARBShaderObjects.glCompileShaderARB(frag);
if (GL20.glGetShaderi(frag, GL20.GL_COMPILE_STATUS) == 0) {
System.err.println(GL20.glGetShaderInfoLog(frag, 1024));
System.exit(1);
}
// Load Shader Program
program = 0;
program = ARBShaderObjects.glCreateProgramObjectARB();
ARBShaderObjects.glAttachObjectARB(program, vert);
ARBShaderObjects.glAttachObjectARB(program, frag);
ARBShaderObjects.glLinkProgramARB(program);
if (GL20.glGetProgrami(program, GL20.GL_LINK_STATUS) == 0) {
System.err.println(GL20.glGetProgramInfoLog(program, 1024));
System.exit(1);
}
ARBShaderObjects.glValidateProgramARB(program);
if (GL20.glGetProgrami(program, GL20.GL_VALIDATE_STATUS) == 0) {
System.err.println(GL20.glGetProgramInfoLog(program, 1024));
System.exit(1);
}
}
public void activate() {
ARBShaderObjects.glUseProgramObjectARB(program);
light = 0;
}
public void deactivate() {
ARBShaderObjects.glUseProgramObjectARB(0);
}
public void destroy() {
ARBShaderObjects.glDeleteObjectARB(frag);
ARBShaderObjects.glDeleteObjectARB(vert);
ARBShaderObjects.glDeleteObjectARB(program);
}
private String readFileAsString(String filename) throws Exception {
StringBuilder source = new StringBuilder();
FileInputStream in = new FileInputStream(filename);
Exception exception = null;
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
Exception innerExc = null;
try {
String line;
while ((line = reader.readLine()) != null)
source.append(line).append('\n');
} catch (Exception exc) {
exception = exc;
} finally {
try {
reader.close();
} catch (Exception exc) {
if (innerExc == null)
innerExc = exc;
else
exc.printStackTrace();
}
}
if (innerExc != null)
throw innerExc;
} catch (Exception exc) {
exception = exc;
} finally {
try {
in.close();
} catch (Exception exc) {
if (exception == null)
exception = exc;
else
exc.printStackTrace();
}
if (exception != null)
throw exception;
}
return source.toString();
}
// Tests
public void setUniform(String uniform, float x, float y, float z) {
int loc = GL20.glGetUniformLocation(program, uniform);
GL20.glUniform3f(loc, x, y, z);
}
public void setUniform(String uniform, int x) {
int loc = GL20.glGetUniformLocation(program, uniform);
GL20.glUniform1i(loc, x);
}
public void setUniform(String uniform, float x) {
int loc = GL20.glGetUniformLocation(program, uniform);
GL20.glUniform1f(loc, x);
}
// Light? :/
int light = 0;
public void addLight(Vector3f pos, Vector3f col, float alpha, float intense) {
if (light != 100) {
setUniform("lpos[" + light + "]", pos.x, pos.y, pos.z);
setUniform("color[" + light + "]", col.x, col.y, col.z);
setUniform("intense[" + light + "]", intense);
setUniform("alpha[" + light + "]", alpha);
light++;
setUniform("amount", light);
}
}
}