Jelajahi Sumber

Mirror: Added custom isVisible() to avoid rendering backfacing mirrors. See #12098

Mr.doob 8 tahun lalu
induk
melakukan
efc8e1fe31
1 mengubah file dengan 17 tambahan dan 1 penghapusan
  1. 17 1
      examples/js/Mirror.js

+ 17 - 1
examples/js/Mirror.js

@@ -109,7 +109,23 @@ THREE.Mirror = function ( width, height, options ) {
 
 
 	scope.material = material;
 	scope.material = material;
 
 
-	scope.onBeforeRender = function ( renderer, scene, camera ) {
+	scope.isVisible = function ( camera ) {
+
+		mirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
+		cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );
+
+		rotationMatrix.extractRotation( scope.matrixWorld );
+
+		normal.set( 0, 0, 1 );
+		normal.applyMatrix4( rotationMatrix );
+
+		view.subVectors( mirrorWorldPosition, cameraWorldPosition );
+
+		return view.dot( normal ) < 0;
+
+	};
+
+	scope.onBeforeRender = function ( renderer, scene, camera ) {
 
 
 		mirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
 		mirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
 		cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );
 		cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );