使用正交相机将鼠标点击转换为 3d space

convert mouse click to 3d space with orthographic camera

Three.js:版本 73

我正在使用以下构造来查找鼠标单击与 3d 世界中对象的交集(正交设置):

function onDocumentMouseDown(event) {
  event.preventDefault();
  console.log("Click");

  var mouse = new THREE.Vector2();
  mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;

  var raycaster = new THREE.Raycaster();
  // update the picking ray with the camera and mouse position 
  raycaster.setFromCamera(mouse, camera);

  // calculate objects intersecting the picking ray
  var intersects = raycaster.intersectObjects(scene.children);

  console.log("intersects: " + intersects.length);

  for (var i = 0; i < intersects.length; i++) {
    console.log(intersects[i].point);
  }

}

但是,交集很不准确。当我仅在框的左上角附近单击时,会捕获交叉点。

jsFiddle:谁能帮我理解为什么会这样?

此外,如果未选择任何对象,我想找出 3d 世界中相对于框的点击位置 - 左侧、右侧、框下方?我可以使用射线本身来计算吗?

您必须为 ray-casting 获得准确的鼠标位置:-

  mouse.x = ( (event.clientX -renderer.domElement.offsetLeft) / renderer.domElement.width ) * 2 - 1;
   mouse.y = -( (event.clientY - renderer.domElement.offsetTop) / renderer.domElement.height ) * 2 + 1;

你必须在 window 调整大小时触发事件侦听器 我再次更新 fiddle 现在检查它。 添加 window 调整大小的新功能... 代码是自我解释的...希望你明白了。

现在检查更新 Fiddle

已更新fiddle:- http://jsfiddle.net/gc1v0rza/5/