OpenGL ES视图:如何将其定位到景观?

Ste*_*ion 3 iphone opengl-es ios

寻找关于定位OpenGL ES应用程序的线索,我发现的大多数信息可以追溯到2008年,其中大部分都是指SDK的早期版本.显然,在过去的日子里,在GL的情况下,建议不要旋转视图,而是将旋转应用为GL变换.目前的SDK仍然如此吗?简单地旋转窗口会简单得多:所有触摸事件都与旋转同步.

换句话说:如何在横向模式下设置OpenGL视图?

Ste*_*ion 7

(我将用我找到的解决方案回答我自己的问题.我会很乐意考虑其他答案.)

在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();
Run Code Online (Sandbox Code Playgroud)

如果您的目标是iPad,请将-320替换为-768.

我还转换了来自UITouches的坐标:

int touchx = touch.y;
int touchy = viewWidth - touch.x;
Run Code Online (Sandbox Code Playgroud)


Won*_*nil 5

也许,它现在已经改变了.如果您查看最新的OpenGL ES编程指南,您可以找到以下句子:

"在iOS 4.2及更高版本中,渲染缓冲区的Core Animation旋转性能得到了显着改善,现在是在横向和纵向模式之间旋转内容的首选方法.为了获得最佳性能,请确保渲染缓冲区的高度和宽度均为倍数的倍数. 32像素."

就像这样:

[eaglLayer setAffineTransform:CGAffineTransformMakeRotation( -90 * M_PI  / 180)];
Run Code Online (Sandbox Code Playgroud)

但是,CAEAGLLayer类参考提到"在纵向显示上绘制横向内容时,您应该自己旋转内容,而不是使用CAEAGLLayer变换来旋转它." 也许,文档还没有更新.上次更新时间是2008-05-19.

只是和我一样参加这个问答的FYI.