2016-04-08 36 views
0

Three.js具有獲取對象的點擊面並隨後突出顯示該面的示例。我想知道如何獲得整個物體而不是臉。如何獲取挑選的3D對象(而不是僅僅點擊臉)?

例如: 我有許多小行星都在一個緩衝區中呈現。我怎樣才能得到點擊小行星對象?

*更新*

我想我找到了一種方法來達到目的 '採摘'。實質上,我保留了內存中的對象列表。當選擇一個對象時,我使用該對象的點信息對列表中的所有對象執行碰撞檢測。在理論上,最接近相交點的物體應該是我需要的物體。

回答

0

有一個很好的例子here

可以實現,使用raycaster項目射線和檢測交叉點。

這是您需要用於拾取物體的部分代碼。

// find intersections 

      raycaster.setFromCamera(mouse, camera); 

      var intersects = raycaster.intersectObjects(scene.children); 

      if (intersects.length > 0) { 

       if (INTERSECTED != intersects[ 0 ].object) { 

        if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex); 

        INTERSECTED = intersects[ 0 ].object; 
        INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex(); 
        INTERSECTED.material.emissive.setHex(0xff0000); 

       } 

      } else { 

       if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex); 

       INTERSECTED = null; 

      } 

      renderer.render(scene, camera); 

更新1: 如果所有對象都合併到一個單一的BufferGeometry:

  • 有一個看看這個例子:webgl_interactive_buffergeometry
  • 會告訴你如何挑選面孔,而不是對象。所以我的猜測是:

    //pseudo code 
    foreach(object in bufferGeometry){ 
        foreach(face in object){ 
         face.addAttribute (name[object], attribute[object]) 
        } 
    } 
    

因此,對於每個對象的創建自定義屬性,並將它傳遞給它的面孔,你可以:

  • 相交臉

  • 獲取其自定義屬性

  • 選擇具有該屬性的所有面 - >對象牛逼

我沒有測試過,但我想它應該工作,讓我知道:)

+0

但將在得到我的具體挑選對象,它是在一個緩衝的幾何? – AlvinfromDiaspar

相關問題