2013-01-09 59 views
3

我试图检测鼠标悬停在我的粒子系统中的某个粒子上。我在做检测是这样的,并且每一帧上运行:如何检测three.js中的粒子系统中的粒子悬停?

function check_intersections() { 
    var vect = new THREE.Vector3(
     mouse.x, 
     mouse.y, 
     0.5 
    ); 
    projectr.unprojectVector(vect, camera); 

    var raycaster = new THREE.Ray(camera.position, vect.subSelf(camera.position).normalize()); 
    var intersects = raycaster.intersectObjects(particleSystem); 

    if (intersects.length > 0) { 

     //intersects[ 0 ].object.materials[ 0 ].color.setHex(Math.random() * 0xffffff); 
     noticeDiv.text('Intersection'); 

    } 
}` 

var这个粒子系统是我的粒子系统与数千颗粒物质,每当它的动作如鼠标的定义:

function onDocumentMouseMove(event) { 
    // update the mouse variable 
    mouse.x = (event.clientX/window.innerWidth) * 2 - 1; 
    mouse.y = - (event.clientY/window.innerHeight) * 2 + 1; 
} 

我看了几个例子,但似乎无法得到这一个权利。

+0

您应该接受下面的正确答案。 – buley

回答

3

Raycaster.intersectObjects(objects)适用于THREE.Particle的数组,但不适用于particleSystem

有关在CanvasRenderer中使用的示例,请参阅this example

WebGLRenderer不支持`THREE.Particle。

另外,看看Raycaster.js,让你明白它是如何工作的。

three.js r.54

+0

粒子系统和使用单个粒子之间的性能差异是什么?我的系统有大约3k个静止粒子,我想知道这是否太多,只为每个粒子制作一个粒子,但是我意识到我不知道关于性能的任何事情,我只是假设它会变得更糟。 – user1960196

+1

你将不得不做实验。 WebGLRender将具有最佳性能。请记住点击复选标记以“接受”答案。如果您还有其他问题,请发一个新帖子。谢谢。 – WestLangley