【发布时间】:2019-02-21 17:37:40
【问题描述】:
想象一下这个使用 OrthographicCamera 和 OrbitControls 设置的 three.js 场景:
当用户拖动黄色圆盘(代表太阳)时,圆盘需要沿着其黄色圆圈移动以响应此操作。这是另一个角度的场景,所以你可以看到完整的黄色圆圈:
因此,我的事件处理程序必须确定该圆上的哪个点最接近当前光标位置。顺便说一下,这个黄色圆圈是一个三网。
我使用THREE.Raycaster 来确定一些鼠标悬停事件,使用它的intersectObjects() 函数,但我不清楚如何使用这个Raycaster 找到单个对象的最近点。我猜在将鼠标的位置转换为世界坐标后,我可以做一些简单的数学运算。有人可以帮我弄这个吗? Three.js 的 Raycaster 在这里有用吗?如果不是,我如何确定这个网格的最近点?
完整的源代码在这里,如果有帮助:https://github.com/ccnmtl/astro-interactives/blob/master/sun-motion-simulator/src/HorizonView.jsx 搜索this.sunDeclination,对应黄色圆圈的Mesh对象。
如需工作演示,请访问此处:https://ccnmtl.github.io/astro-interactives/sun-motion-simulator/
作为参考,太阳的行为应该是这样的:https://cse.unl.edu/~astrodev/flashdev2/sunMotions/sunMotions068.html(需要 Flash)
【问题讨论】:
-
看看这个example。
标签: javascript three.js mouseevent raycasting