2017-09-08 59 views
0

我正在使用obj + mtl加载程序将我的OBJ文件加载到我的场景中。 在我的mtl文件中,我正在加载纹理。Three.js OBJ MTL加载程序在IOS上不可见

例如为:

newmtl initialShadingGroup 
illum 4 
Kd 1.00 1.00 1.00 
Ka 0.00 0.00 0.00 
Tf 1.00 1.00 1.00 
map_Kd 6922529901031.jpg 
map_Bump 6922529901031_bump.jpg 
Ni 1.00 

一切正常,在所有系统上,除了移动IOS。在这些设备上,具有纹理或获取环境贴图的文件根本不显示。只是阴影。

我试过到目前为止:

  • 检查纹理是2

  • 电源设置底纹双面

  • 控制文件大小(以下200KB一切)

当我使用web督察我得到这个错误:

[Error] THREE.WebGLProgram: shader error: (7) 
1282 
"gl.VALIDATE_STATUS" 
false 
"gl.getProgramInfoLog" 
"" 
"" 
"" 

这里是我的装载机:

function loadMesh(objTxt, mtlTxt) { 

var onProgress = function (xhr) { 
    if (xhr.lengthComputable) { 
    } 
}; 
var onError = function (xhr) { }; 

var mtlLoader = new THREE.MTLLoader(); 
mtlLoader.setTexturePath('assets/'); 
mtlLoader.setPath('assets/'); 
mtlLoader.load(mtlTxt, function(materials) { 

    materials.preload(); 
    if(materials.materials['initialShadingGroup']['map'] != null) { 
     materials.materials['initialShadingGroup']['map']['magFilter'] = THREE.NearestFilter; 
     materials.materials['initialShadingGroup']['map']['minFilter'] = THREE.LinearFilter; 
    } 

    /*set environment map*/ 
    materials.materials['initialShadingGroup']['envMap'] = new THREE.CubeTextureLoader().load([ 'img/posx.jpg', 'img/negx.jpg', 'img/posy.jpg', 'img/negy.jpg', 'img/posz.jpg', 'img/negz.jpg' ]); 
    /*set reflectivity of material*/ 
    materials.materials['initialShadingGroup']['reflectivity'] = 1.0; 
    /*set anisotropy of bumpMap*/ 
    if(materials.materials['initialShadingGroup']['bumpMap'] != null) { 
     materials.materials['initialShadingGroup']['bumpMap']['anisotropy'] = 16; 
    } 

    if(materials.materials['initialShadingGroup']['specularMap'] != null) { 
     materials.materials['initialShadingGroup']['specularMap']['anisotropy'] = 16; 
    } 
    materials.materials['initialShadingGroup']['bumpScale'] = 0.1; 

    var objLoader = new THREE.OBJLoader(); 
    objLoader.setMaterials(materials); 
    objLoader.setPath('assets/'); 
    objLoader.load(objTxt, function (object) { 


     /*set attributes of OBJ childs*/ 
     object.traverse(function(node) { if (node instanceof THREE.Mesh) { 

      node.castShadow = true; 
      node.receiveShadow = true; 

      node.material.shading = THREE.SmoothShading; 
     } }); 



     scene.add(object); 



    }, onProgress, onError); 

}); 
} 

回答

0

我终于想通了自己。 对于任何对我的解决方案感兴趣的人:我从OBJLoader切换到最新发布的OBJLoader2。

var objLoader = new THREE.OBJLoader2(); 

我也摆脱了功能接收阴影:

node.receiveShadow = false; 

最后我的对象出现,我可以用这一事实生活中,没有阴影将在iPhone和iPad

接收