Specular Light
Ein Shader mit Glanzlicht.
Screenshot:
Vertex Shader:
uniform vec3 LightPos;
varying float LightIntensity;
varying float SpecIntensity;
vec3 Normal;
void main(){
gl_Position = ftransform();
vec3 pos = vec3(gl_ModelViewMatrix * gl_Vertex);
Normal = normalize(gl_NormalMatrix * gl_Normal);
vec3 posToLight = normalize(LightPos - pos);
LightIntensity = max(dot(posToLight, Normal), 0.0);
//Specular by Randi Rost: www.3dshaders.com
vec3 reflectVec = reflect(-posToLight, Normal);
vec3 viewVec = normalize(-pos);
SpecIntensity = max(dot(reflectVec, viewVec), 0.0);
}
Fragment Shader:
varying float LightIntensity;
varying float SpecIntensity;
uniform vec3 Color;
uniform float SpecularLevel;
uniform float SpecularSize;
void main(){
vec3 thisColor = Color * LightIntensity;
thisColor += max(0.0, SpecularLevel * pow(SpecIntensity, SpecularSize));
gl_FragColor = vec4(thisColor, 1.0);
}