外部要求---你必须讨厌它们......
我有一个OpenGL ES游戏,它使用EGL和OpenGL ES在屏幕上绘图。我没有这个来源;它以二进制blob的形式提供。我正在实现界面层,它介于游戏对EGL和OpenGL的调用与平台的实现之间。
工作正常。但我现在有意想不到的外部要求,我需要能够将整个游戏的输出旋转90度。
任何人都可以建议任何好的(简单,快速)方法吗?我能想到:
将适当的变换插入游戏的投影矩阵中。在我看来,这是最快的解决方案;但是我不认为我对游戏操纵投影矩阵有足够的了解,可以做到这一点。此外,如果它使用任何OpenGL调用来访问不通过投影矩阵的屏幕,它将会混淆游戏。 (例如glReadPixels()
。)
为游戏提供渲染上下文到屏幕外缓冲区;它呈现在那里,然后当游戏调用eglSwapBuffers()
时,我将结果复制到屏幕上。渲染到纹理在这里会有所帮助。问题:这会影响性能,因为我实际上是在做两个绘图过程而不是一个;在OpenGL ES中,渲染到纹理没有标准化。 (我的目标平台Android甚至无法可靠地支持共享上下文。)
渲染到颜色缓冲区中,然后使用glReadPixels()
复制数据并将软件旋转到屏幕上。问题:死慢,我无法控制缓冲区的大小(即如果屏幕是640x480并且我们正在旋转90°,我真的想给游戏一个480x640颜色缓冲区。)
其他
游戏特定的黑客攻击不是一个选项,因为我需要能够将游戏二进制文件换成另一个游戏。这必须是一般修复。更改游戏不是一种选择,因为我们无法控制游戏源代码。
有什么建议吗?试图说服要求消失的非技术性的除外?
答案 0 :(得分:0)
你必须沿z轴使用glRotate有什么问题? 方法1是要走的路。
像素操作很重,有可能会弄乱纵横比等等。
进入绘图的步骤是
1.设置变换矩阵(模型/投影)
如果是横向,请应用glRotate
2.设置视口(每次旋转屏幕时可能会改变)
如果是横向 - 分别将b设置为高度/宽度
如果是横向 - 分别将b设置为高度/宽度
3.绘制矩阵
旋转屏幕时,会再次渲染对象。所以glRotate是最好的方式。