使用THREE.ObjectLoader时,如果模型有多个纹理,如何正确加载它们?

时间:2014-07-31 13:37:42

标签: json three.js export textures

我已将模型导出为Three.js场景。我使用ObjectLoader加载它。它似乎加载很好,但纹理不适用。当我查看json文件时,列出了材料。这是我试过的代码。

    loader.load( "MyModel.json", function(obj){

        var materialsFromFile = new THREE.MeshFaceMaterial(obj.materials);

        // create our mesh with the loaded geometry and materials
        mesh = new THREE.Mesh(obj.geometry, materialsFromFile);

        scene.add(mesh);

    });

更新: 我有一个解决方案,也许有人知道更好的方法吗?我所做的是:首先我在加载模型后遍历模型

    obj.traverse(function(child){ initChild(child); });

在initChild(child)中我这样做:

    if(child.material != null)
    {
       var childName = child.material.name;
       child.material = new THREE.MeshPhongMaterial();
       child.material.name = childName;
       AssignMap(child.material);
    }

在AssignMap(材质)中,我首先加载纹理,然后根据材质名称指定它们:

    var texture_metal = new THREE.ImageUtils.loadTexture("media/texture_metal.jpg");
    var texture_glass = new THREE.ImageUtils.loadTexture("media/texture_glass.jpg");

    if(material.name == "metal texture")
        material.map = texture_metal;
    if(material.name == "glass texture")
        material.map = texture_glass; 

我疯了吗?这是合理的解决方案吗?我已经看了很多,并且在使用THREE.ObjectLoader()和获取多个纹理以正确加载方面找不到多少。

0 个答案:

没有答案