OpenGL获取离当前鼠标位置最近的世界三维点的三维坐标

OpenGL get 3D coordinates of nearest world 3D point to the current mouse Location

本文关键字:三维 世界 坐标 最近 位置 获取 鼠标 OpenGL      更新时间:2023-10-16

在OpenGL环境中,我看到可以将鼠标坐标转换为三维世界坐标(例如,使用OpenGL的MFC从鼠标的二维坐标获得三维坐标)。然而,当我只有一组GLPoint和大量空白时,这是不起作用的:当我将鼠标悬停在空白上时,3D坐标没有意义。

如何获取离鼠标位置最近的三维点的坐标?

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

gluUnProject函数是实现这一点的方便方法,并为该winZ提供了一个参数。0.0将在近平面上找到3D点,而1.0将在远平面上找到它。

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

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

当鼠标用于与3D对象交互时,通常通过从深度缓冲区采样、将光线与场景几何体或基本体(如球体或长方体)相交来找到此深度值。如果目标是与点交互,可以在每个点周围使用一个球体。如果你只想在"某个地方"找到一个三维点,你可以决定一个深度值(可能在近平面上为0.0,也可能在远平面和近平面之间为0.5)。