Browse Source

add inverseTransformNormal function to common.glsl and unfix bug with envmap_fragment.glsl

Ben Houston 10 years ago
parent
commit
969b084798

+ 4 - 0
src/renderers/shaders/ShaderChunk/common.glsl

@@ -23,6 +23,10 @@ vec4  whiteCompliment( in vec4 a )  { return saturate( vec4(1.0) - a ); }
 vec3 transformNormal( in vec3 normal, in mat4 matrix ) {
 	return normalize( ( viewMatrix * vec4( normal, 0.0 ) ).xyz );
 }
+// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations
+vec3 inverseTransformNormal( in vec3 normal, in mat4 matrix ) {
+	return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );
+}
 vec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal) {
 	float distance = dot( planeNormal, point-pointOnPlane );
 	return point - distance * planeNormal;

+ 1 - 3
src/renderers/shaders/ShaderChunk/envmap_fragment.glsl

@@ -4,10 +4,8 @@
 
 		vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );
 
-		// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations
 		// Transforming Normal Vectors with the Inverse Transformation
-
-		vec3 worldNormal = transformNormal( normal, viewMatrix );
+		vec3 worldNormal = inverseTransformNormal( normal, viewMatrix );
 
 		#ifdef ENVMAP_MODE_REFLECTION