ObjectLoader.js 15.2 KB
Newer Older
1 2
import { TextureMapping, TextureWrapping, TextureFilter } from '../constants';
import { Color } from '../math/Color';
R
Rich Harris 已提交
3 4
import { Matrix4 } from '../math/Matrix4';
import { Object3D } from '../core/Object3D';
M
Mr.doob 已提交
5
import { Bone } from '../objects/Bone';
R
Rich Harris 已提交
6 7 8 9
import { Group } from '../objects/Group';
import { Sprite } from '../objects/Sprite';
import { Points } from '../objects/Points';
import { Line } from '../objects/Line';
10
import { LineSegments } from '../objects/LineSegments';
R
Rich Harris 已提交
11 12 13
import { LOD } from '../objects/LOD';
import { Mesh } from '../objects/Mesh';
import { SkinnedMesh } from '../objects/SkinnedMesh';
14 15
import { Fog } from '../scenes/Fog';
import { FogExp2 } from '../scenes/FogExp2';
R
Rich Harris 已提交
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
import { HemisphereLight } from '../lights/HemisphereLight';
import { SpotLight } from '../lights/SpotLight';
import { PointLight } from '../lights/PointLight';
import { DirectionalLight } from '../lights/DirectionalLight';
import { AmbientLight } from '../lights/AmbientLight';
import { OrthographicCamera } from '../cameras/OrthographicCamera';
import { PerspectiveCamera } from '../cameras/PerspectiveCamera';
import { Scene } from '../scenes/Scene';
import { Texture } from '../textures/Texture';
import { ImageLoader } from './ImageLoader';
import { LoadingManager, DefaultLoadingManager } from './LoadingManager';
import { AnimationClip } from '../animation/AnimationClip';
import { MaterialLoader } from './MaterialLoader';
import { BufferGeometryLoader } from './BufferGeometryLoader';
import { JSONLoader } from './JSONLoader';
M
Mr.doob 已提交
31
import { FileLoader } from './FileLoader';
32
import * as Geometries from '../geometries/Geometries';
R
Rich Harris 已提交
33

M
Mr.doob 已提交
34 35 36 37
/**
 * @author mrdoob / http://mrdoob.com/
 */

38
function ObjectLoader ( manager ) {
39

R
Rich Harris 已提交
40
	this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
M
mese79 已提交
41
	this.texturePath = '';
42

43
}
M
Mr.doob 已提交
44

R
Rich Harris 已提交
45
Object.assign( ObjectLoader.prototype, {
M
Mr.doob 已提交
46

47
	load: function ( url, onLoad, onProgress, onError ) {
M
Mr.doob 已提交
48

M
Mr.doob 已提交
49
		if ( this.texturePath === '' ) {
M
Mr.doob 已提交
50

M
Mr.doob 已提交
51
			this.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );
M
Mr.doob 已提交
52

M
Mr.doob 已提交
53
		}
M
Mr.doob 已提交
54

M
Mr.doob 已提交
55
		var scope = this;
M
Mr.doob 已提交
56

M
Mr.doob 已提交
57
		var loader = new FileLoader( scope.manager );
M
Mr.doob 已提交
58
		loader.load( url, function ( text ) {
E
elephantatwork 已提交
59

60 61 62 63 64 65 66 67 68 69 70 71 72
			var json = null;

			try {

				json = JSON.parse( text );

			} catch ( error ) {

				console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message );
				return;

			}

73 74 75 76 77 78 79 80 81 82
			var metadata = json.metadata;

			if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {

				console.error( 'THREE.ObjectLoader: Can\'t load ' + url + '. Use THREE.JSONLoader instead.' );
				return;

			}

			scope.parse( json, onLoad );
E
elephantatwork 已提交
83

M
Mr.doob 已提交
84
		}, onProgress, onError );
85 86

	},
M
Mr.doob 已提交
87

M
Mr.doob 已提交
88
	setTexturePath: function ( value ) {
89

M
Mr.doob 已提交
90
		this.texturePath = value;
91 92 93

	},

