如何以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平面对应的世界坐标。
然而,最好换一种方式,总是用给定的大小绘制对象,然后计算投影矩阵,使该对象正确显示在视图端口中。