我尝试在React-three-fiber(R3F)中加载gltf模型,但是遇到了困难。我已经尝试过寻找答案,也有人遇到了类似的问题,但我无法解决我的问题。
我不断在控制台中看到以下信息:
据我所知,我的代码没有任何问题。我尝试以多种不同的方式编写它来加载模型。react-three-fiber的创建者几天前像这样在codesandbox中加载了一个模型:https://codesandbox.io/s/r3f-gltf-useloader-8nb5i ,所以我觉得这不可能是R3F的问题。我注意到他使用的是glb文件而不是gltf文件,所以我去找了一个glb模型来检查是否会有所不同。我意识到我还必须将我的模型放在public文件夹中,我已经做到了。不幸的是,这并没有改变什么,我仍然继续遇到这个问题。
我已经尝试过以下方法:
我不断在控制台中看到以下信息:
at JSON.parse (<anonymous>)
at GLTFLoader.parse (GLTFLoader.js:213)
at Object.onLoad (GLTFLoader.js:145)
at XMLHttpRequest.<anonymous> (three.module.js:35829)
据我所知,我的代码没有任何问题。我尝试以多种不同的方式编写它来加载模型。react-three-fiber的创建者几天前像这样在codesandbox中加载了一个模型:https://codesandbox.io/s/r3f-gltf-useloader-8nb5i ,所以我觉得这不可能是R3F的问题。我注意到他使用的是glb文件而不是gltf文件,所以我去找了一个glb模型来检查是否会有所不同。我意识到我还必须将我的模型放在public文件夹中,我已经做到了。不幸的是,这并没有改变什么,我仍然继续遇到这个问题。
我已经尝试过以下方法:
import React, { Suspense } from "react";
import { Canvas, useLoader } from "react-three-fiber";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import * as THREE from "three";
import Box from "./Components/Sphere.Component";
import Plane from "./Components/Plane.Component";
import Controls from "./Components/Controls.Component";
import "./App.css";
const Chair = () => {
const { nodes } = useLoader(GLTFLoader, "../public/mindbreaker.glb");
return (
<mesh geometry={nodes.Cube.geometry}>
<meshStandardMaterial attach="material" color="lightblue" />
</mesh>
);
};
function App() {
return (
<Canvas
camera={{ position: [0, 0, 5] }}
onCreated={({ gl }) => {
gl.shadowMap.enabled = true;
gl.shadowMap.type = THREE.PCFSoftShadowMap;
}}
>
<fog attach="fog" args={["pink", 5, 15]} />
<Plane />
<Controls />
<Box />
<Suspense fallback={null}>
<Chair />
</Suspense>
</Canvas>
);
}
export default App;
这里有一个遇到类似问题的人:https://discourse.threejs.org/t/json-or-gltf-loader-for-three-js-in-react/3898/10,但我仍然不太明白如何解决这个问题。
非常感谢任何帮助,我很期待尝试 R3F,但似乎在第一道难关上就失败了。请有人解救我吧!哈哈。
谢谢!
../public/mindbreaker.glb
。它必须是相对路径,就像加载图像或在 HTML 中使用<image/>
一样。正确的代码应该是useLoader(GLTFLoader, "mindbreaker.glb")
。 - mr.b