单击threejs时无法更改纹理

时间:2016-06-09 10:48:40

标签: javascript three.js

我正在尝试更改对象的纹理/颜色(通过单击单独的多维数据集)

我只能改变对象的颜色一次(即使我使用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;
                            } }
                     })

1 个答案:

答案 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