У меня есть объект PointCloud
, который отображает несколько точек. Я хотел бы иметь возможность нарисовать ограничительную рамку вокруг щелкнутой точки. К сожалению, я не могу понять, как получить доступ к отдельной точке в пределах PointCloud
, если это возможно.Raycasting с участием отдельных точек в Three.js PointCloud
Это код raycasting Я использую ...
window.addEventListener('dblclick', function (ev) {
var mouse = { x: 1, y: 1 };
mouse.x = (event.clientX/window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY/window.innerHeight) * 2 + 1;
var raycaster = new THREE.Raycaster();
raycaster.params.PointCloud.threshold = 15;
var vector = new THREE.Vector3(mouse.x, mouse.y, 0.5).unproject(camera);
raycaster.ray.set(camera.position, vector.sub(camera.position).normalize());
scene.updateMatrixWorld();
var intersects = raycaster.intersectObject(particles);
if (intersects.length > 0) {
console.log(intersects[0]);
var hex = 0x000000;
var bbox = new THREE.BoundingBoxHelper(intersects[0], hex);
bbox.update();
scene.add(bbox);
} else {
// do nothing
}
}
);
я могу получить доступ к координатам точки клика, используя intersects[0].point.x
. Но прохождение intersects[0]
до BoxHelper
явно не работает, потому что intersects[0]
не является Object3D
. Точно так же, если я использую intersects[0].object
, это рисует коробку вокруг всего PointCloud
, тогда как я бы хотел, чтобы она была только вокруг щелкнутой точки.
Возможно ли это, и если да, то как я могу это сделать?
Большое спасибо за помощь!