瀏覽代碼

Merge pull request #13068 from WestLangley/dev-object_loader

ObjectLoader: update object matrix
Mr.doob 7 年之前
父節點
當前提交
da62daeeda
共有 1 個文件被更改,包括 138 次插入144 次删除
  1. 138 144
      src/loaders/ObjectLoader.js

+ 138 - 144
src/loaders/ObjectLoader.js

@@ -580,286 +580,280 @@ Object.assign( ObjectLoader.prototype, {
 
 	},
 
-	parseObject: function () {
+	parseObject: function ( data, geometries, materials ) {
 
-		var matrix = new Matrix4();
+		var object;
 
-		return function parseObject( data, geometries, materials ) {
+		function getGeometry( name ) {
 
-			var object;
+			if ( geometries[ name ] === undefined ) {
 
-			function getGeometry( name ) {
-
-				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;
 
-	}()
+	}
 
 } );