提交 6f522395 编写于 作者: M Mr.doob

Deprecated MultiMaterial.

上级 9cfaa145
......@@ -486,8 +486,7 @@ THREE.Projector = function () {
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 ++ ) {
......@@ -525,8 +524,8 @@ THREE.Projector = function () {
var face = faces[ f ];
material = isFaceMaterial === true
? objectMaterials.materials[ face.materialIndex ]
material = isMultiMaterial === true
? object.material[ face.materialIndex ]
: object.material;
if ( material === undefined ) continue;
......
......@@ -41,7 +41,6 @@ import { TextureLoader } from './loaders/TextureLoader.js';
import { Material } from './materials/Material.js';
import { LineBasicMaterial } from './materials/LineBasicMaterial.js';
import { MeshPhongMaterial } from './materials/MeshPhongMaterial.js';
import { MultiMaterial } from './materials/MultiMaterial.js';
import { PointsMaterial } from './materials/PointsMaterial.js';
import { ShaderMaterial } from './materials/ShaderMaterial.js';
import { Box2 } from './math/Box2.js';
......@@ -81,8 +80,24 @@ export var LinePieces = 1;
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;
}
......
......@@ -3,7 +3,6 @@ export { SpriteMaterial } from './SpriteMaterial.js';
export { RawShaderMaterial } from './RawShaderMaterial.js';
export { ShaderMaterial } from './ShaderMaterial.js';
export { PointsMaterial } from './PointsMaterial.js';
export { MultiMaterial } from './MultiMaterial.js';
export { MeshPhysicalMaterial } from './MeshPhysicalMaterial.js';
export { MeshStandardMaterial } from './MeshStandardMaterial.js';
export { MeshPhongMaterial } from './MeshPhongMaterial.js';
......
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 };
......@@ -259,8 +259,7 @@ Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), {
} else if ( geometry.isGeometry ) {
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 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 ++ ) {
var face = faces[ f ];
var faceMaterial = isFaceMaterial === true ? materials[ face.materialIndex ] : material;
var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;
if ( faceMaterial === undefined ) continue;
......
......@@ -1416,56 +1416,36 @@ function WebGLRenderer( parameters ) {
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 );
}
......
......@@ -30,8 +30,6 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
_lookTarget = new Vector3(),
_lightPositionWorld = new Vector3(),
_renderList = [],
_MorphingFlag = 1,
_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
......@@ -258,46 +256,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
// 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;
......@@ -435,12 +394,33 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
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;
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 ++ ) {
projectObject( children[ i ], camera, shadowCamera );
renderObject( children[ i ], camera, shadowCamera );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册