Loader.js 14.6 KB
Newer Older
M
Mr.doob 已提交
1 2 3 4
/**
 * @author mrdoob / http://mrdoob.com/
 */

5
var Loader = function ( editor ) {
6

7 8
	var scope = this;
	var signals = editor.signals;
9

10 11
	this.texturePath = '';

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
	this.loadFiles = function ( files ) {

		if ( files.length > 0 ) {

			var filesMap = createFileMap( files );

			var manager = new THREE.LoadingManager();
			manager.setURLModifier( function ( url ) {

				var file = filesMap[ url ];

				if ( file ) {

					console.log( 'Loading', url );

					return URL.createObjectURL( file );

				}

				return url;

			} );

			for ( var i = 0; i < files.length; i ++ ) {

T
Temdog007 已提交
37
				scope.loadFile( files[ i ], manager );
38 39 40 41 42 43 44 45

			}

		}

	};

	this.loadFile = function ( file, manager ) {
46 47 48

		var filename = file.name;
		var extension = filename.split( '.' ).pop().toLowerCase();
49

M
Mr.doob 已提交
50 51 52 53
		var reader = new FileReader();
		reader.addEventListener( 'progress', function ( event ) {

			var size = '(' + Math.floor( event.total / 1000 ).format() + ' KB)';
M
Mr.doob 已提交
54
			var progress = Math.floor( ( event.loaded / event.total ) * 100 ) + '%';
55

M
Mr.doob 已提交
56 57 58 59
			console.log( 'Loading', filename, size, progress );

		} );

M
Mr.doob 已提交
60
		switch ( extension ) {
61

M
Mr.doob 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75
			case '3ds':

				reader.addEventListener( 'load', function ( event ) {

					var loader = new THREE.TDSLoader();
					var object = loader.parse( event.target.result );

					editor.execute( new AddObjectCommand( object ) );

				}, false );
				reader.readAsArrayBuffer( file );

				break;

E
Elijah Snyder 已提交
76 77 78 79 80 81 82
			case 'amf':

				reader.addEventListener( 'load', function ( event ) {

					var loader = new THREE.AMFLoader();
					var amfobject = loader.parse( event.target.result );

83
					editor.execute( new AddObjectCommand( amfobject ) );
E
Elijah Snyder 已提交
84 85 86 87 88 89

				}, false );
				reader.readAsArrayBuffer( file );

				break;

M
Mr.doob 已提交
90 91 92 93 94 95 96
			case 'awd':

				reader.addEventListener( 'load', function ( event ) {

					var loader = new THREE.AWDLoader();
					var scene = loader.parse( event.target.result );

97
					editor.execute( new SetSceneCommand( scene ) );
M
Mr.doob 已提交
98 99 100 101 102 103

				}, false );
				reader.readAsArrayBuffer( file );

				break;

104 105 106 107 108 109 110 111 112 113
			case 'babylon':

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;
					var json = JSON.parse( contents );

					var loader = new THREE.BabylonLoader();
					var scene = loader.parse( json );

114
					editor.execute( new SetSceneCommand( scene ) );
115 116 117 118 119 120

				}, false );
				reader.readAsText( file );

				break;

121 122 123 124 125 126 127 128 129 130
			case 'babylonmeshdata':

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;
					var json = JSON.parse( contents );

					var loader = new THREE.BabylonLoader();

					var geometry = loader.parseGeometry( json );
M
Mr.doob 已提交
131
					var material = new THREE.MeshStandardMaterial();
132 133 134 135

					var mesh = new THREE.Mesh( geometry, material );
					mesh.name = filename;

136
					editor.execute( new AddObjectCommand( mesh ) );
137 138 139 140 141 142

				}, false );
				reader.readAsText( file );

				break;

M
Mr.doob 已提交
143
			case 'ctm':
144

