7

在 OpenGL 上下文中,我已经看到可以将鼠标坐标转换为 3D 世界坐标(例如,使用 Opengl 的 MFC 从鼠标的 2d 坐标获取 3d 坐标)。但是,当我只有一组 s 和大量空白空间时,这不起作用GLPoint:当我将鼠标悬停在空白空间上时,3D 坐标没有意义。

如何获得离鼠标位置最近的 3D 点的坐标?

4

1 回答 1

3

认识到将 2D 鼠标坐标“取消投影”到 3D 世界中需要额外的信息。屏幕上的 2D 位置对应于 3D 中从近平面到远平面的一条线上的无限数量的点。这意味着要获得 3D 点,您还需要提供深度值。

gluUnProject函数是执行此操作的便捷方式,并为此提供了一个参数winZ。0.0 会在近平面找到 3D 点,1.0 会在远平面找到它。

gluUnProject(winX, winY, winZ, model, proj, view, objX, objY, objZ);

注意:如果gluUnProject不可用,您可以使用矩阵很容易地计算出同样的事情。来源这里

当鼠标用于与 3D 对象交互时,此深度值通常是通过从深度缓冲区中采样,或与场景几何体或图元(如球体或盒子)相交的光线来找到的。如果目标是与点交互,您可以在每个点周围使用一个球体。如果您只想要“某处”的 3D 点,您可以决定深度值(可能是近平面上的 0.0 或 0.5 - 在近平面和远平面之间的中间)。

于 2015-09-18T18:21:42.690 回答