Multilight Shader

Ein Shader mit 3 Lichtquellen als uniform Variable.

Screenshot:

Vertex Shader:

uniform vec3 LightPos1;
uniform vec3 LightPos2;
uniform vec3 LightPos3;
uniform vec3 LightColor1;
uniform vec3 LightColor2;
uniform vec3 LightColor3;
varying vec3 LightColor;

vec3 Normal;
vec3 pos;

void doLight(in vec3 lightPos, in vec3 lightColor, inout vec3 endColor){
  vec3 toLight = lightPos - pos;
  endColor  += max(dot(normalize(toLight), Normal), 0.0) * lightColor;
}

void main(){
  gl_Position    = ftransform();
  Normal         = normalize(gl_NormalMatrix * gl_Normal);
  pos            = vec3(gl_ModelViewMatrix * gl_Vertex);
  
  vec3 endColor = vec3(0.0);
  doLight(LightPos1, LightColor1, endColor);
  doLight(LightPos2, LightColor2, endColor);
  doLight(LightPos3, LightColor3, endColor);
  LightColor = endColor;
}

Fragment Shader:

varying vec3 LightColor;
uniform vec3 Color;

void main(){
  gl_FragColor = vec4(Color * LightColor, 1.0);
}