Explorar el Código

Deprecated MultiMaterial.

Mr.doob hace 8 años
padre
commit
6f5223951d

+ 3 - 4
examples/js/renderers/Projector.js

@@ -486,8 +486,7 @@ THREE.Projector = function () {
 
 
 					var material = object.material;
 					var material = object.material;
 
 
-					var isFaceMaterial = material instanceof THREE.MultiMaterial;
-					var objectMaterials = isFaceMaterial === true ? object.material : null;
+					var isMultiMaterial = Array.isArray( material );
 
 
 					for ( var v = 0, vl = vertices.length; v < vl; v ++ ) {
 					for ( var v = 0, vl = vertices.length; v < vl; v ++ ) {
 
 
@@ -525,8 +524,8 @@ THREE.Projector = function () {
 
 
 						var face = faces[ f ];
 						var face = faces[ f ];
 
 
-						material = isFaceMaterial === true
-							 ? objectMaterials.materials[ face.materialIndex ]
+						material = isMultiMaterial === true
+							 ? object.material[ face.materialIndex ]
 							 : object.material;
 							 : object.material;
 
 
 						if ( material === undefined ) continue;
 						if ( material === undefined ) continue;

+ 18 - 3
src/Three.Legacy.js

@@ -41,7 +41,6 @@ import { TextureLoader } from './loaders/TextureLoader.js';
 import { Material } from './materials/Material.js';
 import { Material } from './materials/Material.js';
 import { LineBasicMaterial } from './materials/LineBasicMaterial.js';
 import { LineBasicMaterial } from './materials/LineBasicMaterial.js';
 import { MeshPhongMaterial } from './materials/MeshPhongMaterial.js';
 import { MeshPhongMaterial } from './materials/MeshPhongMaterial.js';
-import { MultiMaterial } from './materials/MultiMaterial.js';
 import { PointsMaterial } from './materials/PointsMaterial.js';
 import { PointsMaterial } from './materials/PointsMaterial.js';
 import { ShaderMaterial } from './materials/ShaderMaterial.js';
 import { ShaderMaterial } from './materials/ShaderMaterial.js';
 import { Box2 } from './math/Box2.js';
 import { Box2 } from './math/Box2.js';
@@ -81,8 +80,24 @@ export var LinePieces = 1;
 
 
 export function MeshFaceMaterial( materials ) {
 export function MeshFaceMaterial( materials ) {
 
 
-	console.warn( 'THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial.' );
-	return new MultiMaterial( materials );
+	console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );
+	return materials;
+
+}
+
+export function MultiMaterial( materials ) {
+
+	if ( materials === undefined ) materials = [];
+
+	console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );
+	materials.isMultiMaterial = true;
+	materials.materials = materials;
+	materials.clone = function () {
+
+		return materials.slice();
+
+	};
+	return materials;
 
 
 }
 }
 
 

+ 0 - 1
src/materials/Materials.js

@@ -3,7 +3,6 @@ export { SpriteMaterial } from './SpriteMaterial.js';
 export { RawShaderMaterial } from './RawShaderMaterial.js';
 export { RawShaderMaterial } from './RawShaderMaterial.js';
 export { ShaderMaterial } from './ShaderMaterial.js';
 export { ShaderMaterial } from './ShaderMaterial.js';
 export { PointsMaterial } from './PointsMaterial.js';
 export { PointsMaterial } from './PointsMaterial.js';
-export { MultiMaterial } from './MultiMaterial.js';
 export { MeshPhysicalMaterial } from './MeshPhysicalMaterial.js';
 export { MeshPhysicalMaterial } from './MeshPhysicalMaterial.js';
 export { MeshStandardMaterial } from './MeshStandardMaterial.js';
 export { MeshStandardMaterial } from './MeshStandardMaterial.js';
 export { MeshPhongMaterial } from './MeshPhongMaterial.js';
 export { MeshPhongMaterial } from './MeshPhongMaterial.js';

+ 0 - 72
src/materials/MultiMaterial.js

@@ -1,72 +0,0 @@
-import { _Math } from '../math/Math';
-
-/**
- * @author mrdoob / http://mrdoob.com/
- */
-
-function MultiMaterial( materials ) {
-
-	this.uuid = _Math.generateUUID();
-
-	this.type = 'MultiMaterial';
-
-	this.materials = Array.isArray( materials ) ? materials : [];
-
-	this.visible = true;
-
-}
-
-Object.assign( MultiMaterial.prototype, {
-
-	isMultiMaterial: true,
-
-	toJSON: function ( meta ) {
-
-		var output = {
-			metadata: {
-				version: 4.2,
-				type: 'material',
-				generator: 'MaterialExporter'
-			},
-			uuid: this.uuid,
-			type: this.type,
-			materials: []
-		};
-
-		var materials = this.materials;
-
-		for ( var i = 0, l = materials.length; i < l; i ++ ) {
-
-			var material = materials[ i ].toJSON( meta );
-			delete material.metadata;
-
-			output.materials.push( material );
-
-		}
-
-		output.visible = this.visible;
-
-		return output;
-
-	},
-
-	clone: function () {
-
-		var material = new this.constructor();
-
-		for ( var i = 0; i < this.materials.length; i ++ ) {
-
-			material.materials.push( this.materials[ i ].clone() );
-
-		}
-
-		material.visible = this.visible;
-
-		return material;
-
-	}
-
-} );
-
-
-export { MultiMaterial };

+ 2 - 3
src/objects/Mesh.js

@@ -259,8 +259,7 @@ Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), {
 			} else if ( geometry.isGeometry ) {
 			} else if ( geometry.isGeometry ) {
 
 
 				var fvA, fvB, fvC;
 				var fvA, fvB, fvC;
-				var isFaceMaterial = ( material && material.isMultiMaterial );
-				var materials = isFaceMaterial === true ? material.materials : null;
+				var isMultiMaterial = Array.isArray( material );
 
 
 				var vertices = geometry.vertices;
 				var vertices = geometry.vertices;
 				var faces = geometry.faces;
 				var faces = geometry.faces;
@@ -272,7 +271,7 @@ Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), {
 				for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
 				for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
 
 
 					var face = faces[ f ];
 					var face = faces[ f ];
-					var faceMaterial = isFaceMaterial === true ? materials[ face.materialIndex ] : material;
+					var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;
 
 
 					if ( faceMaterial === undefined ) continue;
 					if ( faceMaterial === undefined ) continue;
 
 

+ 16 - 36
src/renderers/WebGLRenderer.js

@@ -1416,56 +1416,36 @@ function WebGLRenderer( parameters ) {
 
 
 				if ( object.frustumCulled === false || isObjectViewable( object ) === true ) {
 				if ( object.frustumCulled === false || isObjectViewable( object ) === true ) {
 
 
-					var material = object.material;
-
-					if ( material.visible === true ) {
-
-						if ( _this.sortObjects === true ) {
-
-							_vector3.setFromMatrixPosition( object.matrixWorld );
-							_vector3.applyMatrix4( _projScreenMatrix );
-
-						}
-
-						var geometry = objects.update( object );
-
-						if ( material.isMultiMaterial ) {
-
-							var groups = geometry.groups;
-							var materials = material.materials;
+					if ( _this.sortObjects === true ) {
 
 
-							if ( groups.length > 0 ) {
+						_vector3.setFromMatrixPosition( object.matrixWorld );
+						_vector3.applyMatrix4( _projScreenMatrix );
 
 
-								// push a render item for each group of the geometry
-
-								for ( var i = 0, l = groups.length; i < l; i ++ ) {
-
-									var group = groups[ i ];
-									var groupMaterial = materials[ group.materialIndex ];
-
-									if ( groupMaterial === undefined ) {
+					}
 
 
-										console.warn( 'THREE.WebGLRenderer: MultiMaterial has insufficient amount of materials for geometry. %i material(s) expected but only %i provided.', groups.length, materials.length );
+					var geometry = objects.update( object );
+					var material = object.material;
 
 
-									} else if ( groupMaterial.visible === true ) {
+					if ( Array.isArray( material ) ) {
 
 
-										pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
+						var groups = geometry.groups;
 
 
-									}
+						for ( var i = 0, l = groups.length; i < l; i ++ ) {
 
 
-								}
+							var group = groups[ i ];
+							var groupMaterial = material[ group.materialIndex ];
 
 
-							} else {
+							if ( groupMaterial && groupMaterial.visible === true ) {
 
 
-								console.warn( 'THREE.WebGLRenderer: MultiMaterial can not be used without groups.' );
+								pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
 
 
 							}
 							}
 
 
-						} else {
+						}
 
 
-							pushRenderItem( object, geometry, material, _vector3.z, null );
+					} else if ( material.visible === true ) {
 
 
-						}
+						pushRenderItem( object, geometry, material, _vector3.z, null );
 
 
 					}
 					}
 
 

+ 27 - 47
src/renderers/webgl/WebGLShadowMap.js

@@ -30,8 +30,6 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 	_lookTarget = new Vector3(),
 	_lookTarget = new Vector3(),
 	_lightPositionWorld = new Vector3(),
 	_lightPositionWorld = new Vector3(),
 
 
-	_renderList = [],
-
 	_MorphingFlag = 1,
 	_MorphingFlag = 1,
 
 
 	_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
 	_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
@@ -258,46 +256,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 
 
 				// set object matrices & frustum culling
 				// set object matrices & frustum culling
 
 
-				_renderList.length = 0;
-
-				projectObject( scene, camera, shadowCamera );
-
-				// render shadow map
-				// render regular objects
-
-				for ( var j = 0, jl = _renderList.length; j < jl; j ++ ) {
-
-					var object = _renderList[ j ];
-					var geometry = _objects.update( object );
-					var material = object.material;
-
-					if ( material && material.isMultiMaterial ) {
-
-						var groups = geometry.groups;
-						var materials = material.materials;
-
-						for ( var k = 0, kl = groups.length; k < kl; k ++ ) {
-
-							var group = groups[ k ];
-							var groupMaterial = materials[ group.materialIndex ];
-
-							if ( groupMaterial.visible === true ) {
-
-								var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld );
-								_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
-
-							}
-
-						}
-
-					} else {
-
-						var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld );
-						_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
-
-					}
-
-				}
+				renderObject( scene, camera, shadowCamera, isPointLight );
 
 
 			}
 			}
 
 
@@ -425,7 +384,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 
 
 	}
 	}
 
 
