我有一个立方体,我想改变悬停在它上面时的颜色。当我只使用一个纹理时,这可以工作,但现在我想将其推进到使用纹理数组,每个面一个纹理。
if ( intersects.length > 0 )
{
// if the closest object intersected is not the currently stored intersection object
if ( intersects[ 0 ].object != INTERSECTED )
{
// restore previous intersection object (if it exists) to its original color
if ( INTERSECTED )
INTERSECTED.material.color.setHex( INTERSECTED.currentHex );
// store reference to closest object as current intersection object
INTERSECTED = intersects[ 0 ].object;
// store color of closest object (for later restoration)
INTERSECTED.currentHex = INTERSECTED.material.color.getHex();
// set a new color for closest object
INTERSECTED.material.color.setHex( 0x118D08 );
}
当我这样做时,悬停时的颜色变化不起作用,我得到这些错误:
未捕获的TypeError:无法读取属性' setHex'未定义的[重复13次]
未捕获的TypeError:无法读取属性' getHex'未定义的
立方体的纹理方式与我想要的一样,所以错误不是那样的。我认为这与MeshFaceMaterial没有颜色参数或其他东西有关。任何人都可以告诉我,我想要做的是可能的还是我想出错的任何想法?
答案 0 :(得分:0)
你必须得到'材料阵列'来自'材料'像这样:
for(var p =0; p < INTERSECTED.material.materials.length; p++){
INTERSECTED.currentHex = INTERSECTED.material.materials[p].emissive.getHex();
}
这样您就不会选择MeshFaceMaterial,而是选择每个面使用的MeshLambertMaterial或MeshBasicMaterial。如果您使用图像作为纹理,我建议您查看Three.js material texture and color以快速回答该问题。
希望这有用!