Javascript Three.js纹理和突出显示问题

Javascript Three.js纹理和突出显示问题,javascript,opengl-es,three.js,Javascript,Opengl Es,Three.js,我有一个立方体,当我在上面悬停时,我想改变它的颜色。当我只使用一个纹理时,这是可行的,但现在我想将其推进到使用纹理数组,每个面一个纹理 if ( intersects.length > 0 ) { // if the closest object intersected is not the currently stored intersection object if ( intersects[ 0 ].object != INTERSECTED ) { //

我有一个立方体,当我在上面悬停时,我想改变它的颜色。当我只使用一个纹理时,这是可行的,但现在我想将其推进到使用纹理数组,每个面一个纹理

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没有颜色参数之类的东西有关。有没有人能告诉我,我正在努力做的事情是否可行,或者我哪里出了问题

您必须从“材质”中获取“材质数组”,如下所示:

for(var p =0; p < INTERSECTED.material.materials.length; p++){
    INTERSECTED.currentHex = INTERSECTED.material.materials[p].emissive.getHex();
}
这样,您就不会选择MeshFace材质,而是选择用于每个面的Meshlambert材质或MeshBasicMaterial。如果你使用图像作为纹理,我建议你快速回答这个问题


希望这是有帮助的

所以您将MeshBasicMaterial更改为MeshFaceMaterial?你能再详细说明一下相交和相交[0]吗?请注意,后者只是其他材质的容器,这些材质使用连接到Face3实例的materialIndex按三角形索引。你得给它编索引。作为旁注:只需在循环和条件中始终使用大括号,请参见intersects[0]是场景中对象数组的一个元素,INTERSECTED是我的鼠标与之相交的对象以及我要更改其颜色的对象。我真的想知道是否有可能更改MeshFaceMaterial的颜色,我认为这些线是:INTERSECTED.material.color.setHex INTERSECTED.currentHex;正在抛出错误,因为我没有找到正确的元素来更改a本身没有颜色。它聚集在长方体的各个面上设置的其他材质。尝试创建不同的材质并直接在网格上设置这些材质。尽量减少你的代码并上传到