Opengl es 2.0 touch rotation problem

I am currently creating a 3D cube in open gl es 2.0 and wish to rotate it by touch movements. Initially the cube is rendered well as a 3D cube and it appears fine like ImageShack - Best place for all of your image hosting and image sharing needs.

However when i rotate it, it gets elongated sometimes and doesnt really appear well. It gets flattened out and after sometime, it disappears after some rotations. Like this ImageShack - Best place for all of your image hosting and image sharing needs.

Can some one help me with this problem?

This is what I am doing.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];

if([allTouches count] == 1) {
    lastTouchPosition = [[touches anyObject] locationInView:self];
} else if([allTouches count] == 2) {
    UITouch *t1 = [[allTouches allObjects] objectAtIndex:0];
    UITouch *t2 = [[allTouches allObjects] objectAtIndex:1];

    CGPoint p1 = [t1 locationInView:self];
    CGPoint p2 = [t2 locationInView:self];

    float x = p1.x - p2.x;
    float y = p1.y - p2.y;

    lastPinchDistance = sqrtf(x * x + y * y);
}
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{    
CGPoint currentTouchPosition = [[touches anyObject] locationInView:self];    
        NSSet *allTouches = [event allTouches];
        if([allTouches count] == 1) 
        {        
            float xMovement = lastTouchPosition.x - currentTouchPosition.x;
            float yMovement = lastTouchPosition.y - currentTouchPosition.y;
            lastTouchPosition = currentTouchPosition;
            [self rotateCubeAroundX:yMovement andY:xMovement];
        }
        else if([allTouches count] == 2) 
        {
            UITouch *t1 = [[allTouches allObjects] objectAtIndex:0];
            UITouch *t2 = [[allTouches allObjects] objectAtIndex:1];
            CGPoint p1 = [t1 locationInView:self];
            CGPoint p2 = [t2 locationInView:self];
            float x = p1.x - p2.x;
            float y = p1.y - p2.y;

            float currPinchDistance = sqrtf(x * x + y * y);

            float zoomDistance = lastPinchDistance - currPinchDistance;

            lastZoomDistance = lastZoomDistance - (zoomDistance / 100);

            lastPinchDistance = currPinchDistance;
        }
}

- (void)rotateCubeAroundX:(float)x andY:(float)y {
GLfloat totalXRotation = x * M_PI / 180.0f;
GLfloat totalYRotation = y * M_PI / 180.0f;
 Matrix4x4Utils:: applyRotation(rotationMatrix, totalXRotation, totalYRotation, 0.0);
}

In the initwithframe function, I set the rotation and projection matrix to identity initially and then set the projection of the scene.

In my drawFrame function, I set my cube vertices and its normals. Then i set the mvp matrix to identity. Then I multiply the mvp matrix with the rotation and projection matrices and I pass it to the shader. The inital drawing is fine, but on rotation using touch, it gets flattened out. Could someone help me, as to why is this happening?

This is another screen shot of what i am getting after performing rotation by gestures. Pl help me to solve this problem. http://imageshack.us/photo/my-images/718/screengm.jpg/

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.