-	function projectObject( object, camera, shadowCamera ) {
+	function renderObject( object, camera, shadowCamera, isPointLight ) {
 
 
 		if ( object.visible === false ) return;
 		if ( object.visible === false ) return;
 
 
@@ -435,12 +394,33 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 
 
 			if ( object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {
 			if ( object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {
 
 
+				object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
+
+				var geometry = _objects.update( object );
 				var material = object.material;
 				var material = object.material;
 
 
-				if ( material.visible === true ) {
+				if ( Array.isArray( material ) ) {
+
+					var groups = geometry.groups;
+
+					for ( var k = 0, kl = groups.length; k < kl; k ++ ) {
+
+						var group = groups[ k ];
+						var groupMaterial = material[ group.materialIndex ];
+
+						if ( groupMaterial && groupMaterial.visible === true ) {
+
+							var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld );
+							_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
+
+						}
+
+					}
+
+				} else if ( material.visible === true ) {
 
 
-					object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
-					_renderList.push( object );
+					var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld );
+					_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
 
 
 				}
 				}
 
 
@@ -452,7 +432,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 
 
 		for ( var i = 0, l = children.length; i < l; i ++ ) {
 		for ( var i = 0, l = children.length; i < l; i ++ ) {
 
 
-			projectObject( children[ i ], camera, shadowCamera );
+			renderObject( children[ i ], camera, shadowCamera );
 
 
 		}
 		}