2013-02-12 30 views
0

如何获得opengl自己单元中的查看平面的相对尺寸?我需要找出“opengl单位”的宽度和高度。有没有一个函数可以检索这些信息?如何找出OpenGL中屏幕平面上有多少单元

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

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

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

+1

你究竟想在这里做什么 – Aesthete 2013-02-12 06:26:39

+0

这个问题是写无效的。假设您使用透视投影,则不存在“查看平面”。屏幕的宽度取决于您测量的Z距离。如果你正在谈论固定的已知距离(如-1.0 Z),那么这是可以回答的。 – 2013-02-12 06:36:12

+0

我想说另一种说法,那就是我试图找出我可以在屏幕平面中平行于X轴绘制的最大线,该线不超过视口的尺寸。 – user2063669 2013-02-12 06:36:32

回答

0

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

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


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

但是反过来也许会更好,总是用给定的尺寸绘制对象,然后计算投影矩阵应该让该对象在视口中正确显示。