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

ell*_*gan 1 javascript three.js

示例: 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 );
}
Run Code Online (Sandbox Code Playgroud)

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

是什么赋予了?

ell*_*gan 5

我想到了。这是因为该代码实际上正在更改对象材质的颜色,并且由于所有对象共享相同的材质,因此它们都会看到颜色变化。

我移动的解决方案在用户单击时创建新材质,并将其应用到对象。