我正在尝试加载.fbx文件,loader.load函数会引发以下错误: THREE.FBXLoader:找不到给定文件的版本号。
我不知道如何解决这个问题。如何检查fbx文件是否具有版本号?
下面您可以找到我编写的react组件。在测试应用程序时,我只会看到黑色的画布。
我尝试了两个不同的文件,但是两个文件都有相同的错误。
export default class myComponent extends Component {
componentDidMount() {
const camera = new THREE.PerspectiveCamera(
45,
window.innerWidth / window.innerHeight,
1,
2000
);
camera.position.set(2, 18, 28);
const scene = new THREE.Scene();
const light = new THREE.HemisphereLight(0xffffff, 0x444444);
light.position.set(0, 1, 0);
scene.add(light);
const gridHelper = new THREE.GridHelper(28, 28, 0x303030, 0x303030);
scene.add(gridHelper);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
this.model.appendChild(renderer.domElement);
const loader = new FBXLoader();
let model = new THREE.Object3D();
loader.load(
'./3DModels/MHT.fbx',
function(object) {
model = object.scene;
scene.add(model);
},
undefined,
function(e) {
console.log(e);
}
);
renderer.render(scene, camera);
}
render() {
return <div ref={ref => (this.model = ref)} />;
}
}
FBXLoader引发此错误:THREE.FBXLoader:找不到给定文件的版本号。
答案 0 :(得分:1)
loader.load('./3DModels/MHT.fbx', function(object) {
...
})
相反:
const path = require(./3DModels/MHT.fbx);//写在类的外面
loader.load(path, function(object) {
...
})
答案 1 :(得分:0)
我刚刚遇到了相同的问题,您可以尝试像这样调试:
我发现我的项目使用Mockjs的原因使XMLHttpRequest
成为MockXMLHttpRequest
:
// relative code in three.js:
request.addEventListener( 'load', function ( event ) {
// if you use Mockjs, this become MockXMLHttpRequest but not XMLHttpRequest
// this.response not is ArrayBuffer ,there is the bug.
var response = this.response;
var callbacks = loading[ url ];
这只是我的案子,可能会对您有所帮助。
答案 2 :(得分:0)
您是将文件托管在src文件夹还是公用文件夹中? 您应该将fbx文件保存在公用文件夹中。
加载程序扫描文档并解析文本以查找需要加载的内容。使用react的情况是,这将在DOM呈现之前触发,因此基本上看不到该版本,因为它看不到任何文件。
我在尝试“调试”加载程序代码时解决了这个问题。原来是我:)
fbx的另一件事是您应始终使用最新的加载程序插件。 Under this link您将找到原始插件的链接以及如何将其转换为React模块的示例。
希望这会有所帮助。