M
Mr.doob 已提交
145
				reader.addEventListener( 'load', function ( event ) {
146

M
Mr.doob 已提交
147
					var data = new Uint8Array( event.target.result );
148

M
Mr.doob 已提交
149
					var stream = new CTM.Stream( data );
M
Mr.doob 已提交
150
					stream.offset = 0;
151

M
Mr.doob 已提交
152
					var loader = new THREE.CTMLoader();
T
Temdog007 已提交
153
					loader.createModel( new CTM.File( stream ), function ( geometry ) {
154

M
Mr.doob 已提交
155 156
						geometry.sourceType = "ctm";
						geometry.sourceFile = file.name;
157

M
Mr.doob 已提交
158
						var material = new THREE.MeshStandardMaterial();
159

M
Mr.doob 已提交
160 161
						var mesh = new THREE.Mesh( geometry, material );
						mesh.name = filename;
162

163
						editor.execute( new AddObjectCommand( mesh ) );
164

M
Mr.doob 已提交
165
					} );
166

M
Mr.doob 已提交
167
				}, false );
M
Mr.doob 已提交
168
				reader.readAsArrayBuffer( file );
169

M
Mr.doob 已提交
170
				break;
171

M
Mr.doob 已提交
172
			case 'dae':
173

M
Mr.doob 已提交
174
				reader.addEventListener( 'load', function ( event ) {
175

M
Mr.doob 已提交
176
					var contents = event.target.result;
177

178
					var loader = new THREE.ColladaLoader( manager );
M
Mr.doob 已提交
179
					var collada = loader.parse( contents );
180

M
Mr.doob 已提交
181
					collada.scene.name = filename;
182

183
					editor.addAnimation( collada.scene, collada.animations );
184
					editor.execute( new AddObjectCommand( collada.scene ) );
185

M
Mr.doob 已提交
186 187
				}, false );
				reader.readAsText( file );
188

M
Mr.doob 已提交
189
				break;
190

M
Mr.doob 已提交
191 192 193 194 195 196
			case 'fbx':

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;

197
					var loader = new THREE.FBXLoader( manager );
M
Mr.doob 已提交
198 199
					var object = loader.parse( contents );

200
					editor.addAnimation( object, object.animations );
M
Mr.doob 已提交
201 202 203
					editor.execute( new AddObjectCommand( object ) );

				}, false );
M
Mr.doob 已提交
204
				reader.readAsArrayBuffer( file );
M
Mr.doob 已提交
205 206 207

				break;

M
Mr.doob 已提交
208
			case 'glb':
M
Mr.doob 已提交
209 210 211 212 213

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;

214 215
					THREE.DRACOLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );

M
Mr.doob 已提交
216
					var loader = new THREE.GLTFLoader();
217
					loader.setDRACOLoader( new THREE.DRACOLoader() );
M
Mr.doob 已提交
218 219
					loader.parse( contents, '', function ( result ) {

T
Temdog007 已提交
220 221
						var scene = result.scene;
						scene.name = filename;
M
Mr.doob 已提交
222

T
Temdog007 已提交
223 224
						editor.addAnimation( scene, result.animations );
						editor.execute( new AddObjectCommand( scene ) );
M
Mr.doob 已提交
225 226 227 228 229 230 231 232

					} );

				}, false );
				reader.readAsArrayBuffer( file );

				break;

M
Mr.doob 已提交
233
			case 'gltf':
234

M
Mr.doob 已提交
235
				reader.addEventListener( 'load', function ( event ) {
236

M
Mr.doob 已提交
237
					var contents = event.target.result;
M
Mr.doob 已提交
238

239 240
					var loader;

M
Mr.doob 已提交
241
					if ( isGLTF1( contents ) ) {
242

M
Mr.doob 已提交
243
						loader = new THREE.LegacyGLTFLoader( manager );
244 245 246

					} else {

247
						loader = new THREE.GLTFLoader( manager );
248 249

					}
250

251
					loader.parse( contents, '', function ( result ) {
252

T
Temdog007 已提交
253 254
						var scene = result.scene;
						scene.name = filename;
M
Mr.doob 已提交
255

T
Temdog007 已提交
256 257
						editor.addAnimation( scene, result.animations );
						editor.execute( new AddObjectCommand( scene ) );
258

M
Mr.doob 已提交
259
					} );
260

M
Mr.doob 已提交
261
				}, false );
M
Mr.doob 已提交
262
				reader.readAsArrayBuffer( file );
263

M
Mr.doob 已提交
264
				break;
265

M
Mr.doob 已提交
266 267
			case 'js':
			case 'json':
M
Mr.doob 已提交
268

269 270 271
			case '3geo':
			case '3mat':
			case '3obj':
