react three.js 解决DRACOLoader 无法设置setDecoderPath 问题

在React18项目中,使用three.js加载被压缩的.glb模型文件时,由于缺少DRACOLoader导致错误。解决方法是引入DRACOLoader,设置解码器路径和类型,预加载解码器,并在GLTFLoader中配置DRACOLoader,从而成功解压并加载模型。
摘要由CSDN通过智能技术生成

如图: react18 + three.js 渲染被压缩的.glb文件时报错

 // 创建gltfloader
  const gltfLoader = new GLTFLoader();

  gltfLoader.loadAsync(require('./model/city.glb')).then((gltf) => {
      console.log(gltf);
      scene.add(gltf.scene);
  });

控制台报错:

Uncaught (in promise) Error: THREE.GLTFLoader: No DRACOLoader instance provided.

在这里插入图片描述
解决办法:
设置dracoLoader路径
https://www.gstatic.com/draco/versioned/decoders/[version]/
https://www.gstatic.com/draco/versioned/decoders/1.5.6/
版本号来自 ★ 非常重要 https://github.com/google/draco/tree/master

完整代码

import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
...
// 加载被压缩的.glb文件会报错,需要draco解码器
const dracoLoader = new DRACOLoader();
// 设置dracoLoader路径
dracoLoader.setDecoderPath(
      'https://www.gstatic.com/draco/versioned/decoders/1.5.6/'
);
// 使用js方式解压
dracoLoader.setDecoderConfig({ type: 'js' }); 
// 初始化_initDecoder 解码器
dracoLoader.preload();
// 设置gltf加载器dracoLoader解码器
gltfLoader.setDRACOLoader(dracoLoader);
gltfLoader.loadAsync(require('./model/city.glb')).then((gltf) => {
    console.log(gltf);
    scene.add(gltf.scene);
});

结束~
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
React 中使用 Three.js 导入模型有以下几个步骤: 1. 首先,你需要在你的 React 项目中安装 Three.js。你可以使用以下命令来安装它: ```shell npm install three ``` 2. 在你的组件文件中,你需要导入 Three.js: ```javascript import * as THREE from 'three'; ``` 3. 创建一个 Three.js 场景,并设置相机和渲染器: ```javascript const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); ``` 4. 导入模型文件。Three.js 支持多种模型格式,比如 .obj、.glTF 等。你可以使用 OBJLoader 或者 GLTFLoader 来导入模型。首先,你需要安装这些 loader: ```shell npm install three-obj-loader three-gltf-loader ``` 5. 在你的组件文件中,导入所需的 loader: ```javascript import { OBJLoader } from 'three-obj-loader'; import { GLTFLoader } from 'three-gltf-loader'; OBJLoader(THREE); GLTFLoader(THREE); ``` 6. 创建一个 loader 实例,并使用它来加载模型文件: ```javascript const loader = new OBJLoader(); loader.load( 'path/to/your/model.obj', function (object) { scene.add(object); }, function (xhr) { console.log((xhr.loaded / xhr.total * 100) + '% loaded'); }, function (error) { console.error('An error happened', error); } ); ``` 或者如果你使用的是 glTF 格式的模型文件: ```javascript const loader = new GLTFLoader(); loader.load( 'path/to/your/model.gltf', function (gltf) { scene.add(gltf.scene); }, function (xhr) { console.log((xhr.loaded / xhr.total * 100) + '% loaded'); }, function (error) { console.error('An error happened', error); } ); ``` 7. 最后,你需要在 render 函数中更新场景并渲染: ```javascript function render() { requestAnimationFrame(render); // 在这里更新你的场景 renderer.render(scene, camera); } render(); ``` 这样,你就可以在 React 中使用 Three.js 导入模型了。记得根据你的项目路径和模型文件的路径进行相应的调整。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值