Hello,
I defined vertex and face data for a mesh box with a THREE.MeshPhongMaterial.
I would like change at runtime the material to vertex color. I add a keydown event listener.
When I press a key I saw the mesh became all white and I don’t understand why. Can you help me to fix it?
var geometry = new THREE.Geometry();
// define geometry for box
// define vertex data
geometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));
// ...
//define faces data
geometry.faces.push(new THREE.Face3(2, 1, 0 ));
// ...
geometry.dynamic = true;
geometry.computeFaceNormals();
geometry.computeVertexNormals();
var material = new THREE.MeshPhongMaterial( { color: 0xA05E5B} );
mesh = new THREE.Mesh( geometry, material );
mesh.name = "cube";
document.addEventListener('keydown', (event) => {
for (var j = 0; j < scene.children.length; j++) {
var name = scene.children[j].name;
if (name=="cube")
{
for (var i = 0;i <8; i++)
{
var face = scene.children[j].geometry.faces[i];
face.vertexColors[0]=new THREE.Color(0xff0000); // red
face.vertexColors[1]=new THREE.Color(0x00ff00); // green
face.vertexColors[2]=new THREE.Color(0x0000ff); // blue
}
scene.children[j].material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors });
scene.children[j].geometry.colorsNeedUpdate = true;
}
}
}, false);