在THREE.js中按索引设置面部透明度

时间:2015-09-23 01:03:30

标签: three.js

我设法使用以下方法设置网格面的颜色:

geometry.faces[i].color.setHex('0xff00ff');

是否有将透明度设置为true而不透明度设置为0.5的功能? 我确定有一个,只是不知道语法。

1 个答案:

答案 0 :(得分:5)

实际上,您无法通过更改几何体来实现这一目标。因为透明度受材料控制。

但是有办法做到这一点。

首先,每张脸都有materialIndexFace manual)。

接下来,在three.js场景中绘制的每个网格都有材质。还有THREE.MeshFaceMaterialMeshFaceMaterial 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深处出现尴尬错误