( function () { // // VRM is based on glTF 2.0 and VRM extension is defined // in top-level json.extensions.VRM class VRMLoader extends THREE.Loader { constructor( manager ) { if ( THREE.GLTFLoader === undefined ) { throw new Error( 'THREE.VRMLoader: Import THREE.GLTFLoader.' ); } super( manager ); this.gltfLoader = new THREE.GLTFLoader( manager ); } load( url, onLoad, onProgress, onError ) { const scope = this; this.gltfLoader.load( url, function ( gltf ) { try { scope.parse( gltf, onLoad ); } catch ( e ) { if ( onError ) { onError( e ); } else { console.error( e ); } scope.manager.itemError( url ); } }, onProgress, onError ); } setDRACOLoader( dracoLoader ) { this.gltfLoader.setDRACOLoader( dracoLoader ); return this; } parse( gltf, onLoad ) { // const gltfParser = gltf.parser; // const gltfExtensions = gltf.userData.gltfExtensions || {}; // const vrmExtension = gltfExtensions.VRM || {}; // handle VRM Extension here onLoad( gltf ); } } THREE.VRMLoader = VRMLoader; } )();