2015-01-29 2 views
2

У меня есть объект 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, тогда как я бы хотел, чтобы она была только вокруг щелкнутой точки.

Возможно ли это, и если да, то как я могу это сделать?

Большое спасибо за помощь!

ответ

2

Проверьте эти примеры, они помогут вам работать с частицами облаков точек /:

webgl_interactive_particles и webgl_interactive_raycasting_pointcloud.

С помощью intersects[0].index вы можете найти индекс точки, которую вы пересекли. Таким образом, вы можете использовать этот индекс, чтобы найти свою точку:

var index = intersects[0].index; 
var point = particles.geometry.vertices[ index ]; 

Как вы уже сказали, чтобы иметь возможность рисовать BoundingBox вам нужно Object3D. Единственная частица - это только точка в пространстве, поэтому рисование BoundingBox вокруг этой точки фактически будет коробкой с размером 0. Так что с этой частью я не могу вам помочь.

Смежные вопросы