Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript three.js:查找网格到鼠标光标的最近点_Javascript_Three.js_Mouseevent_Raycasting - Fatal编程技术网

Javascript three.js:查找网格到鼠标光标的最近点

Javascript three.js:查找网格到鼠标光标的最近点,javascript,three.js,mouseevent,raycasting,Javascript,Three.js,Mouseevent,Raycasting,想象一下这个three.js场景,设置了正交摄影机和轨道控制: 当用户拖动黄色光盘(表示太阳)时,光盘需要沿其黄色圆圈移动以响应此操作。这是另一个角度的场景,因此您可以看到完整的黄色圆圈: 因此,我的事件处理程序必须确定此圆上最靠近当前光标位置的点。顺便说一句,这个黄色的圆圈是三个网格 我使用它的intersectObjects()函数来确定一些鼠标悬停事件,但我不清楚如何使用该光线投射器找到单个对象的最近点。我猜在把鼠标的位置转换成世界坐标后,我可以做一些简单的计算。有人能帮我吗?js的R

想象一下这个three.js场景,设置了正交摄影机和轨道控制:

当用户拖动黄色光盘(表示太阳)时,光盘需要沿其黄色圆圈移动以响应此操作。这是另一个角度的场景,因此您可以看到完整的黄色圆圈:

因此,我的事件处理程序必须确定此圆上最靠近当前光标位置的点。顺便说一句,这个黄色的圆圈是三个网格

我使用它的
intersectObjects()
函数来确定一些鼠标悬停事件,但我不清楚如何使用该光线投射器找到单个对象的最近点。我猜在把鼠标的位置转换成世界坐标后,我可以做一些简单的计算。有人能帮我吗?js的Raycaster在这里有用吗?如果不是,如何确定此网格的最近点

完整的源代码在这里,如果有帮助的话:搜索
this.sundeclation
,它对应于黄色圆圈的网格对象

要获得有效演示,请点击此处:

作为参考,太阳的行为应该如下:(需要闪光灯)

最简单的版本:

  • 在磁盘上获得一个点
  • 在圆的平面上做一个投影
  • 知道圆的半径后,计算向量乘以标量的乘数


[]

光线投射器返回被光线击中的所有对象。。世界空间中的所有生命点。。(可以通过object3d.worldToLocal和localToWorld与模型空间进行转换)

它返回命中距离。。你可以根据你需要的启发进行排序

我通常做的是在mouseDown。。记录物体和点。。然后在mouseMove上获得相同的对象命中点,并使用这两个点之间的差异应用我的编辑操作


这就是你说的吗?

看看这个。哦,是的,我可以把轨道圆想象成一个实心圆盘。谢谢,我会实现这个,看看它是如何工作的。好的,我知道这个过程。但是在我的例子中,在mouseMove上,我如何得到黄色圆圈上离鼠标位置最近的点?
var point = res.point.clone();
point.z = 0; // Project on circle plane
var scale = circleRadius / point.length();
point.multiplyScalar(circleRadius / point.length())