瀏覽代碼

Merge pull request #12787 from WestLangley/dev-neg_scale_2

Support reflections in world transform
Mr.doob 7 年之前
父節點
當前提交
01111ad4d1
共有 2 個文件被更改,包括 11 次插入4 次删除
  1. 6 2
      src/renderers/WebGLRenderer.js
  2. 5 2
      src/renderers/webgl/WebGLState.js

+ 6 - 2
src/renderers/WebGLRenderer.js

@@ -680,7 +680,9 @@ function WebGLRenderer( parameters ) {
 
 
 	this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
 	this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
 
 
-		state.setMaterial( material );
+		var frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
+
+		state.setMaterial( material, frontFaceCW );
 
 
 		var program = setProgram( camera, fog, material, object );
 		var program = setProgram( camera, fog, material, object );
 		var geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );
 		var geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );
@@ -1429,7 +1431,9 @@ function WebGLRenderer( parameters ) {
 
 
 		if ( object.isImmediateRenderObject ) {
 		if ( object.isImmediateRenderObject ) {
 
 
-			state.setMaterial( material );
+			var frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
+
+			state.setMaterial( material, frontFaceCW );
 
 
 			var program = setProgram( camera, scene.fog, material, object );
 			var program = setProgram( camera, scene.fog, material, object );
 
 

+ 5 - 2
src/renderers/webgl/WebGLState.js

@@ -646,13 +646,16 @@ function WebGLState( gl, extensions, utils ) {
 
 
 	}
 	}
 
 
-	function setMaterial( material ) {
+	function setMaterial( material, frontFaceCW ) {
 
 
 		material.side === DoubleSide
 		material.side === DoubleSide
 			? disable( gl.CULL_FACE )
 			? disable( gl.CULL_FACE )
 			: enable( gl.CULL_FACE );
 			: enable( gl.CULL_FACE );
 
 
-		setFlipSided( material.side === BackSide );
+		var flipSided = ( material.side === BackSide );
+		if ( frontFaceCW ) flipSided = ! flipSided;
+
+		setFlipSided( flipSided );
 
 
 		material.transparent === true
 		material.transparent === true
 			? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )
 			? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )