2016-04-08 37 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

相关问题