M
Mr.doob 已提交
272
			case '3scn':
273

M
Mr.doob 已提交
274
				reader.addEventListener( 'load', function ( event ) {
275

M
Mr.doob 已提交
276
					var contents = event.target.result;
277

M
Mr.doob 已提交
278
					// 2.0
279

M
Mr.doob 已提交
280
					if ( contents.indexOf( 'postMessage' ) !== - 1 ) {
281

M
Mr.doob 已提交
282 283
						var blob = new Blob( [ contents ], { type: 'text/javascript' } );
						var url = URL.createObjectURL( blob );
284

M
Mr.doob 已提交
285
						var worker = new Worker( url );
286

M
Mr.doob 已提交
287
						worker.onmessage = function ( event ) {
288

M
Mr.doob 已提交
289
							event.data.metadata = { version: 2 };
M
Mr.doob 已提交
290
							handleJSON( event.data, file, filename );
291

M
Mr.doob 已提交
292
						};
293

M
Mr.doob 已提交
294
						worker.postMessage( Date.now() );
295

M
Mr.doob 已提交
296
						return;
297

M
Mr.doob 已提交
298
					}
299

M
Mr.doob 已提交
300
					// >= 3.0
301

M
Mr.doob 已提交
302
					var data;
303

M
Mr.doob 已提交
304
					try {
305

M
Mr.doob 已提交
306
						data = JSON.parse( contents );
307

M
Mr.doob 已提交
308
					} catch ( error ) {
309

M
Mr.doob 已提交
310 311
						alert( error );
						return;
312

M
Mr.doob 已提交
313
					}
314

M
Mr.doob 已提交
315
					handleJSON( data, file, filename );
316

M
Mr.doob 已提交
317 318
				}, false );
				reader.readAsText( file );
319

M
Mr.doob 已提交
320
				break;
321

M
Mr.doob 已提交
322

M
Mr.doob 已提交
323
			case 'kmz':
M
Mr.doob 已提交
324

M
Mr.doob 已提交
325
				reader.addEventListener( 'load', function ( event ) {
M
Mr.doob 已提交
326

M
Mr.doob 已提交
327 328
					var loader = new THREE.KMZLoader();
					var collada = loader.parse( event.target.result );
M
Mr.doob 已提交
329

M
Mr.doob 已提交
330
					collada.scene.name = filename;
M
Mr.doob 已提交
331

M
Mr.doob 已提交
332
					editor.execute( new AddObjectCommand( collada.scene ) );
M
Mr.doob 已提交
333

M
Mr.doob 已提交
334 335
				}, false );
				reader.readAsArrayBuffer( file );
M
Mr.doob 已提交
336

M
Mr.doob 已提交
337
				break;
M
Mr.doob 已提交
338

M
Mr.doob 已提交
339
			case 'md2':
M
Mr.doob 已提交
340

M
Mr.doob 已提交
341
				reader.addEventListener( 'load', function ( event ) {
M
Mr.doob 已提交
342

M
Mr.doob 已提交
343
					var contents = event.target.result;
M
Mr.doob 已提交
344

M
Mr.doob 已提交
345 346 347 348 349
					var geometry = new THREE.MD2Loader().parse( contents );
					var material = new THREE.MeshStandardMaterial( {
						morphTargets: true,
						morphNormals: true
					} );
M
Mr.doob 已提交
350

M
Mr.doob 已提交
351 352 353
					var mesh = new THREE.Mesh( geometry, material );
					mesh.mixer = new THREE.AnimationMixer( mesh );
					mesh.name = filename;
M
Mr.doob 已提交
354

M
Mr.doob 已提交
355
					editor.addAnimation( mesh, geometry.animations );
M
Mr.doob 已提交
356
					editor.execute( new AddObjectCommand( mesh ) );
M
Mr.doob 已提交
357

M
Mr.doob 已提交
358 359
				}, false );
				reader.readAsArrayBuffer( file );
M
Mr.doob 已提交
360

M
Mr.doob 已提交
361
				break;
M
Mr.doob 已提交
362

M
Mr.doob 已提交
363
			case 'obj':
364

