Browse Source

Corrected handling of flip-sided materials

WestLangley 13 years ago
parent
commit
b9687e3ada
2 changed files with 29 additions and 3 deletions
  1. 4 1
      src/renderers/WebGLRenderer.js
  2. 25 2
      src/renderers/WebGLShaders.js

+ 4 - 1
src/renderers/WebGLRenderer.js

@@ -4565,7 +4565,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 			metal: material.metal,
 			metal: material.metal,
 			perPixel: material.perPixel,
 			perPixel: material.perPixel,
 			wrapAround: material.wrapAround,
 			wrapAround: material.wrapAround,
-			doubleSided: material.side === THREE.DoubleSide
+			doubleSided: material.side === THREE.DoubleSide,
+			flipSided: material.side === THREE.BackSide
 
 
 		};
 		};
 
 
@@ -5838,6 +5839,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
 			parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
 			parameters.wrapAround ? "#define WRAP_AROUND" : "",
 			parameters.wrapAround ? "#define WRAP_AROUND" : "",
 			parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
 			parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
+			parameters.flipSided ? "#define FLIP_SIDED" : "",
 
 
 			parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
 			parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
 			parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "",
 			parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "",
@@ -5933,6 +5935,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
 			parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
 			parameters.wrapAround ? "#define WRAP_AROUND" : "",
 			parameters.wrapAround ? "#define WRAP_AROUND" : "",
 			parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
 			parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
+			parameters.flipSided ? "#define FLIP_SIDED" : "",
 
 
 			parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
 			parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
 			parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "",
 			parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "",

+ 25 - 2
src/renderers/WebGLShaders.js

@@ -112,7 +112,15 @@ THREE.ShaderChunk = {
 
 
 			"#else",
 			"#else",
 
 
-				"vec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );",
+				"#ifdef FLIP_SIDED",
+				
+					"vec4 cubeColor = textureCube( envMap, -vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );",
+					
+				"#else",
+				
+					"vec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );",
+					
+				"#endif",
 
 
 			"#endif",
 			"#endif",
 
 
@@ -459,7 +467,16 @@ THREE.ShaderChunk = {
 
 
 		"#endif",
 		"#endif",
 
 
-		"transformedNormal = normalize( transformedNormal );",
+		"#ifdef FLIP_SIDED",
+		
+			"transformedNormal = normalize( -transformedNormal );",
+			
+		"#else",
+		
+			"transformedNormal = normalize( transformedNormal );",
+			
+		"#endif",
+
 
 
 		"#if MAX_DIR_LIGHTS > 0",
 		"#if MAX_DIR_LIGHTS > 0",
 
 
@@ -819,6 +836,12 @@ THREE.ShaderChunk = {
 		"vec3 normal = normalize( vNormal );",
 		"vec3 normal = normalize( vNormal );",
 		"vec3 viewPosition = normalize( vViewPosition );",
 		"vec3 viewPosition = normalize( vViewPosition );",
 
 
+		"#ifdef FLIP_SIDED",
+		
+			"normal = -normal;",
+			
+		"#endif",
+
 		"#ifdef DOUBLE_SIDED",
 		"#ifdef DOUBLE_SIDED",
 
 
 			"normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );",
 			"normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );",