Переглянути джерело

GLTFLoader: keep top-level extension data, return parser, add docs.

Don McCurdy 7 роки тому
батько
коміт
72aac21c07

+ 22 - 0
docs/examples/loaders/GLTFLoader.html

@@ -84,6 +84,28 @@
 		<a href="https://github.com/stefanpenner/es6-promise">include a polyfill</a>
 		providing a Promise replacement.</p>
 
+		<h2>Custom extensions</h2>
+
+		<p>
+			Metadata from unknown extensions is preserved as “.userData.gltfExtensions” on Object3D, Scene, and Material instances,
+			or attached to the response “gltf” object. Example:
+		</p>
+
+		<code>
+loader.load('foo.gltf', function ( gltf ) {
+
+  var scene = gltf.scene;
+
+  var mesh = scene.children[ 3 ];
+
+  var fooExtension = mesh.userData.gltfExtensions.EXT_foo;
+
+  gltf.parser.getDependency( 'bufferView', fooExtension.bufferView )
+    .then( function ( fooBuffer ) { ... } );
+
+});
+		</code>
+
 		<br>
 		<hr>
 

+ 7 - 4
examples/js/loaders/GLTFLoader.js

@@ -174,7 +174,7 @@ THREE.GLTFLoader = ( function () {
 
 			} );
 
-			parser.parse( function ( scene, scenes, cameras, animations, asset ) {
+			parser.parse( function ( scene, scenes, cameras, animations, json ) {
 
 				console.timeEnd( 'GLTFLoader' );
 
@@ -183,9 +183,13 @@ THREE.GLTFLoader = ( function () {
 					scenes: scenes,
 					cameras: cameras,
 					animations: animations,
-					asset: asset
+					asset: json.asset,
+					parser: parser,
+					userData: {}
 				};
 
+				addUnknownExtensionsToUserData( extensions, glTF, json );
+
 				onLoad( glTF );
 
 			}, onError );
@@ -1459,10 +1463,9 @@ THREE.GLTFLoader = ( function () {
 			var scenes = dependencies.scenes || [];
 			var scene = scenes[ json.scene || 0 ];
 			var animations = dependencies.animations || [];
-			var asset = json.asset;
 			var cameras = dependencies.cameras || [];
 
-			onLoad( scene, scenes, cameras, animations, asset );
+			onLoad( scene, scenes, cameras, animations, json );
 
 		} ).catch( onError );