iPhone OpenGL:从对象移回视图

时间:2010-12-10 00:10:23

标签: iphone opengl-es

这里有点奇怪。我有一个在屏幕上旋转的3d立方体,但我不得不将视图从glOrthof更改为glFrustumf。现在立方体放在我身上而不是在我面前。

所以我认为我使用了一个glTranslate(或者甚至比例)将它移回去,所以我可以正确地这样做但是对象继续从它的旧位置重绘并添加一点,所以通过移动,旋转去Pete Tong。我以前从未使用过使用过的glGetFloatv和glMultMatrixf,但我猜他们采用旧的旋转并添加一点来保持对象移动。希望我能退后一步

多维数据集代码

 GLfloat matrix[16]; 
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);

    glLoadIdentity(); 
    glRotatef(self.angle, self.dy,self.dx,0);

    /* reapply other rotations so far */
    glMultMatrixf(matrix); 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor4f(1.0, 1.0, 1.0, 1.0);

    glVertexPointer(3, GL_FLOAT, 0, texturedVertices);
    glTexCoordPointer(2, GL_FLOAT, 0, texturedCubeCoord);

    glBindTexture(GL_TEXTURE_2D, 1);
    glDrawElements(GL_TRIANGLES,6 , GL_UNSIGNED_BYTE, &texturedCube[0]);

    glBindTexture(GL_TEXTURE_2D, 2);
    glDrawElements(GL_TRIANGLES,6 , GL_UNSIGNED_BYTE, &texturedCube[6]);

    glBindTexture(GL_TEXTURE_2D, 1);
    glDrawElements(GL_TRIANGLES,6 , GL_UNSIGNED_BYTE, &texturedCube[12]);

    glBindTexture(GL_TEXTURE_2D, 2);
    glDrawElements(GL_TRIANGLES,6 , GL_UNSIGNED_BYTE, &texturedCube[18]);

    glBindTexture(GL_TEXTURE_2D, 1);
    glDrawElements(GL_TRIANGLES,6 , GL_UNSIGNED_BYTE, &texturedCube[24]);

    glBindTexture(GL_TEXTURE_2D, 2);
    glDrawElements(GL_TRIANGLES,6 , GL_UNSIGNED_BYTE, &texturedCube[30]);

1 个答案:

答案 0 :(得分:0)

我通过1次移动-5固定它然后重置矩阵

/* save current rotation state */
    GLfloat matrix[16]; 
    glGetFloatv(GL_MODELVIEW_MATRIX, matrix);

    /* re-center cube, apply new rotation */
    glLoadIdentity(); 

    if (firstRunOnly == NO) {
        firstRunOnly = YES;
        glTranslatef(0, 0, -5);
    } else {
        glTranslatef(0, 0, 0);
    }

    /* reapply other rotations so far */
    glMultMatrixf(matrix); 

    glRotatef(self.angle, self.dy,self.dx,0);