三个js Raycasting拦截粒径减小的粒子

时间:2014-11-12 13:02:00

标签: javascript three.js particle-system raycasting

我正在尝试使用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,但它假设我知道每个粒子的大小,我不知道。我只知道初始(非衰减)大小。

非常感谢。

0 个答案:

没有答案