94
	setCrossOrigin: function ( value ) {
M
Mr.doob 已提交
95

96
		this.crossOrigin = value;
M
Mr.doob 已提交
97 98 99

	},

100 101
	parse: function ( json, onLoad ) {

102
		var geometries = this.parseGeometries( json.geometries );
103

104 105 106 107 108
		var images = this.parseImages( json.images, function () {

			if ( onLoad !== undefined ) onLoad( object );

		} );
E
elephantatwork 已提交
109

110 111
		var textures  = this.parseTextures( json.textures, images );
		var materials = this.parseMaterials( json.materials, textures );
112

113
		var object = this.parseObject( json.object, geometries, materials );
114

M
Mr.doob 已提交
115
		if ( json.animations ) {
116

117
			object.animations = this.parseAnimations( json.animations );
118 119

		}
120

121 122 123 124 125
		if ( json.images === undefined || json.images.length === 0 ) {

			if ( onLoad !== undefined ) onLoad( object );

		}
M
Mr.doob 已提交
126

127
		return object;
128

129 130 131 132
	},

	parseGeometries: function ( json ) {

M
Mr.doob 已提交
133
		var geometries = {};
134 135

		if ( json !== undefined ) {
M
Mr.doob 已提交
136

R
Rich Harris 已提交
137 138
			var geometryLoader = new JSONLoader();
			var bufferGeometryLoader = new BufferGeometryLoader();
M
Mr.doob 已提交
139

M
Mr.doob 已提交
140
			for ( var i = 0, l = json.length; i < l; i ++ ) {
141

142
				var geometry;
M
Mr.doob 已提交
143
				var data = json[ i ];
144

145
				switch ( data.type ) {
146

147
					case 'PlaneGeometry':
148
					case 'PlaneBufferGeometry':
149

M
Mr.doob 已提交
150
						geometry = new Geometries[ data.type ](
151 152 153 154 155
							data.width,
							data.height,
							data.widthSegments,
							data.heightSegments
						);
156

157
						break;
158

M
Mr.doob 已提交
159
					case 'BoxGeometry':
M
Mugen87 已提交
160
					case 'BoxBufferGeometry':
161
					case 'CubeGeometry': // backwards compatible
162

M
Mr.doob 已提交
163
						geometry = new Geometries[ data.type ](
164 165 166 167 168 169 170
							data.width,
							data.height,
							data.depth,
							data.widthSegments,
							data.heightSegments,
							data.depthSegments
						);
171

172
						break;
173

M
Mr.doob 已提交
174
					case 'CircleGeometry':
M
Mugen87 已提交
175
					case 'CircleBufferGeometry':
M
Mr.doob 已提交
176

M
Mr.doob 已提交
177
						geometry = new Geometries[ data.type ](
M
Mr.doob 已提交
178
							data.radius,
D
dubejf 已提交
179 180 181
							data.segments,
							data.thetaStart,
							data.thetaLength
M
Mr.doob 已提交
182 183 184 185
						);

						break;

186
					case 'CylinderGeometry':
M
Mugen87 已提交
187
					case 'CylinderBufferGeometry':
188

M
Mr.doob 已提交
189
						geometry = new Geometries[ data.type ](
190 191 192
							data.radiusTop,
							data.radiusBottom,
							data.height,
193
							data.radialSegments,
194
							data.heightSegments,
D
dubejf 已提交
195 196 197
							data.openEnded,
							data.thetaStart,
							data.thetaLength
A
Abel Allison 已提交
198 199 200 201 202 203 204
						);

						break;

					case 'ConeGeometry':
					case 'ConeBufferGeometry':

M
Mr.doob 已提交
205
						geometry = new Geometries[ data.type ](
A
Abel Allison 已提交
206 207 208 209 210 211 212
							data.radius,
							data.height,
							data.radialSegments,
							data.heightSegments,
							data.openEnded,
							data.thetaStart,
							data.thetaLength
213
						);
214

215
						break;
216

217
					case 'SphereGeometry':
D
dubejf 已提交
218 219
					case 'SphereBufferGeometry':

M
Mr.doob 已提交
220
						geometry = new Geometries[ data.type ](
D
dubejf 已提交
221 222 223 224 225 226 227 228 229 230 231 232
							data.radius,
							data.widthSegments,
							data.heightSegments,
							data.phiStart,
							data.phiLength,
							data.thetaStart,
							data.thetaLength
						);

						break;

					case 'DodecahedronGeometry':
233
					case 'IcosahedronGeometry':
D
dubejf 已提交
234 235 236
					case 'OctahedronGeometry':
					case 'TetrahedronGeometry':

M
Mr.doob 已提交
237
						geometry = new Geometries[ data.type ](
D
dubejf 已提交
238 239 240 241 242 243 244
							data.radius,
							data.detail
						);

						break;

					case 'RingGeometry':
M
Mugen87 已提交
245
					case 'RingBufferGeometry':
D
dubejf 已提交
246

M
Mr.doob 已提交
247
						geometry = new Geometries[ data.type ](
D
dubejf 已提交
248 249 250 251 252 253 254 255 256 257
							data.innerRadius,
							data.outerRadius,
							data.thetaSegments,
							data.phiSegments,
							data.thetaStart,
							data.thetaLength
						);

						break;

258
					case 'TorusGeometry':
M
Mugen87 已提交
259
					case 'TorusBufferGeometry':
260

M
Mr.doob 已提交
261
						geometry = new Geometries[ data.type ](
262 263 264 265 266 267
							data.radius,
							data.tube,
							data.radialSegments,
							data.tubularSegments,
							data.arc
						);
268

269
						break;
M
Mr.doob 已提交
270

271
					case 'TorusKnotGeometry':
272
					case 'TorusKnotBufferGeometry':
M
Mr.doob 已提交
273

M
Mr.doob 已提交
274
						geometry = new Geometries[ data.type ](
275 276 277
							data.radius,
							data.tube,
							data.tubularSegments,
M
Mugen87 已提交
278
							data.radialSegments,
279
							data.p,
280
							data.q
281
						);
M
Mr.doob 已提交
282

283
						break;
284

285
					case 'LatheGeometry':
286
					case 'LatheBufferGeometry':
287

M
Mr.doob 已提交
288
						geometry = new Geometries[ data.type ](
289 290 291
							data.points,
							data.segments,
							data.phiStart,
M
Mr.doob 已提交
292
							data.phiLength
293 294 295 296
						);

						break;

M
Mr.doob 已提交
297
					case 'BufferGeometry':
298

M
Mr.doob 已提交
299
						geometry = bufferGeometryLoader.parse( data );
300

301
						break;
E
elephantatwork 已提交
302

M
Mr.doob 已提交
303
					case 'Geometry':
304

M
Mr.doob 已提交
305
						geometry = geometryLoader.parse( data.data, this.texturePath ).geometry;
306

307
						break;
308

309 310 311 312 313 314
					default:

						console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' );

						continue;

315 316
				}

317 318
				geometry.uuid = data.uuid;

319
				if ( data.name !== undefined ) geometry.name = data.name;
M
Mr.doob 已提交
320

321
				geometries[ data.uuid ] = geometry;
322

323
			}
M
Mr.doob 已提交
324 325 326

		}

327 328 329
		return geometries;

	},
