如何在OpenGL中找出屏幕平面上的单位数



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

我假设Z中的一个单位(假设为1.0f)将等效于X中的一单位,即使转换为真实的测量系统是毫无意义的。

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

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

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

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


另一方面,如果你想知道在具有透视的3D场景中观察端口的宽度,以便知道绘制对象的大小,那么你就必须处理透视投影。你需要知道你想在哪个Z坐标下知道视图端口的宽度/高度。你可以使用gluUnProject来计算给定屏幕坐标和Z平面对应的世界坐标。

然而,最好换一种方式,总是用给定的大小绘制对象,然后计算投影矩阵,使该对象正确显示在视图端口中。

相关内容

  • 没有找到相关文章

最新更新