43 lines
1.1 KiB
GLSL
43 lines
1.1 KiB
GLSL
uniform sampler2D tex;
|
|
|
|
varying vec4 diffuse, ambientGlobal, ambient;
|
|
varying vec3 normal, pos;
|
|
|
|
|
|
void main() {
|
|
vec3 n, l, refl, eye;
|
|
float NdotL, RdotE;
|
|
vec4 color, specularColor;
|
|
float dist, att, specularFactor;
|
|
|
|
color = ambientGlobal;
|
|
|
|
n = normalize(normal);
|
|
|
|
l = gl_LightSource[0].position.xyz - pos;
|
|
|
|
dist = length(l);
|
|
l /= dist;
|
|
|
|
/* compute the dot product between normal and normalized lightdir */
|
|
NdotL = max(dot(n, l), 0.0);
|
|
|
|
if (NdotL > 0.0) {
|
|
att = 1.0 / (gl_LightSource[0].constantAttenuation +
|
|
gl_LightSource[0].linearAttenuation * dist +
|
|
gl_LightSource[0].quadraticAttenuation * dist * dist);
|
|
color += att * (diffuse * NdotL + ambient);
|
|
|
|
refl = normalize(reflect(-l, n));
|
|
eye = normalize(-pos);
|
|
|
|
RdotE = max(dot(refl, eye), 0.0);
|
|
specularFactor = att * pow(RdotE, gl_FrontMaterial.shininess);
|
|
specularColor = specularFactor * gl_FrontMaterial.specular * gl_LightSource[0].specular;
|
|
}
|
|
else {
|
|
specularColor = vec4(0, 0, 0, 1);
|
|
}
|
|
|
|
gl_FragColor = color * texture2D(tex, gl_TexCoord[0].st) + specularColor;
|
|
}
|