Landscape Mode OpenGL ES 1.1

Im using opengl es 1.1 for the iPhone.

I originally wrote everything for portrait which looked great but when I switch to landscape mode the graphics appear to be stretched...

Any clues on how to un-stretch this?

Im basically following this tutorial but have added squares and added the shouldAutorotateToInterfaceOrientation but the graphics are still stretched: http://www.71squared.com/2011/03/tutorial-14-moving-to-3d/

Code:

- (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);
}

Answers


That's a bit scarce information. How did you set up your viewport? My best guess is you are missing the event that tells you the app has changed orientation. You have to handle either willRotateToInterfaceOrientation:duration: or didRotateFromInterfaceOrientation: and set the new viewport there. The glRotate is not neccessary at all.


Need Your Help

How to use a Filtered Service with RoutingService in Finagle

scala jvm finagle

Fair warning, I'm new to Scala, so I could be missing something simple here.

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.