M
Mr.doob 已提交
330

331
	parseMaterials: function ( json, textures ) {
332

M
Mr.doob 已提交
333
		var materials = {};
334 335

		if ( json !== undefined ) {
336

R
Rich Harris 已提交
337
			var loader = new MaterialLoader();
338
			loader.setTextures( textures );
339

M
Mr.doob 已提交
340
			for ( var i = 0, l = json.length; i < l; i ++ ) {
341

342 343
				var material = loader.parse( json[ i ] );
				materials[ material.uuid ] = material;
344 345

			}
346 347 348

		}

349
		return materials;
M
Mr.doob 已提交
350

351
	},
M
Mr.doob 已提交
352

353 354 355 356
	parseAnimations: function ( json ) {

		var animations = [];

M
Mr.doob 已提交
357
		for ( var i = 0; i < json.length; i ++ ) {
358

R
Rich Harris 已提交
359
			var clip = AnimationClip.parse( json[ i ] );
360 361 362 363 364 365 366 367 368

			animations.push( clip );

		}

		return animations;

	},

M
Mr.doob 已提交
369
	parseImages: function ( json, onLoad ) {
370

M
Mr.doob 已提交
371
		var scope = this;
372 373
		var images = {};

M
Mr.doob 已提交
374
		function loadImage( url ) {
M
Mr.doob 已提交
375

M
Mr.doob 已提交
376
			scope.manager.itemStart( url );
377

M
Mr.doob 已提交
378
			return loader.load( url, function () {
379

M
Mr.doob 已提交
380
				scope.manager.itemEnd( url );
381

382 383 384 385
			}, undefined, function () {

				scope.manager.itemError( url );

M
Mr.doob 已提交
386
			} );
387

M
Mr.doob 已提交
388
		}
389

M
Mr.doob 已提交
390
		if ( json !== undefined && json.length > 0 ) {
391

R
Rich Harris 已提交
392
			var manager = new LoadingManager( onLoad );
M
Mr.doob 已提交
393

R
Rich Harris 已提交
394
			var loader = new ImageLoader( manager );
M
Mr.doob 已提交
395
			loader.setCrossOrigin( this.crossOrigin );
396

M
Mr.doob 已提交
397
			for ( var i = 0, l = json.length; i < l; i ++ ) {
398

399
				var image = json[ i ];
400 401 402
				var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;

				images[ image.uuid ] = loadImage( path );
403 404 405 406 407 408 409 410 411 412 413

			}

		}

		return images;

	},

	parseTextures: function ( json, images ) {

414
		function parseConstant( value, type ) {
415 416 417 418 419

			if ( typeof( value ) === 'number' ) return value;

			console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );

420
			return type[ value ];
421 422 423

		}

