diff --git a/modules/gfx/src/shader/basic_hf_vs.glsl b/modules/gfx/src/shader/basic_hf_vs.glsl index 4dbe147a6a9a9261d34038de21107c36efbf8f58..80324bf1d7a4764f719de0bff3f9dc5775b3f6e1 100644 --- a/modules/gfx/src/shader/basic_hf_vs.glsl +++ b/modules/gfx/src/shader/basic_hf_vs.glsl @@ -17,7 +17,10 @@ void main() // hemisphere lighting contribution vec3 ec_pos = vec3(gl_ModelViewMatrix* gl_Vertex); if(lighting_flag) { - vec3 normal = normalize(gl_NormalMatrix * gl_Normal); + vec3 normal = vec3(0,0,1); + if(dot(gl_Normal,gl_Normal)>0.001) { + normal = normalize(gl_NormalMatrix * gl_Normal); + } vec3 l_dir = normalize(gl_LightSource[0].position.xyz); // assume directional vector float a = 0.5+0.5*dot(normal,l_dir); gl_FrontColor.rgb = mix(ground_color, sky_color, a).rgb; diff --git a/modules/gfx/src/shader/dumpnorm_vs.glsl b/modules/gfx/src/shader/dumpnorm_vs.glsl index f11d00259225fad6e365dd9929659af3a4012842..f4cc4a1b43079dbd4ce92c5e101db7cec3d56d47 100644 --- a/modules/gfx/src/shader/dumpnorm_vs.glsl +++ b/modules/gfx/src/shader/dumpnorm_vs.glsl @@ -1,7 +1,10 @@ void main() { gl_Position = ftransform(); - vec3 normal = gl_NormalMatrix * gl_Normal; + vec3 normal = vec3(0,0,1); + if(dot(gl_Normal,gl_Normal)>0.001) { + normal = gl_NormalMatrix * gl_Normal; + } gl_TexCoord[0].stp=normal; } diff --git a/modules/gfx/src/shader/toon_vs.glsl b/modules/gfx/src/shader/toon_vs.glsl index 1913f445eaf04f43bdce4d9e9dea6a4021777e8c..3eb50da66c4c31edbee7d197fa2e21e8a2b87bf4 100644 --- a/modules/gfx/src/shader/toon_vs.glsl +++ b/modules/gfx/src/shader/toon_vs.glsl @@ -7,7 +7,10 @@ void main() // for some reason, the fog and z coordinate are sign toggled... gl_FogFragCoord = -ec_Pos.z; - vec3 normal = normalize(gl_NormalMatrix * gl_Normal); + vec3 normal = vec3(0,0,1); + if(dot(gl_Normal,gl_Normal)>0.001) { + normal = normalize(gl_NormalMatrix * gl_Normal); + } // since a directional light is used, the position is not needed gl_TexCoord[0].stp=normal;