1

iPhone用のopengl es 1.1を使用しています。

私はもともとポートレート用にすべてを書きましたが、見栄えが良かったのですが、ランドスケープモードに切り替えると、グラフィックが引き伸ばされたように見えます...

これを伸ばす方法の手がかりはありますか?

私は基本的にこのチュートリアルに従っていますが、正方形を追加し、shouldAutorotateToInterfaceOrientation を追加しましたが、グラフィックはまだ引き伸ばされています: http://www.71squared.com/2011/03/tutorial-14-moving-to-3d/

コード:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
}

- (void)drawFrame
{
    [(EAGLView *)self.view setFramebuffer];

    // Replace the implementation of this method to do your own custom drawing.
    static const GLfloat squareVertices[] = {
        -0.33f, -0.33f, 0.0f,
        0.33f, -0.33f, 0.0f,
        -0.33f,  0.33f, 0.0f,
        0.33f,  0.33f, 0.0f
    };

    static const GLubyte squareColors[] = {
        255, 255,   0, 255,
        0,   255, 255, 255,
        0,     0,   0,   0,
        255,   0, 255, 255,
    };

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // Position the camera back from the origin and slightly raised i.e. {0, 3, -6}
    static GLfloat z = 0;

    gluLookAt(0, 5, -10, 0, 0, 0, 0, 1, 0);
    z += 0.075f;

   // GL DRAW ARRAYS STUFF GOES HERE

   [(EAGLView *)self.view presentFramebuffer];
}

- (void)initOpenGLES1
{
    // Set the clear color
    glClearColor(0, 0, 0, 1.0f);

    // Projection Matrix config
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    CGSize layerSize = self.view.layer.frame.size;
    gluPerspective(45.0f, (GLfloat)layerSize.width / (GLfloat)layerSize.height, 0.1f, 750.0f);

    // Modelview Matrix config
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // This next line is not really needed as it is the default for OpenGL ES
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glDisable(GL_BLEND);

    // Enable depth testing
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glDepthMask(GL_TRUE);
}
4

1 に答える 1

0

ちょっとレアな情報です。ビューポートはどのように設定しましたか? 私の推測では、アプリの向きが変わったことを知らせるイベントを見逃していると思います。willRotateToInterfaceOrientation:duration:またはdidRotateFromInterfaceOrientation:、新しいビューポートをそこに設定する必要があります。はglRotateまったく必要ありません。

于 2012-08-20T06:48:06.383 に答える