Optimized shaders

This commit is contained in:
Matthias Schiffer 2009-12-21 23:41:17 +01:00
parent a540d6b167
commit b7cb346354
2 changed files with 15 additions and 17 deletions

View file

@ -7,33 +7,31 @@ varying vec3 normal, pos;
void main() {
vec3 n, l, refl, eye;
float NdotL, RdotE;
vec4 color, specularColor;
float dist, att, specularFactor;
vec4 specularColor;
float dist, distSq, att, specularFactor;
n = normalize(normal);
l = gl_LightSource[0].position.xyz - pos;
dist = length(l);
l /= dist;
distSq = dot(l, l);
/* compute the dot product between normal and normalized lightdir */
NdotL = max(dot(n, l), 0.0);
NdotL = dot(n, l);
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);
dist = sqrt(distSq);
refl = normalize(reflect(-l, n));
eye = normalize(-pos);
att = 1.0 / (gl_LightSource[0].quadraticAttenuation * distSq);
gl_FragColor = att * (diffuse * NdotL / dist + ambient) * texture2D(tex, gl_TexCoord[0].st);
RdotE = max(dot(refl, eye), 0.0);
refl = reflect(-l, n);
RdotE = -dot(refl, pos) / sqrt(dot(refl, refl) * dot(pos, pos));
if(RdotE > 0.0) {
specularFactor = att * pow(RdotE, gl_FrontMaterial.shininess);
specularColor = specularFactor * gl_FrontMaterial.specular * gl_LightSource[0].specular;
gl_FragColor = color * texture2D(tex, gl_TexCoord[0].st) + specularColor;
gl_FragColor += specularFactor * gl_FrontMaterial.specular * gl_LightSource[0].specular;
}
}
else {
gl_FragColor = vec4(0, 0, 0, 1);

View file

@ -3,7 +3,7 @@ varying vec3 normal, pos;
void main() {
normal = normalize(gl_NormalMatrix * gl_Normal);
normal = gl_NormalMatrix * gl_Normal;
pos = vec3(gl_ModelViewMatrix * gl_Vertex);