尝试更改单击的 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,并将其应用于对象。
示例: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,并将其应用于对象。