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

USDZLoader: Added support for parsing usda files.

Mr.doob 8 місяців тому
батько
коміт
82392f6c57
1 змінених файлів з 33 додано та 21 видалено
  1. 33 21
      examples/jsm/loaders/USDZLoader.js

+ 33 - 21
examples/jsm/loaders/USDZLoader.js

@@ -190,7 +190,7 @@ class USDZLoader extends Loader {
 	/**
 	 * Parses the given USDZ data and returns the resulting group.
 	 *
-	 * @param {ArrayBuffer} buffer - The raw USDZ data as an array buffer.
+	 * @param {ArrayBuffer|string} buffer - The raw USDZ data as an array buffer.
 	 * @return {Group} The parsed asset as a group.
 	 */
 	parse( buffer ) {
@@ -281,23 +281,6 @@ class USDZLoader extends Loader {
 
 		}
 
-		const zip = fflate.unzipSync( new Uint8Array( buffer ) );
-
-		// console.log( zip );
-
-		const assets = parseAssets( zip );
-
-		// console.log( assets )
-
-		const file = findUSD( zip );
-
-		// Parse file
-
-		const text = fflate.strFromU8( file );
-		const root = parser.parse( text );
-
-		// Build scene
-
 		function findMeshGeometry( data ) {
 
 			if ( ! data ) return undefined;
@@ -904,11 +887,40 @@ class USDZLoader extends Loader {
 
 		}
 
-		const group = new Group();
+		function buildGroup( data ) {
+
+			const group = new Group();
+
+			buildHierarchy( data, group );
+
+			return group;
+
+		}
+
+		// USDA
+
+		if ( typeof buffer === 'string' ) {
+
+			const root = parser.parse( buffer );
+
+			return buildGroup( root );
+
+		}
+
+		// USDZ
+
+		const zip = fflate.unzipSync( new Uint8Array( buffer ) );
+
+		const assets = parseAssets( zip );
+
+		// console.log( assets )
 
-		buildHierarchy( root, group );
+		const file = findUSD( zip );
+
+		const text = fflate.strFromU8( file );
+		const root = parser.parse( text );
 
-		return group;
+		return buildGroup( root );
 
 	}
 

粤ICP备19079148号