【发布时间】:2026-02-10 07:55:02
【问题描述】:
我有一个 THREE.js 场景,其中出现了很多元素,我需要检测用户点击的是什么对象。
到目前为止,我所做的如下。相机不会移动太多 - 它只会改变有限的垂直位置,始终朝向同一点。我的大致方法如下:
- 如果点击相对于画布,我会获取坐标
- 我通过简单的重新缩放将它们转换为 webGL 场景中的水平和垂直坐标,并添加一个足够远的 Z 坐标。
- 我从上面的点开始拍摄水平射线,由 THREE.Ray() 构造
- 我使用 ray.intersectObjects() 来查找沿射线的第一个元素。
这种方法大致可行,但有时距离实际点有几个像素。
是否有更可靠的技术来找出用户点击的对象?
【问题讨论】:
-
边距和填充可能会导致您的坐标有点偏移。你解释了吗?
-
目前在演示中没有边距和内边距,但我描述的技术并不准确。
-
谢谢,这正是我需要的。我不知道
projector.unprojectVector()。在后来的版本中,我尝试自己取消投影矢量,考虑到它与相机形成的角度,我可以找到它,因为我知道 fov,但它没有按预期工作。顺便说一句,在将向量传递给 Ray 构造函数之前对向量进行规范化是有原因的吗?归一化后方向不会改变。
标签: javascript three.js