加载正常的glb文件
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js' const gltfLoader = new GLTFLoader() gltfLoader.load( '/glb/1.glb',//这里的1.gbl文件路径为 public/glb/1.glb (gltf) => { scene.add(gltf.scene) }, undefined, (error) => { console.error('Error loading GLTF:', error) }, )
如果按照上面方式加载压缩过的glb文件时,会报错:No DRACOLoader instance provided
,这里就需要用到RACOLoader
来加载压缩的glb文件
一:拷贝 draco 文件到项目 public 中(以Vite为例)
将 Three.js的中 examples/js/libs/draco 拷贝到项目的public目录中
node_modules\three\examples\jsm\libs\draco 或https://github.com/mrdoob/three.js/tree/dev/examples/jsm/libs/draco
二:实例化DRACOLoader,并传递给 GLTFLoader
改写后的代码如下
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js' import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js' const dracoLoader = new DRACOLoader() dracoLoader.setDecoderPath('/threejs/draco/')//对应路径 为 public/threejs/draco/ const gltfLoader = new GLTFLoader() gltfLoader.setDRACOLoader(dracoLoader) gltfLoader.load( '/glb/1.glb', //这里的1.gbl文件路径为 public/glb/1.glb (gltf) => { scene.add(gltf.scene) animate() }, undefined, (error) => { console.error('Error loading GLTF:', error) }, )
这样既可加载成功
关于 Draco 的介绍,可以查看 Three.js 对于 Draco 的介绍描述:https://github.com/mrdoob/three.js/tree/dev/examples/js/libs/draco