Three.js纹理和突出问题

时间:2014-08-18 13:58:37

标签: 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 ) 
    {
      // 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没有颜色参数或其他东西有关。任何人都可以告诉我,我想要做的是可能的还是我想出错的任何想法?

1 个答案:

答案 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以快速回答该问题。

希望这有用!