更改网格面的材质或颜色

Change material or color in mesh face

本文关键字:颜色 网格      更新时间:2023-09-26

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

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

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

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

仍然没有变化。

你在把苹果和桔子混合。不要同时使用面部颜色和MeshFaceMaterial

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

需要使用MeshBasicMaterial作为网格材质,并指定vertexColors: THREE.FaceColors。这样你就可以控制每一张脸的颜色。一定要在每个脸的颜色上加上首字母,这样你就可以得到棋盘图案了。同时将材质颜色设置为0xffffff,否则您将看到您试图避免的倍增效果。

three.js r.58