MeshFaceMaterial不处理某些几何

时间:2015-03-11 22:12:10

标签: javascript three.js

three.js所

我试图创建一个每面都有不同颜色的二十面体。

        var IcoGeom=new THREE.IcosahedronGeometry(1);
        var IcoCol=[];
        for (var i=0;i<IcoGeom.faces.length;i++) {
            IcoCol.push(new THREE.MeshBasicMaterial({color:SkyColorRandomizer()}));
        }
        var IcoMat=new THREE.MeshFaceMaterial(IcoCol);   
        var myObj=new THREE.Mesh(IcoGeom, IcoMat);

SkyColorRandomizer 只是一个返回随机颜色的函数。

现在,问题在于:它将所有二十面体颜色都相同(每次都是随机的),因此它不能按预期工作。现在,如果你将IcoGeom改为BoxGeometry,它可以很好地工作,并且可以用不同的颜色为立方体的面部着色,这很奇怪。另一件事是:如果你进入myObj.material.materials,你会发现它们都有不同的颜色,但我不明白为什么它在二十面体的情况下不起作用,但是在立方体上完美运作。

感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

如果您使用MeshFaceMaterial,则必须为每张脸分配materialIndex,如下所示:

geometry.faces[ i ].materialIndex = i;

然而,为每个脸部指定不同颜色的更好方法是设置脸部颜色:

geometry.faces[ i ].color.set( Math.random() * 0xffffff );

...

var mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors } ) );