424 425 426 427 428 429 430 431
		var textures = {};

		if ( json !== undefined ) {

			for ( var i = 0, l = json.length; i < l; i ++ ) {

				var data = json[ i ];

M
Mr.doob 已提交
432 433
				if ( data.image === undefined ) {

D
dubejf 已提交
434
					console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid );
M
Mr.doob 已提交
435

436 437
				}

M
Mr.doob 已提交
438 439
				if ( images[ data.image ] === undefined ) {

440
					console.warn( 'THREE.ObjectLoader: Undefined image', data.image );
M
Mr.doob 已提交
441

442 443
				}

R
Rich Harris 已提交
444
				var texture = new Texture( images[ data.image ] );
445 446 447 448 449
				texture.needsUpdate = true;

				texture.uuid = data.uuid;

				if ( data.name !== undefined ) texture.name = data.name;
M
Mr.doob 已提交
450

451
				if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TextureMapping );
M
Mr.doob 已提交
452 453 454 455

				if ( data.offset !== undefined ) texture.offset.fromArray( data.offset );
				if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );
				if ( data.wrap !== undefined ) {
456

457 458
					texture.wrapS = parseConstant( data.wrap[ 0 ], TextureWrapping );
					texture.wrapT = parseConstant( data.wrap[ 1 ], TextureWrapping );
459 460 461

				}

462 463
				if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TextureFilter );
				if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TextureFilter );
M
Mr.doob 已提交
464 465
				if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;

M
Mr.doob 已提交
466 467
				if ( data.flipY !== undefined ) texture.flipY = data.flipY;

468 469 470 471 472 473 474 475 476 477
				textures[ data.uuid ] = texture;

			}

		}

		return textures;

	},

