在OpenGL上下文中,我已经看到可以将鼠标坐标转换为3D世界坐标(例如
MFC with Opengl get 3d coordinate from 2d coordinate of mouse).但是,当我只有一组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);
注意:如果gluUnProject不可用,你可以很容易地用矩阵找出相同的东西. source here
当鼠标用于与3D对象交互时,通常通过从深度缓冲器采样,或使光线与场景几何体或基元(例如球体或框)相交来找到该深度值.如果目标是与点交互,则可以在每个点周围使用球体.如果你只想要一个“点在某处”的3D点,你可以决定一个深度值(在近平面上可能是0.0或在近平面和远平面之间的0.5 – 中间).