1

我有由许多顶点和面(网格)组成的 Three.Geometry 对象。我想动态更改所选面的颜色或材质。

geometry.colorsNeedUpdate = true; 
geometry.faces[1].color.setHex(0xcccccc);   //this doesn't work

上面的代码使新的颜色不透明度变得奇怪。它的行为就像它不会替换颜色,而是将新颜色与旧颜色混合。因此,用较浅的颜色覆盖较深的颜色是不可能的。如何解决这个问题?我的材料确实适用:

mat = new THREE.MeshBasicMaterial({color:"white",shading: THREE.FlatShading,side: THREE.DoubleSide,vertexColors: THREE.FaceColors, needsUpdate : true});

我想做的另一种方法也是更改对其他材料的引用:

geometry.faces[0].materialIndex = 1; // works only when disabled OpenGL in browser

已经 set material.needsUpdate flag to true 检查 过 https://github.com/mrdoob/three.js/wiki/Updates

仍然没有变化。

4

1 回答 1

1

你正在混合苹果和橙子。不要同时使用两种面部颜色MeshFaceMaterial

首先,在 WebGLRenderer 中,您无法materialIndex在网格渲染一次后更改面。但是,您可以更改材质阵列中的一种材质。

您需要使用MeshBasicMaterial网格材料,并指定vertexColors: THREE.FaceColors. 这样您就可以控制每种面部颜色。确保初始化每种面部颜色,以便获得棋盘图案。还将材质颜色设置为0xffffff,否则您将看到您试图避免的乘法效果。

三.js r.58

于 2013-07-07T18:11:03.230 回答