UNPKG

aframe

Version:

A web framework for building virtual reality experiences.

63 lines (54 loc) 1.8 kB
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; import { registerComponent } from '../core/component.js'; import * as utils from '../utils/index.js'; var warn = utils.debug('components:gltf-model:warn'); /** * glTF model loader. */ export var Component = registerComponent('gltf-model', { schema: {type: 'model'}, init: function () { var self = this; var dracoLoader = this.system.getDRACOLoader(); var meshoptDecoder = this.system.getMeshoptDecoder(); var ktxLoader = this.system.getKTX2Loader(); this.model = null; this.loader = new GLTFLoader(); if (dracoLoader) { this.loader.setDRACOLoader(dracoLoader); } if (meshoptDecoder) { this.ready = meshoptDecoder.then(function (meshoptDecoder) { self.loader.setMeshoptDecoder(meshoptDecoder); }); } else { this.ready = Promise.resolve(); } if (ktxLoader) { this.loader.setKTX2Loader(ktxLoader); } }, update: function () { var self = this; var el = this.el; var src = this.data; if (!src) { return; } this.remove(); this.ready.then(function () { self.loader.load(src, function gltfLoaded (gltfModel) { self.model = gltfModel.scene || gltfModel.scenes[0]; self.model.animations = gltfModel.animations; el.setObject3D('mesh', self.model); el.emit('model-loaded', {format: 'gltf', model: self.model}); }, undefined /* onProgress */, function gltfFailed (error) { var message = (error && error.message) ? error.message : 'Failed to load glTF model'; warn(message); el.emit('model-error', {format: 'gltf', src: src}); }); }); }, remove: function () { if (!this.model) { return; } this.el.removeObject3D('mesh'); } });