Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs FBX装载机可以';找不到fbx文件的版本号_Reactjs_Three.js_Loader_Fbx - Fatal编程技术网

Reactjs FBX装载机可以';找不到fbx文件的版本号

Reactjs FBX装载机可以';找不到fbx文件的版本号,reactjs,three.js,loader,fbx,Reactjs,Three.js,Loader,Fbx,我试图加载.fbx文件,loader.load函数抛出以下错误: THREE.FBXLoader:找不到给定文件的版本号 我不知道如何解决这个问题。如果fbx文件有版本号,如何签入 下面你可以找到我写的react组件。当我测试应用程序时,我只看到一块黑色的画布 我尝试了两个不同的文件,但两个文件都有相同的错误 export default class myComponent extends Component { componentDidMount() { const camera

我试图加载.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)} />;
  }
}
导出默认类myComponent扩展组件{
componentDidMount(){
常量摄影机=新的三透视摄影机(
45,
window.innerWidth/window.innerHeight,
1.
2000
);
摄像机。位置。设置(2,18,28);
const scene=new THREE.scene();
恒光=新的三个半球光(0xffffff,0x4444);
光。位置。设置(0,1,0);
场景。添加(灯光);
const gridHelper=新的三个.gridHelper(28,28,0x303030,0x303030);
添加(gridHelper);
const renderer=new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth、window.innerHeight);
this.model.appendChild(renderer.doElement);
const loader=新的FBXLoader();
让model=new THREE.Object3D();
装载机(
“./3DModels/MHT.fbx”,
功能(对象){
模型=对象。场景;
场景。添加(模型);
},
未定义,
职能(e){
控制台日志(e);
}
);
渲染器。渲染(场景、摄影机);
}
render(){
返回(this.model=ref)}/>;
}
}

FBXLoader引发此错误:THREE.FBXLoader:找不到给定文件的版本号。

我刚才遇到了相同的问题,您可以尝试如下调试:

我发现我的项目使用的使
XMLHttpRequest
成为
MockXMLHttpRequest
的原因:

//three.js中的相对代码:
request.addEventListener('load',函数(事件){
//如果您使用Mockjs,这将成为MockXMLHttpRequest,而不是XMLHttpRequest
//这个.response不是ArrayBuffer,是bug。
var response=此响应;
var callbacks=正在加载[url];

这是我的案例,可能会对您有所帮助。

您是将文件托管在src文件夹还是公用文件夹中? 您应该将fbx文件保存在公用文件夹中

加载程序扫描文档并解析文本以找到需要加载的内容。在react中工作的情况是,这将在呈现DOM之前触发,因此它基本上无法更改版本,因为它看不到任何文件

我在尝试“调试”加载程序代码时解决了这个问题。结果证明是我:)

另一个fbx的事情是你应该始终使用最新的加载程序插件。你会找到原始插件的链接和如何将其转换为React模块的示例

希望这有帮助

loader.load('./3DModels/MHT.fbx', function(object) {
  ...
})
相反:

const path = require(./3DModels/MHT.fbx);//写在类的外面
loader.load(path, function(object) {
  ...
})

你如何提供你的fbx文件?浏览器的“网络”选项卡中的mht.fbx请求是否失败?能否在此线程中共享你的一个fbx文件?此外,你知道哪个DCC工具导出了相应的fbx文件吗?可能是Blender?@Mugen87我从该网站下载了该文件@ EvgenyTimoshenko,我检查了网络选项卡,它用状态200加载文件,OK。这是否意味着我的FBXLoader没有工作,但是它似乎在检查文件中的东西,如果它找不到版本号,对吗?我只能调试加载器,如果你可以共享文件。sset.欢迎来到SO!没有提及(我没有找到)用户使用Mockjs。你确定你在回答这个问题吗?如果不是这样,因为你不能评论,请提及它。@David García Bodego就在我的案例中,我想这可能会帮助一些人。@David García Bodego起初,我认为错误在threejs或fbxLoader代码中。因此,如果我在没有调试的情况下提问,我想我不会再问了我也是。