我正在尝试使用Raycaster拦截PointCloud对象中的粒子。
正在创建点云:
... other initializations, like the scene object...
var geometry = new THREE.Geometry();
var sprite = THREE.ImageUtils.loadTexture("myAwesomeIcon");
for (i = 0; i < 100000; i++) {
var vertex = new THREE.Vector3();
vertex.x = 15000 * Math.random() - 1000;
vertex.y = 15000 * Math.random() - 1000;
vertex.z = 15000 * Math.random() - 1000;
geometry.vertices.push(vertex);
}
var material = new THREE.PointCloudMaterial({
size : 30,
sizeAttenuation : true,
map : sprite,
transparent : true
});
var particles = new THREE.PointCloud(geometry, material);
particles.sortParticles = true;
scene.add(particles);
反过来,raycaster就是这样创造的:
var raycaster = new THREE.Raycaster();
raycaster.params.PointCloud.threshold = 15;
然而,鉴于我希望粒子的大小根据相机的接近度(sizeAttenuation:true)而改变,我需要阈值参数来“适应”每个粒子。
现在,它可能过早地检测到粒子(当它离相机很近时),或者太晚(当它距离相机更远时)。太快/太晚我的意思是关于粒子上的鼠标位置。
我在网上发现this solution,但它假设我知道每个粒子的大小,我不知道。我只知道初始(非衰减)大小。
非常感谢。