我試圖改變對象的紋理/顏色的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