man*_*tta 7 c++ opengl 3d mouse-picking
在OpenGL上下文中,我已经看到可以将鼠标坐标转换为3D世界坐标(例如,带有Opengl的MFC从鼠标的2d坐标获得3d坐标).但是,当我只有一组GLPoints和大量空白空间时,这不起作用:当我将鼠标悬停在空白区域时,3D坐标没有任何意义.
如何获取最近的3D点到我鼠标位置的坐标?
认识到将 2D 鼠标坐标“反投影”到 3D 世界需要附加信息。屏幕上的 2D 位置对应于 3D 中从近平面到远平面的一条线上的无限多个点。这意味着要获取 3D 点,您还需要提供深度值。
该gluUnProject函数是执行此操作的便捷方法,并为此提供了一个参数winZ。0.0 将在近平面处找到 3D 点,1.0 将在远平面处找到它。
gluUnProject(winX, winY, winZ, model, proj, view, objX, objY, objZ);
Run Code Online (Sandbox Code Playgroud)
注意:如果gluUnProject不可用,您可以使用矩阵轻松计算出相同的结果。来源在这里
当使用鼠标与 3D 对象交互时,通常通过从深度缓冲区采样或将光线与场景几何体或基元(例如球体或盒子)相交来找到此深度值。如果目标是与点交互,您可以在每个点周围使用球体。如果您只想要“某处”的 3D 点,您可以决定深度值(可能是近平面上的 0.0 或 0.5 - 近平面和远平面之间的中间值)。