iPhone OpenGL: перемещение представления назад от объекта - PullRequest
0 голосов
/ 10 декабря 2010

Здесь немного странно.У меня есть 3d куб, который вращается на экране, но мне пришлось изменить вид с glOrthof на glFrustumf.Теперь куб находится на мне, а не передо мной.

Так что я подумал, что я использую glTranslate (или даже масштаб), чтобы переместить его назад, чтобы я мог его правильно, но объект продолжает перерисовываться изстарая позиция и добавляет к ней немного, поэтому, двигаясь, вращение переходит к Пите Тонгу.Я никогда не использовал раньше 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 голосов
/ 15 декабря 2010

Я исправил это только одним ходом -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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...