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

3

我一直在尝试在我的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);   
                });                 
            });
        }

我还会定期调用一个动画函数来渲染:

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

一个例子
一个例子

不幸的是,当我应用材质时,一些其他对象会消失(没有任何错误):

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
{btsdaf} - user1501157
{btsdaf} - Quentin El Guay
{btsdaf} - Ron Jensen
{btsdaf} - user1501157
1个回答

2

正如Sedenion在评论中所回答的那样,Tr语句是个问题。我移除了它们(有两个),这解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接