1

我正在构建一个简单的 3D 拖放界面进行处理,并希望检测鼠标何时滑过一个对象。我想我需要对 3D 模型坐标进行一些矩阵转换,以将它们放入屏幕空间等等......

我有这个工作的简单版本,问题是当相机在场景中移动时,我得到的坐标会变得混乱。

那么如何将平铺坐标转换为屏幕空间(因为 screenX 和 screenY 无法正常工作)?

更新: 我最终从处理站点中找到了两个关于如何执行此操作的示例。感谢villintehaspam

http://processing.org/hacks/hacks:picking

4

1 回答 1

3

这个问题被称为拣选。搜索鼠标选择,你会得到很多很多的点击。

基本理论是这样的:

  1. 通过鼠标单击获取 x,y 坐标。
  2. 将这些转换为眼睛坐标中的 x、y、z 坐标(即 -1 <= x <= 1、-1 <= y <= 1、z=近/远剪辑距离,如果您有正常投影)。
  3. 通过投影矩阵的倒数变换这些坐标以获得世界坐标。
  4. 你现在有一条来自相机位置的射线,其方向指向你刚刚获得的世界坐标。
  5. 使用您要考虑的对象进行射线-对象相交测试。选择与最接近光线原点(相机位置)的光线相交的对象。
于 2010-02-05T19:53:12.820 回答