如何在OpenGL中找出屏幕平面上有多少单位

时间:2013-02-12 06:17:21

标签: c++ opengl scaling dimension unit-conversion

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

我假设Z中的一个单位(我们说1.0f)相当于X中的一个单位,即使转换为真实的测量系统也毫无意义。

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

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

1 个答案:

答案 0 :(得分:0)

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

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


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

然而,以相反的方式做它可能会更好,总是用给定的大小绘制对象,然后计算你的投影矩阵应该是什么让对象在你的视口中正确显示。