2010-12-10 4 views
0

이상한 것이 조금 있습니다. 나는 화면에서 회전하는 3d 큐브를 가지고 있지만 glOrthof에서 glFrustumf로보기를 변경해야했습니다. 이제는 큐브가 제 위치에 있고 제 앞에는 없습니다.iPhone OpenGL : 객체에서 뷰를 뒤로 이동

그래서 글 글렌 트랜트 레이트 (또는 스케일)를 사용하여 다시 이동할 수 있다고 생각 했으므로 오브젝트를 이전 위치에서 다시 그리기를 계속하고 비트를 이동하여 회전 시키면 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]); 

답변

0

그때 행렬을 재설정 -5 만 이동 1 시간을 고정

/* 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);