2013-04-23 81 views
5

我使用OBJLoader加载的模型,这里是加载OBJ文件中的代码:如何让鼠标在从OBJLoader加载的obj文件上点击位置?

 var loader = new THREE.OBJLoader(); 
     loader.load('obj/teeth/teeth4_5.obj', function(object) { 
      model = object; 
      scene.add(model); 
      objects.push(model); 
     }); 

而且我试图用raycaster找到交集。我使用canvas.interactive_cubes示例(http://mrdoob.github.io/three.js/examples/canvas_interactive_cubes.html)在three.js中实现了我的代码。这里是找到交集的代码:

function onDocumentMouseDown(event){ 
     event.preventDefault(); 
     var mouseX = (event.clientX/window.innerWidth)*2-1; 
     var mouseY = -(event.clientY /window.innerHeight)*2+1; 
     var vector = new THREE.Vector3(mouseX, mouseY, 0.5); 
     projector.unprojectVector(vector, camera); 
     var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 
     var intersects = raycaster.intersectObjects(scene.children); 
     console.log(intersects[0].point); 
    } 

不幸的是,我没能获得在x,y,路口的Z坐标,无论身在何处,我点击,它总是显示“类型错误:相交[0 ]未定义“。

我在这里呆了好几天。有人可以告诉我一种方法来获得加载的obj文件的交集吗?我感谢您的帮助。

回答

8

尝试添加递归标志,像这样:

var intersects = raycaster.intersectObjects(objects, true); 

three.js所r.58

+0

WOW,它的工作原理...这是那么容易。好像我问了一个愚蠢的问题。在一个大的obj文件上找到交点需要很长的时间。非常感谢您的回答! – user2309002 2013-04-23 04:17:52

+0

我已经在这上面花了2个小时。加',true'就行了。我从来没有在我研究过的几个例子中看到它。谢谢 ! – 2015-06-15 11:41:17

相关问题