在iOS上看不到三



我正在使用OBJ MTL加载程序将OBJ文件加载到我的场景中。在我的MTL文件中,我正在加载纹理。

例如:

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 Inspector时,我会收到此错误:

[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 );
});
}

我终于自己弄清楚了。对于任何对我的解决方案感兴趣的人:我从OBJLOADER切换到最近发布的OBJLOADER2。

var objLoader = new THREE.OBJLoader2();

我还摆脱了接收阴影的功能:

node.receiveShadow = false;

最后,我的对象出现了,我可以忍受一个事实,iPhone和iPad上不会收到阴影

最新更新