Estoy intentando cambiar el color de una sola cara de una malla. Esto está en un contexto WebGL. Puedo cambiar todo el color de la malla, solo una cara. código correspondiente a continuación:Cómo cambiar el color de la cara en Three.js
// Updated Per Lee!
var camera = _this.camera;
var projector = new THREE.Projector();
var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, - (event.clientY/window.innerHeight) * 2 + 1, 0.5);
projector.unprojectVector(vector, camera);
var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var intersects = ray.intersectObjects(kage.scene.children);
if (intersects.length > 0) {
face = intersects[0].face;
var faceIndices = ['a', 'b', 'c', 'd'];
var numberOfSides = (face instanceof THREE.Face3) ? 3 : 4;
// assign color to each vertex of current face
for(var j = 0; j < numberOfSides; j++) {
var vertexIndex = face[ faceIndices[ j ] ];
// initialize color variable
var color = new THREE.Color(0xffffff);
color.setRGB(Math.random(), 0, 0);
face.vertexColors[ j ] = color;
}
}
También inicializar el objeto, en este caso un cubo de la siguiente manera:
// this material causes a mesh to use colors assigned to vertices
var material = new THREE.MeshBasicMaterial({
color: 0xf0f0f0,
shading: THREE.FlatShading,
vertexColors: THREE.VertexColors
});
var directionalLight = new THREE.DirectionalLight(0xEEEEEE);
directionalLight.position.set(10, 1, 1).normalize();
kage.scene.add(directionalLight);
var cube = new THREE.Mesh(new THREE.CubeGeometry(300, 300, 300,1,1,1), material);
cube.dynamic = true;
kage.scene.add(cube);
Cambio del material hace que el cubo blanco sin importar el color de la luz. La lógica de intersección sigue funcionando, lo que significa que selecciono la cara correcta, pero desafortunadamente el color no cambia.
Soy nuevo en Stackoverflow [así haciendo una pregunta que es, así que espero que mis ediciones no son confusas]
Trabajando en r65. –
Esto me acercó, pero necesitaba agregar 'geometry.colorsNeedUpdate = true' – twmulloy