THREE.js用png纹理加载obj + mtl

时间:2020-03-24 23:12:25

标签: javascript three.js .obj

我正在尝试将参照png纹理的mtl文件加载到我的obj模型,但是出现以下错误:

TypeError: manager.getHandler is not a function

这是我的three.js代码:

var loadOBJ = function(){
    var mtlLoader = new THREE.MTLLoader();
    mtlLoader.load( "static/pictures/3D/untitled2.mtl", function( materials ) {
            materials.preload();
            console.log(materials);

            var loader = new THREE.OBJLoader(  );
            loader.load( "static/pictures/3D/jaw.obj", addModelInScene);});
};

var addModelInScene = function(object){
    model = object;
    model.rotation.y = 1.55;
    scene.add(model);
    render();
};

这是.mtl文件

newmtl Teeth_UDIM
Ns 255.999998
Ka 1.000000 1.000000 1.000000
Kd 0.480000 0.424000 0.480000
Ks 0.040000 0.040000 0.040000
Ni 1.000000
d 1.000000
illum 2
map_Kd mrm.png

mrm.png文件与.mtl和.obj文件位于同一目录中。当我从.mtl(map_Kd mrm.png)中删除最后一行时,不会显示错误,但也不会显示纹理。我在做错什么吗?

1 个答案:

答案 0 :(得分:2)

TypeError:manager.getHandler不是函数

此运行时错误表明MTLLoader的版本比您的three.js的版本新。您始终必须确保核心文件以及所有示例文件(例如OBJLoaderMTLLoader)都来自同一发行版。使用当前版本或至少使用R109应该可以解决此问题。

BTW:通过将npm的{​​{1}}包和基于节点的工作流程与three.js这样的构建工具结合使用,可以轻松避免此类错误。