0

如何以opengl自己的单位获得观察平面的相对大小?我需要找出“opengl 单位”中的宽度和高度。是否有可以检索此信息的功能?

我假设一个单位(让我们说 1.0f) inZ将相当于一个单位 in X,即使转换为一个真正的测量系统毫无意义。

我知道我可以通过使用GetSystemMetrics(SM_CXSCREEN)或来获得屏幕尺寸glutGet(GLUT_SCREEN_WIDTH),但这是以像素为单位的。

为了处理图形窗口调用,我在非 Windows 操作系统上使用 freeglut,在 Windows 上使用 WinAPI。

4

1 回答 1

0

假设您想绘制类似 UI 的东西,将投影矩阵设置为 Orthographic 矩阵glOrtho,然后您没有任何透视,并且在世界坐标和屏幕坐标之间有直接的正交映射。您glOrtho调用的参数决定了您的视口在世界坐标中的宽度/高度。

如果您想同时绘制 UI 和 3D 场景,请使用剪贴蒙版绘制 UIglOrtho和绘制场景,glPerspective以确保不会破坏您的 UI。


另一方面,如果您想知道透视 3D 场景中视口的宽度,以便知道绘制对象有多大,那么您将不得不处理透视投影。您需要知道在哪个 Z 坐标处您想知道视口的宽度/高度。您可以使用它gluUnProject来计算与给定屏幕坐标和 Z 平面相对应的世界坐标。

然而,最好反过来做,总是用给定的大小绘制你的对象,然后计算你的投影矩阵应该是什么,以使该对象正确地出现在你的视口中。

于 2013-02-12T08:35:34.423 回答