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