尝试更改单击的 Three.js 对象的颜色,但场景中所有对象的颜色都已更改

Trying to change the color of clicked Three.js object, but the color of all objects in scene get changed

示例:http://jsfiddle.net/f17Lz5ux/2539/

这是 mousedown 事件中发生的神奇部分:

var intersects = raycaster.intersectObjects( [mesh1, mesh2, mesh3] );

if ( intersects.length > 0 ) {
    console.log(intersects[ 0 ].object)
    intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
}

想法是,当用户点击时,会在该点创建一条射线,并找到任何交点。然后将该对象的颜色更改为随机的新颜色。然而,发生的事情是所有对象的颜色都发生了变化,即使它们没有包含在 intersects 数组中(如果你检查控制台,你会看到被点击的对象被打印出来)

什么给了?

我明白了。这是因为该代码实际上改变了对象 Material 的颜色,并且由于所有对象共享相同的 material,它们都看到了颜色变化。

我移动到的解决方案会在用户单击时创建一个新的 material,并将其应用于对象。