som*_*ame 3 three.js typescript objloader
我早些时候在这里问过这个问题:Uncaught TypeError: THREE.MTLLoader is not a constructor
我通过更改三个 mtl-loader 文件让它工作的地方。但由于我稍后将我的工作上传到 github,我必须在不更改这些文件的情况下创建一个解决方案。
因此,我尝试使用经典示例中使用的加载器加载 obj 和 mtl 文件:https : //github.com/mrdoob/three.js/blob/master/examples/webgl_loader_obj_mtl.html
但我仍然收到错误“未捕获的类型错误:THREE.MTLLoader 不是构造函数”
我有点不确定如何加载这些加载器,但现在我的代码如下所示:
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)
});
});
Run Code Online (Sandbox Code Playgroud)
在我插入的 src 文件夹中的three.js文件中的位置:
export { OBJLoader } from './loaders/OBJLoader.js'
export { MTLLoader} from './loaders/MTLLoader.js'
Run Code Online (Sandbox Code Playgroud)
编辑
我使用 NPM 安装,错误消失了。不幸的是,发生了其他问题 - 但我在另一个问题中提出了这些问题:three-mtl-loader error: THREE.MeshPhongMaterial: .shading has been removed -> object not visible
Three.js 文档具有误导性。尽管MTLLoader 在主文档中,但它实际上并不是 Three.js 核心库的一部分。它包含在examples/
Three.js的文件夹中。
如果你使用 ES6 模块语法,你有两个选择。
通常人们会向 NPM 发布这样的东西,因为 Threejs 的创建者不使用现代 JS 开发实践。在这种情况下,有一个三 mtl-loader npm包。
npm install --save three-mtl-loader
Run Code Online (Sandbox Code Playgroud)
进而
import MTLLoader from 'three-mtl-loader';
Run Code Online (Sandbox Code Playgroud)
您可以将MTLLoader.js文件复制到您的项目中,但如果您使用的是现代 ES6 模块,则将第三方库复制到您的本地项目中并不是一个好习惯。
归档时间: |
|
查看次数: |
5702 次 |
最近记录: |