有没有一种方法可以通过单击鼠标来设置轨道控制目标?

时间:2020-01-10 09:19:57

标签: javascript three.js

我试图在three.js中设置轨道控制目标。例如在https://threejs.org/editor/中,当您添加任何立方体或形状时,除非平移相机,否则相机始终围绕模型的中心旋转,并且相机仍将围绕(0,0,0)旋转。 现在,我试图从轨道控制中获得的行为是,单击鼠标,我应该能够设置轨道控制的目标。 为此,我正在使用raycaster,然后在鼠标按下事件中获取对象的位置/中心,然后在此处设置轨道控件的目标,并且在发生单击和移动时效果很好,因为它将目标恰好设置在摄像头前。 但是问题出在当目标设置在其他地方时,用户正在放大模型(我已经实现了对光标的缩放)/平移模型,然后在没有单击另一侧的新对象的情况下,用户单击了空白区域并进行了鼠标移动,立即,我看到控件和摄像机跳到上一个目标。

即使空间为空白,我也想精确地将鼠标指针设置为轨道控件的目标。我怎么能得到那东西?

我尝试以2D方式获取鼠标指针,然后将其从摄影机中取消投影以获取3D坐标,但这就是将轨道目标设置在摄影机的近平面附近。如果用户碰到模型的空白部分,我将无法获得应传递给轨道目标的值。

1 个答案:

答案 0 :(得分:1)

您找到的解决方案是正确的。您只需要使目标距摄像机位置更远,即从摄像机到网格的距离即可。

我在这里举了一个小例子; https://jsfiddle.net/EthanHermsey/x5p6gswu/8/

sudo ONE_TIME_DOWNLOAD_KEY=YOUR_UNIQUE_DOWNLOAD_KEY_HERE bash -c "$(curl -L https://onboarder.prod.ws.r3.com/api/user/node/TESTNET/install.sh)"