不能使用three.js更改材质颜色

时间:2015-02-17 06:35:39

标签: javascript three.js rendering webgl

我有一个obj文件,其中包含顶点组和主对象。我正在尝试为通过顶点组标记的每个组指定颜色。我能找到的是three.js每个顶点组的类型为Object3D且没有像setColor这样的函数,而是每个这样的子节点都有两个THREE.Mesh类型的子节点并且它具有通过材料属性访问的setColor函数。我不清楚这种等级制度。如何为每个顶点组设置颜色。

早期版本的three.js还有一个不同的对象子关系层次结构。请给我一些意见。我正在寻找解决方案

1 个答案:

答案 0 :(得分:2)

堆叠溢出上有几个类似的问题,可以帮助您更喜欢herehere

为了能够将颜色设置为顶点,您需要遍历对象树,直到找到网格几何体的面,然后您可以分配vertexColors数组:

var numberOfSides, j, vertexIndex;

for ( var i = 0; i < geometry.faces.length; i++ ) 
{
    face = geometry.faces[ i ];   
    face.color = baseColor;      
    numberOfSides = ( face instanceof THREE.Face3 ) ? 3 : 4;
    for( j = 0; j < numberOfSides; j++ ) 
    {
        vertexIndex = face[ faceIndices[ j ] ];
        face.vertexColors[ j ] = geometry.colors[ vertexIndex ];
    }
}

有关详细信息,请查看关联的问题。