|
@@ -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;
|
|
|
|
|
|
- }()
|
|
|
+ }
|
|
|
|
|
|
} );
|
|
|
|