如何将OpenGL坐标与屏幕坐标匹配?

6

Android OpenGL-ES 视图问题。在OpenGL中,相机和视图的默认位置是在0,0处。如何设置视图和相机,使其基本上与计算机屏幕坐标相同,其中0,0在顶部。我已经调用了gl.glOrthof(-screenWidth/2, ScreenWidth/2, -ScreenHeight/2, ScreenHeight/2)。但我认为这是错误的。我还需要设置相机以查看整个场景。我不确定如何使用gl.glFrustumf来完成此任务。

1个回答

12

要将顶点坐标用作屏幕坐标,只需在投影矩阵上使用glOrtho(0, width, height, 0, -1, 1),并保持您的模型视图矩阵为单位矩阵(这是默认值)。请注意,我将底部和顶部翻转了一下,因为在GL中,(0,0)位于左下角,而您希望它位于顶部(但请记住,这也会翻转每个对象及其三角形的顺序)。您还忘了设置近平面和远平面(z轴超出此区间的所有内容都不会显示)。但是,当您现在绘制所有具有z=0的对象(绘制仅包含2d顶点时为默认值)时,一切应该都很好。

glFrustum仅是glOrtho的替代方法。其中glOrtho构造正交(平行)视图,而glFrustum构造透视视图。因此,您不需要glFrustum


难道不应该是glOrtho(0,width,0,height,-1,1)吗? - darethas
@treehau5 如果你读完整个答案,特别是在 glOrtho 调用之后的那句话: “请注意,我翻转了底部和顶部,就像在 GL 中一样(0,0)在左下角,而你希望它在顶部”。 - Christian Rau
好的。现在主要问题是,你为什么要这样做? - darethas
1
@treehau5 嗯,我不知道为什么 OP 需要将原点放在左上角。但是有一些使用情况需要这样做,因为许多 2D 绘图和窗口系统都是这样工作的。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接