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,你会发现它们都有不同的颜色,但我不明白为什么它在二十面体的情况下不起作用,但是在立方体上完美运作。
感谢任何帮助:)
答案 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 } ) );