typescript - 未捕获的 TypeError : THREE. MTLLoader 不是构造函数 2.0

标签 typescript three.js objloader

我之前在这里问过这个问题:Uncaught TypeError: THREE.MTLLoader is not a constructor

我通过更改 three-mtl-loader 文件让它工作的地方。但是因为我稍后要将我的工作上传到 github,所以我必须在不更改这些文件的情况下创建一个解决方案。

因此,我尝试使用经典示例中使用的加载器加载 obj 和 mtl 文件:https://github.com/mrdoob/three.js/blob/master/examples/webgl_loader_obj_mtl.html

但我仍然收到错误“Uncaught TypeError: THREE.MTLLoader is not a constructor”

我有点不确定我将如何加载这些加载器,但现在我的代码如下所示:

import * as THREE from 'three'
import {OBJLoader} from 'three'
import {MTLLoader} from 'three'


var mtlLoader = new THREE.MTLLoader();
mtlLoader.load("http://blabla.obj.mtl", function(materials) {
   materials.preload();
   var objLoader = new THREE.OBJLoader();
   objLoader.setMaterials(materials);
   objLoader.load("http://blabla.obj", function(object) {

       object.scale.x = scale;
       object.scale.y = scale;
       object.scale.z = scale;

       scene.add(object)

  });
});

在我插入的src文件夹下的three.js文件中的什么地方:

export { OBJLoader } from './loaders/OBJLoader.js'
export { MTLLoader} from './loaders/MTLLoader.js'

编辑

我使用 NPM 安装,错误消失了。不幸的是,出现了其他问题——但我在另一个问题中问过这些问题:three-mtl-loader error: THREE.MeshPhongMaterial: .shading has been removed -> object not visible

最佳答案

Three.js 文档具有误导性。尽管MTLLoader is in the main documentation , 它实际上不是 Three.js 核心库的一部分。它包含在 Three.js 的 examples/ 文件夹中。

如果您使用 ES6 模块语法,您有两个选择。

选项 1:NPM

通常人们将这样的东西发布到 NPM,因为 Threejs 的创建者不使用现代 JS 开发实践。在这种情况下,有一个 three-mtl-loader npm package包。

npm install --save three-mtl-loader

然后

import MTLLoader from 'three-mtl-loader';

选项 2:从 Three 的源代码中复制 MTLLoader。

您可以复制 MTLLoader.js文件到您的项目中,但是如果您使用的是现代 ES6 模块,则将第三方库复制到您的本地项目中并不是一个好习惯。

关于typescript - 未捕获的 TypeError : THREE. MTLLoader 不是构造函数 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741644/

相关文章:

javascript - 从 Object3D 中移除子对象

javascript - Threejs Canvas 不会调整到标签 div

javascript - 如果我没有 .mtl,是否可以加载带有颜色的 .obj 文件?

javascript - 导入 LOCAL .obj 以使用 React 使用 Three.js OBJLoader 加载

javascript - 无法将动画置换着色器与 OBJ 加载器一起使用(TypeError : mesh is undefined)

visual-studio - ts 属性推送在 Angular 代码 VS 中的类型 '{}' 上不存在

javascript - 没有引用句柄的订阅实例是否需要退订?

angular - 你应该为 Angular Material 2组件写一个包装器吗?

javascript - 删除后 knockout View 不会从 View 中删除项目

python - 如何使 jupyter pytherejs 绘图更大?