以上方法在我的three@0.115.0版本上并没有直接起作用,因此我使用了:
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
import * as THREE from 'three';
const draco = new DRACOLoader()
draco.setDecoderPath('../node_modules/three/examples/js/libs/draco/gltf/');
draco.setDecoderConfig({ type: 'js' });
export const dracoLoader = draco;
const gltf = new GLTFLoader();
gltf.setDRACOLoader( dracoLoader );
export const gltfLoader = gltf;
如果你喜欢使用Promise,我也让我的加载器返回Promise,具体如下:
function promisify(loader, onProgress) {
function promiseLoader(url) {
return new Promise((resolve, reject) => {
loader.load(url, resolve, onProgress, reject);
});
}
return {
originalLoader: loader,
load: promiseLoader,
};
}
使用示例:
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';
export const fbxLoader = promisify(new FBXLoader());
然后在别处:
import { fbxLoader } from './loaders'
fbxLoader.load('cat.fbx').then(model => {
console.log(model)
})