Tengo algunos objetos agregados a un Object3D (para agrupar elementos) e intento detectar clics en él. Mi escena tiene un tamaño de 600x400
, mi cámara está dentro de un período de tres a objetos y mi código de controlador de eventos se parece a continuación:Intersección dentro de Object3D
function onDocumentMouseDown(event) {
event.preventDefault();
var mouse = {};
mouse.x = (event.clientX/600) * 2 - 1;
mouse.y = - (event.clientY/400) * 2 + 1;
var vector = new THREE.Vector3(mouse.x, mouse.y, 1);
projector.unprojectVector(vector, three.camera);
var ray = new THREE.Ray(three.camera.position, vector.subSelf(three.camera.position).normalize());
var intersects = ray.intersectObjects(group.children);
alert(intersects.length);
[...]
}
En realidad estoy alertando al recuento de objetos intersectados. Pero permanece cero. No pudo encontrar ningún objeto intersectado. Ya he jugado un poco armónico con los valores x, y y z de mi vector de proyección, sin éxito.
He agregado una muestra reducida para demostrar este problema en jsfiddle. Tal vez alguien tiene una pista breve para mí, ¿qué pasa?
Ah bien - muchas gracias! Pero ahora detecta los 3 Cubos como un solo objeto. También traté de usar una matriz de objetos personalizada y agregué los cubos, pero el resultado es el mismo. ¿Hay alguna forma de detectar cada cubo individual? –
¿Puedes hacer una nueva publicación y explicar tu problema con más detalle? – WestLangley
He encontrado la solución: Todos los MultiMaterialObjects tienen la misma instancia de material, por lo que un cambio de color del material ha afectado a todos los objetos. Entonces ahora está claro. ¡Muchas gracias! –