Tôi đang cố thay đổi màu trên một mặt của lưới. Đây là ngữ cảnh WebGL. Tôi có thể thay đổi toàn bộ màu lưới, không chỉ là một khuôn mặt. mã có liên quan dưới đây:Cách thay đổi màu mặt trong 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;
}
}
Tôi cũng khởi tạo đối tượng, trong trường hợp này một Cube như sau:
// 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);
Thay đổi vật liệu làm cho các khối lập phương trắng không phụ thuộc vào màu sắc ánh sáng. Logic giao lộ vẫn hoạt động, nghĩa là tôi chọn đúng khuôn mặt, nhưng màu sắc không thay đổi.
Tôi mới đến Stackoverflow [cũng hỏi một câu hỏi có nghĩa là, vì vậy hy vọng sửa của tôi không phải là khó hiểu]
Làm việc trong r65. –
Điều này đã cho tôi gần gũi, nhưng cần thiết để thêm 'geometry.colorsNeedUpdate = true' – twmulloy