我试图改变对象的纹理/颜色的onclick(通过点击不同的立方体)无法改变纹理threejs
我能够改变物体的颜色只有一次(尽管我使用for-loop),并假定对象上没有先前的纹理或颜色。 但是,如果对象已具有现有颜色,则无法更改颜色。 我需要添加一些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;
} }
})
材料不等于一种颜色吗?您是否尝试过'material.color',但它应该使用正确的颜色格式,如“0xff0000”。 –
VAR白色=新THREE.MeshPhongMaterial({ \t颜色:0xffffef, \t结合:THREE.MultiplyOperation, \t反射率:0.4 })全局这样 我已定义的颜色,我试图使用material.color =颜色[ i],但对象在点击时消失 –
您似乎将颜色设置为字符串,请尝试使用以下方法:.setHex(0xff0000);看到这个例子 - http://jsfiddle.net/Lfr5my2s/11/ – Neil