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);
}