M
Mr.doob 已提交
365
				reader.addEventListener( 'load', function ( event ) {
366

M
Mr.doob 已提交
367
					var contents = event.target.result;
368

M
Mr.doob 已提交
369 370
					var object = new THREE.OBJLoader().parse( contents );
					object.name = filename;
371

372
					editor.execute( new AddObjectCommand( object ) );
373

M
Mr.doob 已提交
374 375
				}, false );
				reader.readAsText( file );
376

M
Mr.doob 已提交
377
				break;
378

M
Mr.doob 已提交
379 380 381 382 383 384 385 386 387 388
			case 'playcanvas':

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;
					var json = JSON.parse( contents );

					var loader = new THREE.PlayCanvasLoader();
					var object = loader.parse( json );

389
					editor.execute( new AddObjectCommand( object ) );
M
Mr.doob 已提交
390 391 392 393 394 395

				}, false );
				reader.readAsText( file );

				break;

M
Mr.doob 已提交
396
			case 'ply':
397

M
Mr.doob 已提交
398
				reader.addEventListener( 'load', function ( event ) {
399

M
Mr.doob 已提交
400
					var contents = event.target.result;
401

M
Mr.doob 已提交
402 403 404
					var geometry = new THREE.PLYLoader().parse( contents );
					geometry.sourceType = "ply";
					geometry.sourceFile = file.name;
405

M
Mr.doob 已提交
406
					var material = new THREE.MeshStandardMaterial();
407

M
Mr.doob 已提交
408 409
					var mesh = new THREE.Mesh( geometry, material );
					mesh.name = filename;
410

411
					editor.execute( new AddObjectCommand( mesh ) );
412

M
Mr.doob 已提交
413
				}, false );
M
Mr.doob 已提交
414
				reader.readAsArrayBuffer( file );
415

M
Mr.doob 已提交
416
				break;
417

M
Mr.doob 已提交
418
			case 'stl':
419

M
Mr.doob 已提交
420
				reader.addEventListener( 'load', function ( event ) {
421

M
Mr.doob 已提交
422
					var contents = event.target.result;
423

M
Mr.doob 已提交
424 425 426
					var geometry = new THREE.STLLoader().parse( contents );
					geometry.sourceType = "stl";
					geometry.sourceFile = file.name;
427

M
Mr.doob 已提交
428
					var material = new THREE.MeshStandardMaterial();
429

M
Mr.doob 已提交
430 431
					var mesh = new THREE.Mesh( geometry, material );
					mesh.name = filename;
432

433
					editor.execute( new AddObjectCommand( mesh ) );
434

M
Mr.doob 已提交
435
				}, false );
436

M
Mr.doob 已提交
437
				if ( reader.readAsBinaryString !== undefined ) {
438

M
Mr.doob 已提交
439
					reader.readAsBinaryString( file );
440

M
Mr.doob 已提交
441
				} else {
442

M
Mr.doob 已提交
443
					reader.readAsArrayBuffer( file );
444

M
Mr.doob 已提交
445
				}
446

M
Mr.doob 已提交
447
				break;
448

M
Mr.doob 已提交
449 450 451 452 453 454 455
			case 'svg':

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;

					var loader = new THREE.SVGLoader();
M
Mr.doob 已提交
456
					var paths = loader.parse( contents ).paths;
M
Mr.doob 已提交
457 458 459 460 461

					//

					var group = new THREE.Group();
					group.scale.multiplyScalar( 0.1 );
T
Temdog007 已提交
462
					group.scale.y *= - 1;
M
Mr.doob 已提交
463 464 465 466 467 468

					for ( var i = 0; i < paths.length; i ++ ) {

						var path = paths[ i ];

						var material = new THREE.MeshBasicMaterial( {
M
Mr.doob 已提交
469
							color: path.color,
M
Mr.doob 已提交
470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494
							depthWrite: false
						} );

						var shapes = path.toShapes( true );

						for ( var j = 0; j < shapes.length; j ++ ) {

							var shape = shapes[ j ];

							var geometry = new THREE.ShapeBufferGeometry( shape );
							var mesh = new THREE.Mesh( geometry, material );

							group.add( mesh );

						}

					}

					editor.execute( new AddObjectCommand( group ) );

				}, false );
				reader.readAsText( file );

				break;

M
Mr.doob 已提交
495
			case 'vtk':
496

