2014-10-11 80 views
0

我需要使用raycaster仅与几何体的顶点相交而不与所有几何形状相交。我写了这段代码,但是如果我点击设置的vertice,什么都不会发生。Three.js raycaster仅相交形状的指定部分

  function onDocumentMouseClick(event) { 

      event.preventDefault(); 

      mouse2D.x = (event.clientX/window.innerWidth) * 2 - 1; 
      mouse2D.y = -(event.clientY/window.innerHeight) * 2 + 1; 

      raycaster = projector.pickingRay(mouse2D.clone(), camera); 

      var intersects = raycaster.intersectObjects(objects[0].geometry.vertices[0]);// I want intersection only with vertices 

      if (intersects.length > 0) { 

       console.log("ok");}  
+1

Raycaster.intersectObjects(对象,递归)期望对象的数组...所以不能使用单个顶点作为参数。如果你想优化更少的顶点,我想你必须创建只有你想测试的顶点的对象。我认为你需要使用对象,否则几何顶点不能正确转换。 – pixelmike 2014-10-12 04:41:26

+0

你有一个伟大的想法,谢谢。如何知道交叉点发生哪个顶点相交后? @pixelmike – 2014-10-12 12:17:42

回答

2

首先,你需要对象的数组传递给raycaster.intersectObjects,如建议通过pixelmike

var intersects = raycaster.intersectObjects([objects[0]]) 

你不能得到交叉口本身的顶点,但你可以得到的face每个路口:

for (var i = 0; i < intersects.length; i++) { 
    if (intersect.face == myTargetFace) { 
     console.log("ok"); 
    } 
} 

如果你真的想要的特定对象,只检查与交叉面的特定子集,Y您可以覆盖该对象的raycast方法(a la https://github.com/mrdoob/three.js/blob/master/src/objects/Mesh.js#L56-L340)以仅搜索这些面。

three.js所R68