diff --git a/Effects/model-default.eff b/Effects/model-default.eff index e4951bb91..fb3d92c82 100644 --- a/Effects/model-default.eff +++ b/Effects/model-default.eff @@ -62,7 +62,7 @@ Shaders/model-default.vert - Shaders/model-default.frag + Shaders/default.frag texture diff --git a/Shaders/default.frag b/Shaders/default.frag index f6bf8abd4..53d3fc20d 100644 --- a/Shaders/default.frag +++ b/Shaders/default.frag @@ -1,21 +1,27 @@ // -*-C++-*- -varying vec4 diffuse, ambient; +varying vec4 diffuse, constantColor; varying vec3 normal, lightDir, halfVector; varying float fogCoord, alpha; uniform sampler2D texture; +float luminance(vec3 color) +{ + return dot(vec3(0.212671, 0.715160, 0.072169), color); +} + void main() { vec3 n, halfV; float NdotL, NdotHV, fogFactor; - vec4 color = ambient + gl_FrontMaterial.emission; + vec4 color = constantColor; vec4 texel; vec4 fragColor; vec4 specular = vec4(0.0); - n = normalize(normal); + if (!gl_FrontFacing) + n = -n; NdotL = max(dot(n, lightDir), 0.0); if (NdotL > 0.0) { color += diffuse * NdotL; diff --git a/Shaders/default.vert b/Shaders/default.vert index 78c463232..e1a0e5148 100644 --- a/Shaders/default.vert +++ b/Shaders/default.vert @@ -8,7 +8,7 @@ // Diffuse and ambient colors come from the gl_Color. This is // equivalent to osg::Material::AMBIENT_AND_DIFFUSE. -varying vec4 diffuse, ambient; +varying vec4 diffuse, constantColor; varying vec3 normal, lightDir, halfVector; varying float fogCoord, alpha; @@ -22,7 +22,7 @@ void main() halfVector = normalize(gl_LightSource[0].halfVector.xyz); diffuse = gl_Color * gl_LightSource[0].diffuse; alpha = gl_Color.a; - ambient = gl_Color * gl_LightSource[0].ambient; - ambient += gl_Color * gl_LightModel.ambient; + constantColor = gl_FrontLightModelProduct.sceneColor + + gl_FrontMaterial.ambient * gl_LightSource[0].ambient; fogCoord = abs(ecPosition.z); } diff --git a/Shaders/model-default.frag b/Shaders/model-default.frag deleted file mode 100644 index 25bbe685b..000000000 --- a/Shaders/model-default.frag +++ /dev/null @@ -1,37 +0,0 @@ -// -*-C++-*- - -varying vec4 diffuse, constantColor; -varying vec3 normal, lightDir, halfVector; -varying float alpha, fogCoord; - -uniform sampler2D texture; - -void main() -{ - vec3 n, halfV; - float NdotL, NdotHV, fogFactor; - vec4 color = constantColor; - vec4 texel; - vec4 fragColor; - vec4 specular = vec4(0.0); - n = normalize(normal); - NdotL = max(dot(n, lightDir), 0.0); - if (NdotL > 0.0) { - color += diffuse * NdotL; - halfV = normalize(halfVector); - NdotHV = max(dot(n, halfV), 0.0); - if (gl_FrontMaterial.shininess > 0.0) - specular.rgb = (gl_FrontMaterial.specular.rgb - * gl_LightSource[0].specular.rgb - * pow(NdotHV, gl_FrontMaterial.shininess)); - } - color.a = alpha; - // This shouldn't be necessary, but our lighting becomes very - // saturated. Clamping the color before modulating by the texture - // is closer to what the OpenGL fixed function pipeline does. - color = clamp(color, 0.0, 1.0); - texel = texture2D(texture, gl_TexCoord[0].st); - fragColor = color * texel + specular; - fogFactor = exp(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord); - gl_FragColor = mix(gl_Fog.color, fragColor, fogFactor); -}