使用three.js设置材质(obj + mtl)后,网格消失

时间:2017-10-24 17:00:12

标签: 3d three.js .obj

我正试图在我的THREE.scene中加载网络上发现的一些3D模型。 我已经按照基本的教程,很好地处理了我的灯光和相机,它对某些物体非常有效:

        function loadObject(path, modelName)
        {
            var mtlLoader2 = new THREE.MTLLoader();
            mtlLoader2.setPath( path );
            mtlLoader2.load(modelName+'.mtl', function( material ) 
            {
                material.preload();
                var objLoader2 = new THREE.OBJLoader();
                objLoader2.setPath( path );
                objLoader2.setMaterials( material );
                material.side = THREE.BackSide;
                objLoader2.load( modelName+'.obj', function ( mesh ) 
                {
                    mesh.name=modelName;
                    var axisHelper = new THREE.AxisHelper(1);
                    axisHelper.visible=true;
                    mesh.add(axisHelper);
                    scene.add( mesh );
                    console.log('Loaded '+modelName);   
                });                 
            });
        }

我还调用animate函数来定期渲染:

        function animate()
        {
            requestAnimationFrame( animate );
            renderer.render( scene, camera );
        }

示例
An example

不幸的是,一旦我应用了这些材料,其他一些对象就会消失(没有任何错误):

objLoader2.setMaterials( material );

隐形,我的意思是它不会出现但存在,会显示axisHelper。由于其他在线观看者似乎完全显示相同的对象,我得出的结论是,在线发现的某些.mtl文件与three.js不兼容。或者是我使用它的方式?

以下是功能文件的示例: https://www.models-resource.com/mobile/shaunthesheeppuzzleputt/model/19915/

一个不起作用的: https://www.models-resource.com/ds_dsi/shaunthesheep/model/12472/

我现在试图弄清楚为什么以及我是否可以修复它。 请分享您的想法和(希望)解决方案:)

1 个答案:

答案 0 :(得分:2)

正如Sedenion在评论中所回答的那样,Tr声明就是问题所在。 我删除了它们(有2个)它解决了我的问题。