代码之家  ›  专栏  ›  技术社区  ›  Steph Thirion

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

  •  3
  • Steph Thirion  · 技术社区  · 15 年前

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

    3 回复  |  直到 13 年前
        1
  •  7
  •   Steph Thirion    15 年前

    (我会用我找到的答案回答我自己的问题。我很乐意考虑其他的答案。

    在CaeAglayer文档中,Apple声明(有点笨拙)您应该在GL本身内进行旋转:“当在纵向显示器上绘制横向内容时,您应该自己旋转内容,而不是使用CaeAglayer变换来旋转它。”他们没有解释原因,但我在多个地方读到了关于性能明显下降的消息。

    幸运的是,我只加了几行就解决了这个问题。这是横向的权利,其中主页按钮是在屏幕上 正确的 .

    glPushMatrix();
      glRotatef(90, 0.0, 0.0, 1.0);
      glTranslatef(0.0f, -320.0f, 0.0f );
    
      // *** ALL RENDERING GOES HERE ***
    
    glPopMatrix();
    

    如果你的目标是iPad,用-768替换-320。

    int touchx = touch.y;
    int touchy = viewWidth - touch.x;
    
        2
  •  5
  •   Wonil    12 年前

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

    “在iOS 4.2及更高版本中,renderbuffers的核心动画旋转性能得到了显著提高,现在是在横向和纵向模式之间旋转内容的首选方式。为获得最佳性能,请确保渲染缓冲区的高度和宽度均为32像素的倍数。”

    [eaglLayer setAffineTransform:CGAffineTransformMakeRotation( -90 * M_PI  / 180)];
    

    但是,《CaeAglayer类参考》提到“当在纵向显示器上绘制横向内容时,您应该自己旋转内容,而不是使用CaeAglayer变换旋转内容。”。也许,文档还没有更新。最后更新时间为2008-05-19。

    仅供参考,谁访问了本问答;A和我一样。

        3
  •  1
  •   Eddy    13 年前

    你需要设置你的相机矩阵,上方向向量在X轴而不是Y轴,这是你通常会做的。将世界旋转90度是可行的,但会使处理其他任何事情变得困难。

    使用类似于:

    up.x = 1; // instead of up.y
    up.y = 0;
    up.z = 0;
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    GLU.gluLookAt(gl, position.x, position.y, position.z, lookAt.x, lookAt.y, lookAt.z, up.x, up.y, up.z);