From b9687e3adadb68337c2c44f3e484fac6965bfb0d Mon Sep 17 00:00:00 2001 From: WestLangley Date: Sun, 26 Aug 2012 23:02:02 -0400 Subject: [PATCH] Corrected handling of flip-sided materials --- src/renderers/WebGLRenderer.js | 5 ++++- src/renderers/WebGLShaders.js | 27 +++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 85eaf474a6..bf62aa3aaa 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -4565,7 +4565,8 @@ THREE.WebGLRenderer = function ( parameters ) { metal: material.metal, perPixel: material.perPixel, 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.wrapAround ? "#define WRAP_AROUND" : "", parameters.doubleSided ? "#define DOUBLE_SIDED" : "", + parameters.flipSided ? "#define FLIP_SIDED" : "", parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "", @@ -5933,6 +5935,7 @@ THREE.WebGLRenderer = function ( parameters ) { parameters.perPixel ? "#define PHONG_PER_PIXEL" : "", parameters.wrapAround ? "#define WRAP_AROUND" : "", parameters.doubleSided ? "#define DOUBLE_SIDED" : "", + parameters.flipSided ? "#define FLIP_SIDED" : "", parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "", diff --git a/src/renderers/WebGLShaders.js b/src/renderers/WebGLShaders.js index f0048773e1..f35577f833 100644 --- a/src/renderers/WebGLShaders.js +++ b/src/renderers/WebGLShaders.js @@ -112,7 +112,15 @@ THREE.ShaderChunk = { "#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", @@ -459,7 +467,16 @@ THREE.ShaderChunk = { "#endif", - "transformedNormal = normalize( transformedNormal );", + "#ifdef FLIP_SIDED", + + "transformedNormal = normalize( -transformedNormal );", + + "#else", + + "transformedNormal = normalize( transformedNormal );", + + "#endif", + "#if MAX_DIR_LIGHTS > 0", @@ -819,6 +836,12 @@ THREE.ShaderChunk = { "vec3 normal = normalize( vNormal );", "vec3 viewPosition = normalize( vViewPosition );", + "#ifdef FLIP_SIDED", + + "normal = -normal;", + + "#endif", + "#ifdef DOUBLE_SIDED", "normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );", -- GitLab