M
Mr.doob 已提交
497
				reader.addEventListener( 'load', function ( event ) {
498

M
Mr.doob 已提交
499
					var contents = event.target.result;
500

M
Mr.doob 已提交
501 502 503
					var geometry = new THREE.VTKLoader().parse( contents );
					geometry.sourceType = "vtk";
					geometry.sourceFile = file.name;
504

M
Mr.doob 已提交
505
					var material = new THREE.MeshStandardMaterial();
506

M
Mr.doob 已提交
507 508
					var mesh = new THREE.Mesh( geometry, material );
					mesh.name = filename;
509

510
					editor.execute( new AddObjectCommand( mesh ) );
M
Mr.doob 已提交
511 512 513 514 515 516 517 518 519 520 521 522 523 524

				}, false );
				reader.readAsText( file );

				break;

			case 'wrl':

				reader.addEventListener( 'load', function ( event ) {

					var contents = event.target.result;

					var result = new THREE.VRMLLoader().parse( contents );

525
					editor.execute( new SetSceneCommand( result ) );
526

M
Mr.doob 已提交
527 528 529 530 531
				}, false );
				reader.readAsText( file );

				break;

M
Mr.doob 已提交
532 533 534 535
			case 'zip':

				reader.addEventListener( 'load', function ( event ) {

M
Mr.doob 已提交
536
					handleZIP( event.target.result );
M
Mr.doob 已提交
537

M
Mr.doob 已提交
538 539 540 541 542
				}, false );
				reader.readAsBinaryString( file );

				break;

543 544
			default:

545
				// alert( 'Unsupported file format (' + extension +  ').' );
546 547 548

				break;

M
Mr.doob 已提交
549 550
		}

551
	};
M
Mr.doob 已提交
552

M
Mr.doob 已提交
553
	function handleJSON( data, file, filename ) {
M
Mr.doob 已提交
554 555 556

		if ( data.metadata === undefined ) { // 2.0

557
			data.metadata = { type: 'Geometry' };
M
Mr.doob 已提交
558 559 560 561 562

		}

		if ( data.metadata.type === undefined ) { // 3.0

563
			data.metadata.type = 'Geometry';
M
Mr.doob 已提交
564 565 566

		}

M
Mr.doob 已提交
567
		if ( data.metadata.formatVersion !== undefined ) {
M
Mr.doob 已提交
568 569 570 571 572

			data.metadata.version = data.metadata.formatVersion;

		}

M
Mr.doob 已提交
573
		switch ( data.metadata.type.toLowerCase() ) {
574

M
Mr.doob 已提交
575
			case 'buffergeometry':
576

M
Mr.doob 已提交
577 578
				var loader = new THREE.BufferGeometryLoader();
				var result = loader.parse( data );
579

M
Mr.doob 已提交
580
				var mesh = new THREE.Mesh( result );
581

M
Mr.doob 已提交
582
				editor.execute( new AddObjectCommand( mesh ) );
M
Mr.doob 已提交
583

M
Mr.doob 已提交
584 585
				break;

586 587
			case 'geometry':

M
Mugen87 已提交
588
				console.error( 'Loader: "Geometry" is no longer supported.' );
589 590 591

				break;

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

M
Mr.doob 已提交
594
				var loader = new THREE.ObjectLoader();
595
				loader.setResourcePath( scope.texturePath );
M
Mr.doob 已提交
596

M
Mr.doob 已提交
597
				var result = loader.parse( data );
M
Mr.doob 已提交
598

M
Mr.doob 已提交
599
				if ( result.isScene ) {
600

M
Mr.doob 已提交
601
					editor.execute( new SetSceneCommand( result ) );
M
Mr.doob 已提交
602

M
Mr.doob 已提交
603
				} else {
M
Mr.doob 已提交
604

M
Mr.doob 已提交
605
					editor.execute( new AddObjectCommand( result ) );
M
Mr.doob 已提交
606

M
Mr.doob 已提交
607
				}
M
Mr.doob 已提交
608

M
Mr.doob 已提交
609
				break;
M
Mr.doob 已提交
610

M
Mr.doob 已提交
611 612
			case 'app':

M
Mr.doob 已提交
613
				editor.fromJSON( data );
M
Mr.doob 已提交
614 615 616

				break;

M
Mr.doob 已提交
617 618
		}

M
Mr.doob 已提交
619
	}
