我正在尝试更改对象的纹理/颜色(通过单击单独的多维数据集)
我只能改变对象的颜色一次(即使我使用for循环)并且在对象上没有先前的纹理或颜色。 但是,如果对象已有现有颜色,我无法更改颜色。 我需要添加一些needsUpdate吗?我做了但没有运气..请看看我的onclick功能。
EventsControls.attachEvent('onclick', function() {
var colors = ['White', 'blue', 'gold'];
for (var i = 0; i < colors.length; i++) {
object.traverse(function(child) {
if (child instanceof THREE.Mesh) {
if (child.material.name == "Sofa_Leather") {
child.material = colors[i]; // array elements are already defined
child.material.needsUpdate = true;
child.material.buffersNeedUpdate = true;
child.material.uvsNeedUpdate = true;
child.receiveShadow = true;
}
}
})
}
});
请让我知道我哪里出错了。谢谢。
//重试但可以设法用下面的代码只改变一种颜色,我想我是以错误的方式使用needsUpdate。
var index=0;
var colors=[0xfffeef,0xffff00,0x000fff];
object.traverse( function( child ) { if ( child instanceof THREE.Mesh ) {
if (child.material.name == "Sofa_Leather") {
if(index == colors.length) index = 0;
child.material.color.setHex(colors[index++]);
child.material.needsUpdate = true;
child.receiveShadow = true;
} }
})
答案 0 :(得分:1)
我相信你可以通过使用:
来做到这一点material.color.setHex(0xffffff * Math.random()); // set to random color
修改强>
是的,你确定你也可以这样做:
var colors = [0xff0000, 0x00ff00, 0x0000ff]; // red, green and blue
if(index == colors.length) index = 0;
line.material.color.setHex(colors[index++]);
请参阅已更新jsfiddle