【问题标题】:Intersection via orthographic camera通过正交相机相交
【发布时间】:2019-10-07 12:30:53
【问题描述】:

我在我的项目中使用正交相机。我的问题是光线投射器。它工作正常,但不正确。对象不会在其所有宽度或高度上拾取。有时它只适用于对象的一半。但是当我通过轨道控制移动相机时,raycaster 可以正常工作。我忘了说我使用 GPUpicker 库

我的项目:https://alovert.ru

默认相机为透视,若要切换为正交,请按键盘上的“O”。

要查看问题,您必须单击立方体侧面和光束的较小侧面。通过这种方式,您可以将新对象添加到场景中。当您尝试添加新对象时,您会看到对象的某些部分在您移动相机之前没有相交。使用透视相机可以正常工作。我很感激任何帮助!


我的代码交集

function onMouseClick(e) {
  e.preventDefault();

  mouse.x = e.clientX;
  mouse.y = e.clientY;
  var raymouse = new THREE.Vector2();
  raymouse.x = ((event.clientX - renderer.domElement.offsetLeft) / renderer.domElement.width) * 2 - 1;
  raymouse.y = - ((event.clientY - renderer.domElement.offsetTop) / renderer.domElement.height) * 2 + 1;

  raycaster.setFromCamera(raymouse, activeCamera);

  var intersect = gpuPicker.pick(mouse, raycaster);
}

【问题讨论】:

  • 好问题 Arkadiy Vinkovskiy。
  • 我建议您打印或渲染光线和物体之间的碰撞点。如果可能的话,尝试以某种方式渲染光线,以便您可以看到它在空间中的移动方式。我不知道 gpupicker 是做什么的,但可能存在您的光线和物体在计算中处于不同视角的问题,导致一些光线错过目标。
  • 感谢您的回答!但是你能代表一些演示代码吗?我是三个 js 的新手
  • 我查看了你的鼠标移动和鼠标点击源代码。您是否有任何特殊原因对鼠标移动和鼠标点击进行不同的光线投射?第一步,我建议您像鼠标移动光线投射一样进行 mouseClick 光线投射。看看这是否能解决问题。
  • 不,这是一个实验。我现在正在做我的项目。请再看一遍。当我使用鼠标移动中的代码时,不会将新对象添加到场景中。你现在可以试试吗? @Marko Taht

标签: javascript three.js


【解决方案1】:

请看这个例子: https://threejs.org/examples/#webgl_interactive_cubes_ortho

代码: https://github.com/mrdoob/three.js/blob/master/examples/webgl_interactive_cubes_ortho.html

试试这个:


var camera = new THREE.OrthographicCamera(0, window.innerWidth, -window.innerHeight, 0, -100, 100);

var raycaster = new THREE.Raycaster(); // create once
var mouse = new THREE.Vector2(); // create once

...

mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

raycaster.setFromCamera( mouse, camera );

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

【讨论】:

  • 我设置为-1000的时候好像“near”参数没有变化,还是0
【解决方案2】:

要解决这个问题,只需添加这一行 raycaster.ray.origin.set( mouse.x, mouse.y, - 1 ).unproject( camera );

【讨论】:

猜你喜欢
  • 2021-07-30
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多