更改网格面中的材质或颜色

时间:2013-07-06 15:51:08

标签: javascript three.js webgl

我有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

仍然没有变化。

1 个答案:

答案 0 :(得分:1)

你正在搅拌苹果和橘子。不要同时使用面部颜色和MeshFaceMaterial

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

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

three.js r.58