将材质应用于THREE.OBJ网格的特定子项

时间:2016-08-02 12:27:18

标签: javascript three.js

这是我的问题:

我想将特定材质应用于具有Three.js的obj网格的子节点。

但似乎材料被应用于父网格而不是子网格...我尝试了不同的东西,但每次应用的最后一个材料设置为父...我做错了吗?也许我没有使用正确的方法,任何想法?

    /* material */

material = new THREE.MeshLambertMaterial({
    color: 0x9B9B9B,
    emissive: 0x050505,
    emissiveIntensity: 0.1
});

firstChildMaterial = new THREE.MeshLambertMaterial({
    color: 0x9693057,
    emissive: 0x050505,
    emissiveIntensity: 0.1
});

/* Model */

loader = function (url) {
    scene.remove(object);
    var objLoader = new THREE.OBJLoader();
    objLoader.load(url, function (obj) {

        object = obj;

        object.traverse(function (child) {
            if (child instanceof THREE.Mesh) {
                child.material = material;
                // How can I apply firstChildMaterial to the first child ?…
            }
        });
        scene.add(object);
    });
};

有一个带孩子的最终网格的截图

Screenshot of the console

谢谢你的帮助! :-)

1 个答案:

答案 0 :(得分:0)

您只需测试对象的名称:

object.traverse(function(obj) {
  if (obj.name && obj.name.includes('mesh 1')) {
    obj.material = firstChildMaterial;
  }
});