71 lines
1.3 KiB
JavaScript
71 lines
1.3 KiB
JavaScript
// Based on GLTFLoader and USDZLoader
|
|
// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/USDZLoader.js
|
|
// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/GLTFLoader.js
|
|
|
|
import {
|
|
BufferAttribute,
|
|
BufferGeometry,
|
|
ClampToEdgeWrapping,
|
|
FileLoader,
|
|
Group,
|
|
Loader,
|
|
Mesh,
|
|
MeshStandardMaterial,
|
|
MirroredRepeatWrapping,
|
|
RepeatWrapping,
|
|
sRGBEncoding,
|
|
TextureLoader,
|
|
Object3D,
|
|
} from 'three';
|
|
|
|
|
|
///
|
|
/// Currently USDZ only.
|
|
/// Both USDC and USDA are supported as a USD content in USDZ.
|
|
/// TODO: Add feature to directly load USDC and USDA
|
|
///
|
|
class TinyUSDZLoader extends Loader {
|
|
|
|
constructor( manager ) {
|
|
super( manager );
|
|
}
|
|
|
|
load(url, onLoad, onProgress, onError) {
|
|
const scope = this;
|
|
|
|
const loader = new FileLoader( scope.manager );
|
|
loader.setPath( scope.path );
|
|
loader.setResponseType( 'arraybuffer' );
|
|
loader.setRequestHeader( scope.requestHeader );
|
|
loader.setWithCredentials( scope.withCredentials );
|
|
|
|
loader.load( url, function ( text ) {
|
|
|
|
try {
|
|
|
|
onLoad( scope.parse( text ) );
|
|
|
|
} catch ( e ) {
|
|
|
|
if ( onError ) {
|
|
|
|
onError( e );
|
|
|
|
} else {
|
|
|
|
console.error( e );
|
|
|
|
}
|
|
|
|
scope.manager.itemError( url );
|
|
|
|
}
|
|
|
|
}, onProgress, onError );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export { TinyUSDZLoader };
|