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);
}
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:ordidRotateFromInterfaceOrientation:and set the new viewport there. TheglRotateis not neccessary at all.