2013-01-09 62 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