旋转所有OpenGL输出

时间:2012-02-08 15:06:34

标签: android opengl-es shim

外部要求---你必须讨厌它们......

我有一个OpenGL ES游戏,它使用EGL和OpenGL ES在屏幕上绘图。我没有这个来源;它以二进制blob的形式提供。我正在实现界面层,它介于游戏对EGL和OpenGL的调用与平台的实现之间。

工作正常。但我现在有意想不到的外部要求,我需要能够将整个游戏的输出旋转90度。

任何人都可以建议任何好的(简单,快速)方法吗?我能想到:

  • 将适当的变换插入游戏的投影矩阵中。在我看来,这是最快的解决方案;但是我不认为我对游戏操纵投影矩阵有足够的了解,可以做到这一点。此外,如果它使用任何OpenGL调用来访问通过投影矩阵的屏幕,它将会混淆游戏。 (例如glReadPixels()。)

  • 为游戏提供渲染上下文到屏幕外缓冲区;它呈现在那里,然后当游戏调用eglSwapBuffers()时,我将结果复制到屏幕上。渲染到纹理在这里会有所帮助。问题:这会影响性能,因为我实际上是在做两个绘图过程而不是一个;在OpenGL ES中,渲染到纹理没有标准化。 (我的目标平台Android甚至无法可靠地支持共享上下文。)

  • 渲染到颜色缓冲区中,然后使用glReadPixels()复制数据并将软件旋转到屏幕上。问题:死慢,我无法控制缓冲区的大小(即如果屏幕是640x480并且我们正在旋转90°,我真的想给游戏一个480x640颜色缓冲区。)

    < / LI>
  • 其他

游戏特定的黑客攻击不是一个选项,因为我需要能够将游戏二进制文件换成另一个游戏。这必须是一般修复。更改游戏不是一种选择,因为我们无法控制游戏源代码。

有什么建议吗?试图说服要求消失的非技术性的除外?

1 个答案:

答案 0 :(得分:0)

你必须沿z轴使用glRotate有什么问题? 方法1是要走的路。

像素操作很重,有可能会弄乱纵横比等等。

进入绘图的步骤是
1.设置变换矩阵(模型/投影)
如果是横向,请应用glRotate 2.设置视口(每次旋转屏幕时可能会改变)
如果是横向 - 分别将b设置为高度/宽度 如果是横向 - 分别将b设置为高度/宽度 3.绘制矩阵

旋转屏幕时,会再次渲染对象。所以glRotate是最好的方式。