Jelajahi Sumber

WebGLRenderer: Honor transparent, double-sided materials in compile(). (#22266)

Michael Herzog 2 tahun lalu
induk
melakukan
39c1de95af
1 mengubah file dengan 24 tambahan dan 2 penghapusan
  1. 24 2
      src/renderers/WebGLRenderer.js

+ 24 - 2
src/renderers/WebGLRenderer.js

@@ -847,6 +847,28 @@ function WebGLRenderer( parameters = {} ) {
 
 	this.compile = function ( scene, camera ) {
 
+		function prepare( material, scene, object ) {
+
+			if ( material.transparent === true && material.side === DoubleSide ) {
+
+				material.side = BackSide;
+				material.needsUpdate = true;
+				getProgram( material, scene, object );
+
+				material.side = FrontSide;
+				material.needsUpdate = true;
+				getProgram( material, scene, object );
+
+				material.side = DoubleSide;
+
+			} else {
+
+				getProgram( material, scene, object );
+
+			}
+
+		}
+
 		currentRenderState = renderStates.get( scene );
 		currentRenderState.init();
 
@@ -882,13 +904,13 @@ function WebGLRenderer( parameters = {} ) {
 
 						const material2 = material[ i ];
 
-						getProgram( material2, scene, object );
+						prepare( material2, scene, object );
 
 					}
 
 				} else {
 
-					getProgram( material, scene, object );
+					prepare( material, scene, object );
 
 				}