我设法使用以下方法设置网格面的颜色:
geometry.faces[i].color.setHex('0xff00ff');
是否有将透明度设置为true而不透明度设置为0.5的功能? 我确定有一个,只是不知道语法。
答案 0 :(得分:5)
实际上,您无法通过更改几何体来实现这一目标。因为透明度受材料控制。
但是有办法做到这一点。
首先,每张脸都有materialIndex
(Face manual)。
接下来,在three.js场景中绘制的每个网格都有材质。还有THREE.MeshFaceMaterial
(MeshFaceMaterial manual)类型的特殊材料,它将材料数组作为参数。
绘制面时,three.js渲染器采用face的materialIndex并使用此材质数组中的相应材质,或者,如果网格包含单一材质类型。
所以你可以这样做:
var opacMaterial = new THREE.MeshLambertMaterial({
transparent:true,
opacity:0.7
});
var solidMaterial = new THREE.MeshLambertMaterial({
transparent:false,
color:new THREE.Color(1,0,0)
});
var mesh = new THREE.Mesh(
geometry,
new THREE.MultiMaterial([solidMaterial, opacMaterial])
);
默认情况下,如果几何体的每个面都有materialIndex == 0
,则会看到绘制的solidMaterial。
如果你想让它透明做这样的事情;
geometry.faces[i].materialIndex = 1;
不要忘记更新网格中的几何体:(How to update geometry in mesh question.)
另外,请注意,如果您的面部materialIndex
大于材质数组的长度,则会在THREE.js深处出现尴尬错误