【发布时间】:2020-06-10 01:54:06
【问题描述】:
我无法使用 React JS 加载从 sketchfab 下载的 GLTF 文件。当我尝试在不使用 React(使用常规 index.html 和 index.js)的情况下执行此操作时,它可以工作,但是当我将代码带入我的 React 应用程序时,它会在 JSON.parse 的位置 0 处的 JSON 中抛出一个 Unexpected token
import * as THREE from "three";
import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader';
componentDidMount(){
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xdddddd);
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var width = 100;
var height = 100;
var intensity = 1.4;
var rectLight = new THREE.RectAreaLight( 0xffffff, intensity, width, height );
rectLight.position.set( 1, 1, 10 );
rectLight.lookAt( 1, 1, 3 );
scene.add( rectLight )
let renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize( window.innerWidth, window.innerHeight );
document.getElementsByClassName("three-canvas")[0].appendChild( renderer.domElement );
camera.position.z = 5;
var animate = function () {
requestAnimationFrame( animate );
renderer.render( scene, camera );
};
let loader = new GLTFLoader();
loader.load(
"../../public/js_models/apple_iphone_xs_max/scene.gltf",
( gltf ) => {
// called when the resource is loaded
console.log(gltf.scene)
},
( xhr ) => {
console.log(xhr);
// called while loading is progressing
// console.log("The xhr warning isL ",xhr.srcElement.responseText);
}
);
animate();
}
我读到它正在渲染我的 index.html,这就是它抛出错误的原因,但我真的找不到修复方法,因为我知道 GLTF 文件位于正确的路径中。
如果有任何见解,我将不胜感激。谢谢!
更新
【问题讨论】:
-
你如何托管你的 React 应用程序?此错误通常表明您的 Web 服务器不提供 glTF 资源,而是提供 HTML 文件。确保检查请求的 HTTP 响应并确保 glTF 内容有效。
-
@Mugen87 我检查了 Networks 选项卡,它说它正在加载 scene.gtlf,并且它给出了 200 响应。我更新了我的问题并包含了网络标签
-
但是你能检查一下其他的 HTTP 响应头吗?你得到什么内容类型?
-
@Mugen87 啊,你是对的。它正在获取一个文本文件,如内容类型所示。
-
@Mugen87 我不明白,为什么我的 GLTF 加载程序将其解释为文本文件,尽管我将文件作为 JSON 传递?这是我第一次真正使用 GLTF 加载器,所以我不太确定。