OpenGL将最近世界3D的3D坐标指向当前鼠标位置

时间:2015-04-28 07:07:27

标签: c++ opengl 3d mouse-picking

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

如何获取最近的3D点到我鼠标位置的坐标?

1 个答案:

答案 0 :(得分:3)

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

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

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

注意:如果gluUnProject不可用,您可以使用矩阵轻松找出相同的内容。 source here

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