varying vec3 vertnormal;
varying vec3 lightvec;
uniform vec3 lightsize;
uniform float specularintensity;
uniform sampler2D texture0;
vec3 specular(int source)
{
vec3 a = lightvec / lightsize;
vec3 lightdir = normalize(lightvec);
return clamp(specularintensity-dot(a, a), 0.0, specularintensity) * gl_LightSource[0].specular *
clamp(-dot(lightdir, vertnormal), 0.0, 1.0); // damit keine flächen beleuchtet werden, die nicht dem punkt zugewandt sind
}
float diffuse(int source)
{
vec3 lightdir = normalize(gl_LightSource[0].position.xyz);
return clamp(dot(lightdir, vertnormal), 0.0, 1.0) * gl_LightSource[source].diffuse; // vergleich der normalen etc. funktioniert einwandfrei
}
void main(void)
{
int i = 0;
vec3 spec = vec3(0, 0, 0);
vec3 diff = vec3(0, 0, 0);
vec3 ambient = vec3(0, 0, 0);
spec = spec + specular(0);
diff = diff + diffuse(0);
ambient = ambient + gl_LightSource[0].ambient;
gl_FragColor = vec4(diff + ambient + spec, 1) * texture2D(texture0, gl_TexCoord[0]);
}