MeshFaceMaterial上的Three.js material.color.setHex

时间:2015-11-17 02:38:12

标签: javascript three.js html5-canvas

我的代码设置可根据不同的条件更改某些对象的颜色。它目前使用诸如

之类的循环
for (j = 0; j < objects[i].children.length; j++) {
    objects[i].children[j].material.color.setHex(0x1A75FF);
}

在render()函数中根据需要设置颜色。

问题是,有些对象是MeshLambertMaterial,有些是MeshFaceMaterial。上面的代码适用于MeshLambertMaterial,但当它尝试在具有MeshFaceMaterial的对象上运行时,它返回错误Cannot read property 'setHex' of undefined

我无法找到正确执行此操作的方法,但是如果有一个修复程序还需要将场景中的所有对象都设置为MeshFaceMaterial,以便能够设置任何对象的颜色只有一个功能,我不介意这样做。

(我 想要做的是使用if语句检查对象是否具有LambertMaterial或FaceMaterial,并为循环中的每个对象运行不同的代码集!)< / p>

1 个答案:

答案 0 :(得分:1)

var materials = objects[i].children[j].material.materials;
if ( materials ) {
    for ( var k=0,l=materials.length; k < l; k++ ) {
        materials[k].color.setHex( 0x1A75FF );
    }
} else {
    objects[i].children[j].material.color.setHex( 0x1A75FF );
}