为什么我的GLKView在旋转期间会缩小?

时间:2012-12-19 19:46:03

标签: iphone rotation opengl-es-2.0

我的GLKView中有一个对象,我在touchesMoved方法中旋转。然而,在旋转时,矩阵也会缩放,这有点奇怪。有人可以发现问题吗?

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {


    self.opaque = NO;
    self.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;
    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

    glClear(GL_COLOR_BUFFER_BIT);

    [self.effect prepareToDraw];

    glBindVertexArrayOES(vertexArray);
    glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);


}



-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{



    UITouch * touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    CGPoint lastLoc = [touch previousLocationInView:[touch view]];
    CGPoint diff = CGPointMake(lastLoc.x - location.x, lastLoc.y - location.y);

    float rotX = -1 * GLKMathDegreesToRadians(diff.y / 2.0);

    GLKVector3 xAxis = GLKVector3Make(1, 0, 0);
    rotMatrix = GLKMatrix4Rotate(rotMatrix, rotX, xAxis.x, xAxis.y, xAxis.z);

    float aspect = fabsf(self.bounds.size.width / self.bounds.size.height);
    GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 4.0f, 10.0f);
    self.effect.transform.projectionMatrix = projectionMatrix;

    GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -6.0f);
    modelViewMatrix = GLKMatrix4Multiply(modelViewMatrix, rotMatrix);
    self.effect.transform.modelviewMatrix = modelViewMatrix;

    [self display];

}

1 个答案:

答案 0 :(得分:1)

将GLKMathDegreesToRadians的值减小到较小的值可缩放多维数据集大小。

将值小于65.0f的值提供给GLKMathDegreesToRadians,作为示例

GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(35.0f), aspect, 4.0f, 10.0f);