2011-12-12 78 views
0

我正嘗試使用three.js創建粒子,當前是粒子系統。 該項目的目標是創建具有定義的位置和唯一ID的粒子,並添加一個選項以選擇多個粒子並檢索其ID。Particle ID和檢索Three.js中的多個ID

我做了一些研究,但發現只有方法來檢測鼠標點擊的位置。

於是,我找了以下信息:

第一:是否有分配ID單粒子(爲簡單的數字)的選項? 第二:有沒有辦法選擇多個粒子並在(彈出)窗口中查看它們的ID?

感謝您的幫助!我發現,你可以分配ID到THREE.ParticleDOMMaterial(我不知道,這個函數做什麼!?)和THREE.ParticleBasicMaterial(分配一個ID給材料,但不是粒子本身)。

+0

你好,我正在努力實現同樣的事情..你結束了這個工作嗎? – Linus

回答

1

所有Object3D實例默認情況下在three.js中都有一個唯一的ID,並且Particle繼承該實例。另外Object3D有一個名稱屬性,如果有幫助。

這裏有一個小片斷這說明命名顆粒:

for (var i = 0; i < 100; i++) { 

        particle = new THREE.Particle(new THREE.ParticleCanvasMaterial({ color: Math.random() * 0x808008 + 0x808080, program: program })); 
        particle.name = "particle"+i; 
        particle.position.x = Math.random() * 2000 - 1000; 
        particle.position.y = Math.random() * 2000 - 1000; 
        particle.position.z = Math.random() * 2000 - 1000; 
        particle.scale.x = particle.scale.y = Math.random() * 10 + 5; 
        group.add(particle); 
       } 

,這裏是它打印在控制檯中點擊粒子的名稱和ID鼠標按下事件處理的例子:

function onDocumentMouseDown(event) { 

       event.preventDefault(); 

       var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, - (event.clientY/window.innerHeight) * 2 + 1, 0.5); 
       projector.unprojectVector(vector, camera); 

       var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 

       var intersects = ray.intersectScene(scene); 

       if (intersects.length > 0) { 

        console.log("you clicked particle named '" + intersects[0].object.name + "' with id: " + intersects[0].object.id); 

       } 

      } 

Goodluck!

+0

jsfiddle的機會嗎? ;)我無法運行此代碼;( – Eamorr