【发布时间】: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