478
	parseObject: function () {
M
Mr.doob 已提交
479

R
Rich Harris 已提交
480
		var matrix = new Matrix4();
M
Mr.doob 已提交
481

W
WestLangley 已提交
482
		return function parseObject( data, geometries, materials ) {
M
Mr.doob 已提交
483

484
			var object;
M
Mr.doob 已提交
485

M
Mr.doob 已提交
486
			function getGeometry( name ) {
M
Mr.doob 已提交
487 488 489

				if ( geometries[ name ] === undefined ) {

490
					console.warn( 'THREE.ObjectLoader: Undefined geometry', name );
M
Mr.doob 已提交
491 492 493 494 495

				}

				return geometries[ name ];

M
Mr.doob 已提交
496
			}
M
Mr.doob 已提交
497

M
Mr.doob 已提交
498
			function getMaterial( name ) {
M
Mr.doob 已提交
499

500 501
				if ( name === undefined ) return undefined;

M
Mr.doob 已提交
502 503
				if ( materials[ name ] === undefined ) {

504
					console.warn( 'THREE.ObjectLoader: Undefined material', name );
M
Mr.doob 已提交
505 506 507 508 509

				}

				return materials[ name ];

M
Mr.doob 已提交
510
			}
M
Mr.doob 已提交
511

512
			switch ( data.type ) {
M
Mr.doob 已提交
513

514
				case 'Scene':
M
Mr.doob 已提交
515

R
Rich Harris 已提交
516
					object = new Scene();
M
Mr.doob 已提交
517

M
Mr.doob 已提交
518 519 520 521
					if ( data.background !== undefined ) {

						if ( Number.isInteger( data.background ) ) {

522
							object.background = new Color( data.background );
M
Mr.doob 已提交
523 524 525 526 527

						}

					}

528
					if ( data.fog !== undefined ) {
529

M
Mr.doob 已提交
530
						if ( data.fog.type === 'Fog' ) {
531

M
Mr.doob 已提交
532
							object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );
533

M
Mr.doob 已提交
534
						} else if ( data.fog.type === 'FogExp2' ) {
535

M
Mr.doob 已提交
536
							object.fog = new FogExp2( data.fog.color, data.fog.density );
537

538
						}
M
Mr.doob 已提交
539

540 541
					}

542
					break;
M
Mr.doob 已提交
543

544
				case 'PerspectiveCamera':
M
Mr.doob 已提交
545

R
Rich Harris 已提交
546
					object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
547 548 549

					if ( data.focus !== undefined ) object.focus = data.focus;
					if ( data.zoom !== undefined ) object.zoom = data.zoom;
550 551 552
					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 );
M
Mr.doob 已提交
553

554
					break;
555

556
				case 'OrthographicCamera':
M
Mr.doob 已提交
557

R
Rich Harris 已提交
558
					object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
559

560
					break;
M
Mr.doob 已提交
561

562
				case 'AmbientLight':
M
Mr.doob 已提交
563

R
Rich Harris 已提交
564
					object = new AmbientLight( data.color, data.intensity );
M
Mr.doob 已提交
565

566
					break;
M
Mr.doob 已提交
567

568
				case 'DirectionalLight':
M
Mr.doob 已提交
569

R
Rich Harris 已提交
570
					object = new DirectionalLight( data.color, data.intensity );
M
Mr.doob 已提交
571

572
					break;
M
Mr.doob 已提交
573

574
				case 'PointLight':
M
Mr.doob 已提交
575

R
Rich Harris 已提交
576
					object = new PointLight( data.color, data.intensity, data.distance, data.decay );
M
Mr.doob 已提交
577

578
					break;
M
Mr.doob 已提交
579

580
				case 'SpotLight':
M
Mr.doob 已提交
581

R
Rich Harris 已提交
582
					object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );
M
Mr.doob 已提交
583

584
					break;
M
Mr.doob 已提交
585

586
				case 'HemisphereLight':
