在 iOS 上使用 OpenGL-ES 2.0 设置横向正交投影的正确方法是啥?

Posted

技术标签:

【中文标题】在 iOS 上使用 OpenGL-ES 2.0 设置横向正交投影的正确方法是啥?【英文标题】:What's the correct way to set up a landscape orthographic projection using OpenGL-ES 2.0 on iOS?在 iOS 上使用 OpenGL-ES 2.0 设置横向正交投影的正确方法是什么? 【发布时间】:2011-11-28 22:27:37 【问题描述】:

这一切都在 OpenGL ES 2.0...

我正在尝试将 3D 透视投影与 2D 正交投影混合,以便在我的游戏中将 HUD 放在 3D 场景的顶部。

游戏以横向运行,我真的很困惑如何处理设备方向。

我正在使用合适的投影矩阵渲染 3D 内容,并将 modelView 矩阵和我的照明旋转 90 度,因此 3D 场景是正确的。这一点都可以正常工作。

我的问题是我不知道如何正确设置 2D 投影矩阵,因此当设备处于横向且主页按钮位于左侧时,原点位于左上角。

如何正确构造正交矩阵以使这种情况发生?我目前正在使用这个

// OrthoMatrix does the same as the old GLOrthof function (left, right, bottom, top, near, far);
projectionMatrix2D = mat4::OrthoMatrix(0, screenWidth, screenHeight , 0, -1.0, 1.0);

但是,如果设备是纵向的,并且主页按钮在底部,这只是将原点放在左上角,并且在我手中旋转设备意味着一切都在它的一侧。

我应该尝试更改 2D 投影矩阵还是需要做其他事情?

【问题讨论】:

【参考方案1】:

我在 Gamedev 上问过这个问题,但以更笼统的方式提出并得到了有用的答案。

How can I create an orthographic display that handles different screen dimensions?

【讨论】:

以上是关于在 iOS 上使用 OpenGL-ES 2.0 设置横向正交投影的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.0 - iOS - 使用 FBO 渲染到纹理

iPhone 成本与收益 - OpenGL ES 1.x 与 2.0

Android上OpenGL-ES游戏的教程和库[关闭]

如何让 OpenGL-ES 在带有 SDL2 的 Raspberry Pi 上工作?

在 cocos2d 中使用 opengl-es 进行圆形裁剪

使用 openGL ES 2.0 结合其他线条绘制功能的字体渲染(Freetype)不起作用