|
@@ -7669,6 +7669,8 @@ function Material() {
|
|
|
this.clipIntersection = false;
|
|
|
this.clipShadows = false;
|
|
|
|
|
|
+ this.shadowSide = null;
|
|
|
+
|
|
|
this.colorWrite = true;
|
|
|
|
|
|
this.precision = null; // override the renderer's default precision for this material
|
|
@@ -7976,6 +7978,8 @@ Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
|
|
|
|
|
|
this.clippingPlanes = dstPlanes;
|
|
|
|
|
|
+ this.shadowSide = source.shadowSide;
|
|
|
+
|
|
|
return this;
|
|
|
|
|
|
},
|
|
@@ -9241,6 +9245,8 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
|
|
|
|
|
|
_materialCache = {};
|
|
|
|
|
|
+ var shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };
|
|
|
+
|
|
|
var cubeDirections = [
|
|
|
new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),
|
|
|
new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )
|
|
@@ -9298,9 +9304,6 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
|
|
|
|
|
|
this.type = PCFShadowMap;
|
|
|
|
|
|
- this.renderReverseSided = true;
|
|
|
- this.renderSingleSided = true;
|
|
|
-
|
|
|
this.render = function ( lights, scene, camera ) {
|
|
|
|
|
|
if ( scope.enabled === false ) return;
|
|
@@ -9557,22 +9560,7 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
|
|
|
result.visible = material.visible;
|
|
|
result.wireframe = material.wireframe;
|
|
|
|
|
|
- var side = material.side;
|
|
|
-
|
|
|
- if ( scope.renderSingleSided && side == DoubleSide ) {
|
|
|
-
|
|
|
- side = FrontSide;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( scope.renderReverseSided ) {
|
|
|
-
|
|
|
- if ( side === FrontSide ) side = BackSide;
|
|
|
- else if ( side === BackSide ) side = FrontSide;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- result.side = side;
|
|
|
+ result.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];
|
|
|
|
|
|
result.clipShadows = material.clipShadows;
|
|
|
result.clippingPlanes = material.clippingPlanes;
|
|
@@ -37282,286 +37270,280 @@ Object.assign( ObjectLoader.prototype, {
|
|
|
|
|
|
},
|
|
|
|
|
|
- parseObject: function () {
|
|
|
-
|
|
|
- var matrix = new Matrix4();
|
|
|
-
|
|
|
- return function parseObject( data, geometries, materials ) {
|
|
|
+ parseObject: function ( data, geometries, materials ) {
|
|
|
|
|
|
- var object;
|
|
|
+ var object;
|
|
|
|
|
|
- function getGeometry( name ) {
|
|
|
+ function getGeometry( name ) {
|
|
|
|
|
|
- if ( geometries[ name ] === undefined ) {
|
|
|
+ if ( geometries[ name ] === undefined ) {
|
|
|
|
|
|
- console.warn( 'THREE.ObjectLoader: Undefined geometry', name );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return geometries[ name ];
|
|
|
+ console.warn( 'THREE.ObjectLoader: Undefined geometry', name );
|
|
|
|
|
|
}
|
|
|
|
|
|
- function getMaterial( name ) {
|
|
|
+ return geometries[ name ];
|
|
|
|
|
|
- if ( name === undefined ) return undefined;
|
|
|
+ }
|
|
|
|
|
|
- if ( Array.isArray( name ) ) {
|
|
|
+ function getMaterial( name ) {
|
|
|
|
|
|
- var array = [];
|
|
|
+ if ( name === undefined ) return undefined;
|
|
|
|
|
|
- for ( var i = 0, l = name.length; i < l; i ++ ) {
|
|
|
+ if ( Array.isArray( name ) ) {
|
|
|
|
|
|
- var uuid = name[ i ];
|
|
|
+ var array = [];
|
|
|
|
|
|
- if ( materials[ uuid ] === undefined ) {
|
|
|
+ for ( var i = 0, l = name.length; i < l; i ++ ) {
|
|
|
|
|
|
- console.warn( 'THREE.ObjectLoader: Undefined material', uuid );
|
|
|
+ var uuid = name[ i ];
|
|
|
|
|
|
- }
|
|
|
+ if ( materials[ uuid ] === undefined ) {
|
|
|
|
|
|
- array.push( materials[ uuid ] );
|
|
|
+ console.warn( 'THREE.ObjectLoader: Undefined material', uuid );
|
|
|
|
|
|
}
|
|
|
|
|
|
- return array;
|
|
|
+ array.push( materials[ uuid ] );
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( materials[ name ] === undefined ) {
|
|
|
+ return array;
|
|
|
|
|
|
- console.warn( 'THREE.ObjectLoader: Undefined material', name );
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ if ( materials[ name ] === undefined ) {
|
|
|
|
|
|
- return materials[ name ];
|
|
|
+ console.warn( 'THREE.ObjectLoader: Undefined material', name );
|
|
|
|
|
|
}
|
|
|
|
|
|
- switch ( data.type ) {
|
|
|
+ return materials[ name ];
|
|
|
|
|
|
- case 'Scene':
|
|
|
+ }
|
|
|
|
|
|
- object = new Scene();
|
|
|
+ switch ( data.type ) {
|
|
|
|
|
|
- if ( data.background !== undefined ) {
|
|
|
+ case 'Scene':
|
|
|
|
|
|
- if ( Number.isInteger( data.background ) ) {
|
|
|
+ object = new Scene();
|
|
|
|
|
|
- object.background = new Color( data.background );
|
|
|
+ if ( data.background !== undefined ) {
|
|
|
|
|
|
- }
|
|
|
+ if ( Number.isInteger( data.background ) ) {
|
|
|
+
|
|
|
+ object.background = new Color( data.background );
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( data.fog !== undefined ) {
|
|
|
+ }
|
|
|
|
|
|
- if ( data.fog.type === 'Fog' ) {
|
|
|
+ if ( data.fog !== undefined ) {
|
|
|
|
|
|
- object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );
|
|
|
+ if ( data.fog.type === 'Fog' ) {
|
|
|
|
|
|
- } else if ( data.fog.type === 'FogExp2' ) {
|
|
|
+ object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );
|
|
|
|
|
|
- object.fog = new FogExp2( data.fog.color, data.fog.density );
|
|
|
+ } else if ( data.fog.type === 'FogExp2' ) {
|
|
|
|
|
|
- }
|
|
|
+ object.fog = new FogExp2( data.fog.color, data.fog.density );
|
|
|
|
|
|
}
|
|
|
|
|
|
- break;
|
|
|
+ }
|
|
|
|
|
|
- case 'PerspectiveCamera':
|
|
|
+ break;
|
|
|
|
|
|
- object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
|
|
|
+ case 'PerspectiveCamera':
|
|
|
|
|
|
- if ( data.focus !== undefined ) object.focus = data.focus;
|
|
|
- if ( data.zoom !== undefined ) object.zoom = data.zoom;
|
|
|
- if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;
|
|
|
- if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;
|
|
|
- if ( data.view !== undefined ) object.view = Object.assign( {}, data.view );
|
|
|
+ object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
|
|
|
|
|
|
- break;
|
|
|
+ if ( data.focus !== undefined ) object.focus = data.focus;
|
|
|
+ if ( data.zoom !== undefined ) object.zoom = data.zoom;
|
|
|
+ if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;
|
|
|
+ if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;
|
|
|
+ if ( data.view !== undefined ) object.view = Object.assign( {}, data.view );
|
|
|
|
|
|
- case 'OrthographicCamera':
|
|
|
+ break;
|
|
|
|
|
|
- object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
|
|
|
+ case 'OrthographicCamera':
|
|
|
|
|
|
- break;
|
|
|
+ object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
|
|
|
|
|
|
- case 'AmbientLight':
|
|
|
+ break;
|
|
|
|
|
|
- object = new AmbientLight( data.color, data.intensity );
|
|
|
+ case 'AmbientLight':
|
|
|
|
|
|
- break;
|
|
|
+ object = new AmbientLight( data.color, data.intensity );
|
|
|
|
|
|
- case 'DirectionalLight':
|
|
|
+ break;
|
|
|
|
|
|
- object = new DirectionalLight( data.color, data.intensity );
|
|
|
+ case 'DirectionalLight':
|
|
|
|
|
|
- break;
|
|
|
+ object = new DirectionalLight( data.color, data.intensity );
|
|
|
|
|
|
- case 'PointLight':
|
|
|
+ break;
|
|
|
|
|
|
- object = new PointLight( data.color, data.intensity, data.distance, data.decay );
|
|
|
+ case 'PointLight':
|
|
|
|
|
|
- break;
|
|
|
+ object = new PointLight( data.color, data.intensity, data.distance, data.decay );
|
|
|
|
|
|
- case 'RectAreaLight':
|
|
|
+ break;
|
|
|
|
|
|
- object = new RectAreaLight( data.color, data.intensity, data.width, data.height );
|
|
|
+ case 'RectAreaLight':
|
|
|
|
|
|
- break;
|
|
|
+ object = new RectAreaLight( data.color, data.intensity, data.width, data.height );
|
|
|
|
|
|
- case 'SpotLight':
|
|
|
+ break;
|
|
|
|
|
|
- object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );
|
|
|
+ case 'SpotLight':
|
|
|
|
|
|
- break;
|
|
|
+ object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );
|
|
|
|
|
|
- case 'HemisphereLight':
|
|
|
+ break;
|
|
|
|
|
|
- object = new HemisphereLight( data.color, data.groundColor, data.intensity );
|
|
|
+ case 'HemisphereLight':
|
|
|
|
|
|
- break;
|
|
|
+ object = new HemisphereLight( data.color, data.groundColor, data.intensity );
|
|
|
|
|
|
- case 'SkinnedMesh':
|
|
|
+ break;
|
|
|
|
|
|
- console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );
|
|
|
+ case 'SkinnedMesh':
|
|
|
|
|
|
- case 'Mesh':
|
|
|
+ console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );
|
|
|
|
|
|
- var geometry = getGeometry( data.geometry );
|
|
|
- var material = getMaterial( data.material );
|
|
|
+ case 'Mesh':
|
|
|
|
|
|
- if ( geometry.bones && geometry.bones.length > 0 ) {
|
|
|
+ var geometry = getGeometry( data.geometry );
|
|
|
+ var material = getMaterial( data.material );
|
|
|
|
|
|
- object = new SkinnedMesh( geometry, material );
|
|
|
+ if ( geometry.bones && geometry.bones.length > 0 ) {
|
|
|
|
|
|
- } else {
|
|
|
+ object = new SkinnedMesh( geometry, material );
|
|
|
|
|
|
- object = new Mesh( geometry, material );
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
+ object = new Mesh( geometry, material );
|
|
|
|
|
|
- break;
|
|
|
+ }
|
|
|
|
|
|
- case 'LOD':
|
|
|
+ break;
|
|
|
|
|
|
- object = new LOD();
|
|
|
+ case 'LOD':
|
|
|
|
|
|
- break;
|
|
|
+ object = new LOD();
|
|
|
|
|
|
- case 'Line':
|
|
|
+ break;
|
|
|
|
|
|
- object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );
|
|
|
+ case 'Line':
|
|
|
|
|
|
- break;
|
|
|
+ object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );
|
|
|
|
|
|
- case 'LineLoop':
|
|
|
+ break;
|
|
|
|
|
|
- object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );
|
|
|
+ case 'LineLoop':
|
|
|
|
|
|
- break;
|
|
|
+ object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );
|
|
|
|
|
|
- case 'LineSegments':
|
|
|
+ break;
|
|
|
|
|
|
- object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );
|
|
|
+ case 'LineSegments':
|
|
|
|
|
|
- break;
|
|
|
+ object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );
|
|
|
|
|
|
- case 'PointCloud':
|
|
|
- case 'Points':
|
|
|
+ break;
|
|
|
|
|
|
- object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );
|
|
|
+ case 'PointCloud':
|
|
|
+ case 'Points':
|
|
|
|
|
|
- break;
|
|
|
+ object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );
|
|
|
|
|
|
- case 'Sprite':
|
|
|
+ break;
|
|
|
|
|
|
- object = new Sprite( getMaterial( data.material ) );
|
|
|
+ case 'Sprite':
|
|
|
|
|
|
- break;
|
|
|
+ object = new Sprite( getMaterial( data.material ) );
|
|
|
|
|
|
- case 'Group':
|
|
|
+ break;
|
|
|
|
|
|
- object = new Group();
|
|
|
+ case 'Group':
|
|
|
|
|
|
- break;
|
|
|
+ object = new Group();
|
|
|
|
|
|
- default:
|
|
|
+ break;
|
|
|
|
|
|
- object = new Object3D();
|
|
|
+ default:
|
|
|
|
|
|
- }
|
|
|
+ object = new Object3D();
|
|
|
|
|
|
- object.uuid = data.uuid;
|
|
|
+ }
|
|
|
|
|
|
- if ( data.name !== undefined ) object.name = data.name;
|
|
|
- if ( data.matrix !== undefined ) {
|
|
|
+ object.uuid = data.uuid;
|
|
|
|
|
|
- matrix.fromArray( data.matrix );
|
|
|
- matrix.decompose( object.position, object.quaternion, object.scale );
|
|
|
+ if ( data.name !== undefined ) object.name = data.name;
|
|
|
+ if ( data.matrix !== undefined ) {
|
|
|
|
|
|
- } else {
|
|
|
+ object.matrix.fromArray( data.matrix );
|
|
|
+ object.matrix.decompose( object.position, object.quaternion, object.scale );
|
|
|
|
|
|
- if ( data.position !== undefined ) object.position.fromArray( data.position );
|
|
|
- if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );
|
|
|
- if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );
|
|
|
- if ( data.scale !== undefined ) object.scale.fromArray( data.scale );
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
+ if ( data.position !== undefined ) object.position.fromArray( data.position );
|
|
|
+ if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );
|
|
|
+ if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );
|
|
|
+ if ( data.scale !== undefined ) object.scale.fromArray( data.scale );
|
|
|
|
|
|
- if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
|
|
|
- if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;
|
|
|
+ }
|
|
|
|
|
|
- if ( data.shadow ) {
|
|
|
+ if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
|
|
|
+ if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;
|
|
|
|
|
|
- if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;
|
|
|
- if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;
|
|
|
- if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );
|
|
|
- if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );
|
|
|
+ if ( data.shadow ) {
|
|
|
|
|
|
- }
|
|
|
+ if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;
|
|
|
+ if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;
|
|
|
+ if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );
|
|
|
+ if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );
|
|
|
|
|
|
- if ( data.visible !== undefined ) object.visible = data.visible;
|
|
|
- if ( data.userData !== undefined ) object.userData = data.userData;
|
|
|
+ }
|
|
|
|
|
|
- if ( data.children !== undefined ) {
|
|
|
+ if ( data.visible !== undefined ) object.visible = data.visible;
|
|
|
+ if ( data.userData !== undefined ) object.userData = data.userData;
|
|
|
|
|
|
- var children = data.children;
|
|
|
+ if ( data.children !== undefined ) {
|
|
|
|
|
|
- for ( var i = 0; i < children.length; i ++ ) {
|
|
|
+ var children = data.children;
|
|
|
|
|
|
- object.add( this.parseObject( children[ i ], geometries, materials ) );
|
|
|
+ for ( var i = 0; i < children.length; i ++ ) {
|
|
|
|
|
|
- }
|
|
|
+ object.add( this.parseObject( children[ i ], geometries, materials ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( data.type === 'LOD' ) {
|
|
|
+ }
|
|
|
|
|
|
- var levels = data.levels;
|
|
|
+ if ( data.type === 'LOD' ) {
|
|
|
|
|
|
- for ( var l = 0; l < levels.length; l ++ ) {
|
|
|
+ var levels = data.levels;
|
|
|
|
|
|
- var level = levels[ l ];
|
|
|
- var child = object.getObjectByProperty( 'uuid', level.object );
|
|
|
+ for ( var l = 0; l < levels.length; l ++ ) {
|
|
|
|
|
|
- if ( child !== undefined ) {
|
|
|
+ var level = levels[ l ];
|
|
|
+ var child = object.getObjectByProperty( 'uuid', level.object );
|
|
|
|
|
|
- object.addLevel( child, level.distance );
|
|
|
+ if ( child !== undefined ) {
|
|
|
|
|
|
- }
|
|
|
+ object.addLevel( child, level.distance );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- return object;
|
|
|
+ }
|
|
|
|
|
|
- };
|
|
|
+ return object;
|
|
|
|
|
|
- }()
|
|
|
+ }
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -45213,13 +45195,13 @@ Object.defineProperties( WebGLRenderer.prototype, {
|
|
|
shadowMapCullFace: {
|
|
|
get: function () {
|
|
|
|
|
|
- return this.shadowMap.cullFace;
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );
|
|
|
+ return undefined;
|
|
|
|
|
|
},
|
|
|
set: function ( value ) {
|
|
|
|
|
|
- console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' );
|
|
|
- this.shadowMap.cullFace = value;
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );
|
|
|
|
|
|
}
|
|
|
}
|
|
@@ -45230,14 +45212,39 @@ Object.defineProperties( WebGLShadowMap.prototype, {
|
|
|
cullFace: {
|
|
|
get: function () {
|
|
|
|
|
|
- return this.renderReverseSided ? CullFaceFront : CullFaceBack;
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );
|
|
|
+ return undefined;
|
|
|
|
|
|
},
|
|
|
set: function ( cullFace ) {
|
|
|
|
|
|
- var value = ( cullFace !== CullFaceBack );
|
|
|
- console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to " + value + "." );
|
|
|
- this.renderReverseSided = value;
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ renderReverseSided: {
|
|
|
+ get: function () {
|
|
|
+
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );
|
|
|
+ return undefined;
|
|
|
+
|
|
|
+ },
|
|
|
+ set: function () {
|
|
|
+
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ renderSingleSided: {
|
|
|
+ get: function () {
|
|
|
+
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );
|
|
|
+ return undefined;
|
|
|
+
|
|
|
+ },
|
|
|
+ set: function () {
|
|
|
+
|
|
|
+ console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );
|
|
|
|
|
|
}
|
|
|
}
|