M
Mr.doob 已提交
587

R
Rich Harris 已提交
588
					object = new HemisphereLight( data.color, data.groundColor, data.intensity );
M
Mr.doob 已提交
589

590
					break;
M
Mr.doob 已提交
591

M
Mr.doob 已提交
592
				case 'Mesh':
M
Mr.doob 已提交
593

M
Mr.doob 已提交
594 595
					var geometry = getGeometry( data.geometry );
					var material = getMaterial( data.material );
596

M
Mr.doob 已提交
597
					if ( geometry.bones && geometry.bones.length > 0 ) {
598

R
Rich Harris 已提交
599
						object = new SkinnedMesh( geometry, material );
600

M
Mr.doob 已提交
601
					} else {
602

R
Rich Harris 已提交
603
						object = new Mesh( geometry, material );
604 605

					}
M
Mr.doob 已提交
606

607
					break;
M
Mr.doob 已提交
608

609 610
				case 'LOD':

R
Rich Harris 已提交
611
					object = new LOD();
612 613 614

					break;

M
Mr.doob 已提交
615 616
				case 'Line':

R
Rich Harris 已提交
617
					object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );
M
Mr.doob 已提交
618 619

					break;
620

621 622
				case 'LineSegments':

623
					object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );
624 625 626

					break;

M
Mr.doob 已提交
627
				case 'PointCloud':
628
				case 'Points':
629

R
Rich Harris 已提交
630
					object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );
631 632

					break;
M
Mr.doob 已提交
633

M
Mr.doob 已提交
634 635
				case 'Sprite':

R
Rich Harris 已提交
636
					object = new Sprite( getMaterial( data.material ) );
M
Mr.doob 已提交
637 638 639

					break;

640 641
				case 'Group':

R
Rich Harris 已提交
642
					object = new Group();
643 644 645

					break;

646 647
				default:

R
Rich Harris 已提交
648
					object = new Object3D();
649 650 651

			}

652 653 654
			object.uuid = data.uuid;

			if ( data.name !== undefined ) object.name = data.name;
655
			if ( data.matrix !== undefined ) {
656

657 658 659 660 661 662 663
				matrix.fromArray( data.matrix );
				matrix.decompose( object.position, object.quaternion, object.scale );

			} else {

				if ( data.position !== undefined ) object.position.fromArray( data.position );
				if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );
664
				if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );
665 666 667
				if ( data.scale !== undefined ) object.scale.fromArray( data.scale );

			}
668

669 670 671
			if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
			if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;

672 673 674 675 676 677 678 679 680
			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 );

			}

681 682
			if ( data.visible !== undefined ) object.visible = data.visible;
			if ( data.userData !== undefined ) object.userData = data.userData;
683

684
			if ( data.children !== undefined ) {
M
Mr.doob 已提交
685

686
				for ( var child in data.children ) {
M
Mr.doob 已提交
687

688 689 690
					object.add( this.parseObject( data.children[ child ], geometries, materials ) );

				}
M
Mr.doob 已提交
691 692 693

			}

694 695
			if ( data.type === 'LOD' ) {

M
Mr.doob 已提交
696
				var levels = data.levels;
697

M
Mr.doob 已提交
698
				for ( var l = 0; l < levels.length; l ++ ) {
699

M
Mr.doob 已提交
700 701
					var level = levels[ l ];
					var child = object.getObjectByProperty( 'uuid', level.object );
702

M
Mr.doob 已提交
703
					if ( child !== undefined ) {
704

M
Mr.doob 已提交
705
						object.addLevel( child, level.distance );
706 707 708 709 710 711 712

					}

				}

			}

713
			return object;
M
Mr.doob 已提交
714

M
Mugen87 已提交
715
		};
M
Mr.doob 已提交
716

717
	}()
M
Mr.doob 已提交
718

M
Mr.doob 已提交
719
} );
R
Rich Harris 已提交
720 721


722
export { ObjectLoader };