2

我有一个简单的平面网格,我想在运行时更改脸部的颜色(实际上是当角色走过“地砖”时)。

我尝试以下方法:

face.color.setRGB(Math.random(), Math.random(), Math.random());

这适用于CanvasRenderer,但是当我切换到WebGLRenderer,它停止工作。

我尝试设置geometry.colorsNeedUpdate标志,但没有成功,网格和几何设置为dynamic,我还缺少什么吗?

(使用 Three.js r59)

谢谢,

菲尔。

4

3 回答 3

7

对于WebGLRenderer,这是您需要遵循的模式THREE.Geometry

为每个面指定颜色。

for ( var i = 0; i < geometry.faces.length; i ++ ) {
    geometry.faces[ i ].color.setHex( Math.random() * 0xffffff );
}

设置vertexColors = THREE.FaceColors在材料中。

material = new THREE.MeshPhongMaterial( { color: 0xffffff, vertexColors: THREE.FaceColors } );

colorsNeedsUpdate变色后设置。

mesh.geometry.colorsNeedUpdate = true;

三.js.r.76

于 2013-07-25T15:23:17.140 回答
1

根据几何文档,要在此面中发出更新信号,Geometry.elementsNeedUpdate需要设置为 true。

下面的代码片段改变了所有面孔的颜色。

var faces = mesh.geometry.faces;

for(var i = 0 ; i < faces.length; i++){
  var face = faces[i];
  var color = new THREE.Color("rgb(255, 0, 0)");
  face.color = color;
}

mesh.geometry.elementsNeedUpdate = true;

render();
于 2017-06-26T19:11:30.067 回答
0

你试过geometry.colorsNeedUpdate = true;代替needsColorUpdate吗?

于 2013-07-25T14:05:25.933 回答