使用Three.js,我有一堆线条的场景。当鼠标移动时,我使用标准raycaster方法检查鼠标是否与任何线相交。如果鼠标移动缓慢,这可以正常工作,但无法处理鼠标跳过一条线的情况,因为它正在快速移动。
如何使用Three.js找到所有与前一个鼠标位置的屏幕空间线相交的对象到当前鼠标位置?是否有任何内置的实用程序可以帮助解决这个问题?
我目前的做法是在线路上采集大量样本并使用raycaster测试所有样本,但这并不能解决问题。
答案 0 :(得分:0)
琐碎(低性能,但易于编码)的方法是创建一个平面(由每个鼠标点的光线给出)
检查线条的交叉点(=对象的边缘),
THREE.Plane.intersectLine()
然后丢弃不在鼠标点给出的光线之间的交叉点
一些简单的启发式算法可以减少候选对象的数量,只考虑边界球中心比半径更接近平面的对象
THREE.Plane.distanceToPoint(sphereCenter) < sphereRadius
你必须在开始和结束时将它与传统的光线投射相结合,以捕捉面部大于最终起始长度的物体