寻找关于定位OpenGL ES应用程序的线索,我发现的大多数信息可以追溯到2008年,其中大部分都是指SDK的早期版本.显然,在过去的日子里,在GL的情况下,建议不要旋转视图,而是将旋转应用为GL变换.目前的SDK仍然如此吗?简单地旋转窗口会简单得多:所有触摸事件都与旋转同步.
换句话说:如何在横向模式下设置OpenGL视图?
(我将用我找到的解决方案回答我自己的问题.我会很乐意考虑其他答案.)
在CAEAGLLayer文档中,Apple声明(有点笨拙)你应该在GL本身内进行旋转:"在纵向显示上绘制横向内容时,你应该自己旋转内容而不是使用CAEAGLLayer变换来旋转它." 他们没有解释原因,但我已经在多个地方读过关于性能明显下降的信息.
幸运的是,我只用了几行就解决了这个问题.这适用于横向右侧,主页按钮位于右侧.
glPushMatrix(); glRotatef(90, 0.0, 0.0, 1.0); glTranslatef(0.0f, -320.0f, 0.0f ); // *** ALL RENDERING GOES HERE *** glPopMatrix();
如果您的目标是iPad,请将-320替换为-768.
我还转换了来自UITouches的坐标:
int touchx = touch.y; int touchy = viewWidth - touch.x;
也许,它现在已经改变了.如果您查看最新的OpenGL ES编程指南,您可以找到以下句子:
"在iOS 4.2及更高版本中,渲染缓冲区的Core Animation旋转性能得到了显着改善,现在是在横向和纵向模式之间旋转内容的首选方法.为了获得最佳性能,请确保渲染缓冲区的高度和宽度均为倍数的倍数. 32像素."
就像这样:
[eaglLayer setAffineTransform:CGAffineTransformMakeRotation( -90 * M_PI / 180)];
但是,CAEAGLLayer类参考提到"在纵向显示上绘制横向内容时,您应该自己旋转内容,而不是使用CAEAGLLayer变换来旋转它." 也许,文档还没有更新.上次更新时间是2008-05-19.
只是和我一样参加这个问答的FYI.