M
Mr.doob 已提交
620

621 622 623 624 625 626 627 628 629 630 631 632 633 634 635
	function createFileMap( files ) {

		var map = {};

		for ( var i = 0; i < files.length; i ++ ) {

			var file = files[ i ];
			map[ file.name ] = file;

		}

		return map;

	}

M
Mr.doob 已提交
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653
	function handleZIP( contents ) {

		var zip = new JSZip( contents );

		// Poly

		if ( zip.files[ 'model.obj' ] && zip.files[ 'materials.mtl' ] ) {

			var materials = new THREE.MTLLoader().parse( zip.file( 'materials.mtl' ).asText() );
			var object = new THREE.OBJLoader().setMaterials( materials ).parse( zip.file( 'model.obj' ).asText() );
			editor.execute( new AddObjectCommand( object ) );

		}

		//

		zip.filter( function ( path, file ) {

M
Mr.doob 已提交
654 655
			var manager = new THREE.LoadingManager();
			manager.setURLModifier( function ( url ) {
M
Mr.doob 已提交
656

M
Mr.doob 已提交
657
				var file = zip.files[ url ];
M
Mr.doob 已提交
658

M
Mr.doob 已提交
659
				if ( file ) {
M
Mr.doob 已提交
660

661 662
					console.log( 'Loading', url );

M
Mr.doob 已提交
663 664
					var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-stream' } );
					return URL.createObjectURL( blob );
M
Mr.doob 已提交
665

M
Mr.doob 已提交
666
				}
M
Mr.doob 已提交
667

668 669
				return url;

M
Mr.doob 已提交
670
			} );
M
Mr.doob 已提交
671

M
Mr.doob 已提交
672
			var extension = file.name.split( '.' ).pop().toLowerCase();
M
Mr.doob 已提交
673

M
Mr.doob 已提交
674
			switch ( extension ) {
M
Mr.doob 已提交
675

M
Mr.doob 已提交
676
				case 'fbx':
M
Mr.doob 已提交
677 678 679 680 681 682 683 684 685 686 687 688 689

					var loader = new THREE.FBXLoader( manager );
					var object = loader.parse( file.asArrayBuffer() );

					editor.execute( new AddObjectCommand( object ) );

					break;

				case 'glb':

					var loader = new THREE.GLTFLoader();
					loader.parse( file.asArrayBuffer(), '', function ( result ) {

T
Temdog007 已提交
690
						var scene = result.scene;
M
Mr.doob 已提交
691

T
Temdog007 已提交
692 693
						editor.addAnimation( scene, result.animations );
						editor.execute( new AddObjectCommand( scene ) );
M
Mr.doob 已提交
694 695 696 697 698 699 700 701 702 703

					} );

					break;

				case 'gltf':

					var loader = new THREE.GLTFLoader( manager );
					loader.parse( file.asText(), '', function ( result ) {

T
Temdog007 已提交
704
						var scene = result.scene;
M
Mr.doob 已提交
705

T
Temdog007 已提交
706 707
						editor.addAnimation( scene, result.animations );
						editor.execute( new AddObjectCommand( scene ) );
M
Mr.doob 已提交
708 709 710 711 712 713 714 715 716 717 718

					} );

					break;

			}

		} );

	}

M
Mr.doob 已提交
719
	function isGLTF1( contents ) {
720 721 722 723 724

		var resultContent;

		if ( typeof contents === 'string' ) {

725
			// contents is a JSON string
726 727 728 729 730 731 732 733
			resultContent = contents;

		} else {

			var magic = THREE.LoaderUtils.decodeText( new Uint8Array( contents, 0, 4 ) );

			if ( magic === 'glTF' ) {

734
				// contents is a .glb file; extract the version
A
Alan Millman 已提交
735
				var version = new DataView( contents ).getUint32( 4, true );
736

A
Alan Millman 已提交
737
				return version < 2;
738 739 740

			} else {

741
				// contents is a .gltf file
742 743 744 745 746 747 748 749 750 751 752 753
				resultContent = THREE.LoaderUtils.decodeText( new Uint8Array( contents ) );

			}

		}

		var json = JSON.parse( resultContent );

		return ( json.asset != undefined && json.asset.version[ 0 ] < 2 );

	}

M
Mr.doob 已提交
754
};