am quite new to both react and three.js, im trying to render a .gltf file using the method const Loader = new GLTFLoader() however when the website is rendered and i view it in browser i see the error message, An error happened SyntaxError: Unexpected token < in JSON at position 0, if anyone would know what direction to point me in that would be great.
here's the code
rende.js:
import * as THREE from "three";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
export default class Rende extends Component {
componentDidMount() {
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
);
var renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0x424242, 1);
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById("scene").appendChild(renderer.domElement);
const loader = new GLTFLoader();
loader.load(
"untitled.gltf",
(gltf) => {
scene.add(gltf.scene);
},
(xhr) => {
console.log(`${(xhr.loaded / xhr.total) * 100}% loaded`);
},
(error) => {
console.error("An error happened", error);
}
);
}
render() {
return <div id="scene" className="potato"></div>;
}
}
and the coresponding component page
home.jsx:
export default function Home() {
return (
<Fragment>
{" "}
<div key={1} className="class">
tagline
</div>
<Rende />
</Fragment>
);
}
if anyone can help that would be much apreciated. Thank you
It happened to me firsthand when I worked with threejs at the beginning and was writing the wrong path for my .gltf
I made a fork of a "Three.js import GLTF" sandbox on codesandbox, where I replaced the path with a random, wrong one.
If you open the console (in the sandbox fork), you will see your same error.
This is because the fetch still has the status 200 but with HTML instead of your model's JSON,
due to the wrong path and the behavior of the server of a single page application, which, generally, returns the index.html, unless it is a path belonging to one of the assets, by default with reactjs and other libraries/frameworks.
Since the path is wrong, the server returns your html instead of your model, so the JSON parser throws your same error, because actually, the first char recived is <.
...as you can see in this screen from the browser dev-tools > Network tab, while running the sandbox
Try to check out the network devtools while running your website to check if your .gltf fetch response is HTML (intead of your model JSON).
If so, your model path is wrong.