2010-08-04 5 views
-1

Я полностью не понимаю opengl + glut works .... ПОЖАЛУЙСТА, объясните, почему он это делает? = (OpenGL и GLUT uncomprehension

У меня есть простой код

 
void display() 
    { 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     glPushMatrix(); 
      ChessboardSurrogate.Draw(6,8,50, 0,0); // draw chessboard(6x8) in (0,0,0) edge per cell 50 
     glPopMatrix(); 

     glPushMatrix();  
      //glutSolidCube(100); //!!!!! 
     glPopMatrix(); 

     glLoadIdentity();  
     gluLookAt( 0.0, 0.0, -testSet::znear*2, 
       0.0, 0.0, 0.0, 
       0.0, 1.0, 0.0); 

     glMultMatrixf(_data->m); // my transformation matrix 

     glutSwapBuffers(); 
    } 

И я получить ожидаемый результат. screenshot #1

Тогда я раскомментировать glutSolidCube (100). В любом случае, я даже делать пуш/поп ток матрица, а затем переопределить ее по идентификационной матрице .... Я думаю, что я увижу то же изображение результата с cude ... НО! i see THIS screenshot #2 Что ..... ..... & *^@ # $ % W гип?

Если я добавить код

 
     glRotatef(angleX,1.0,0.0,0.0); 
     glRotatef(angleY,0.0,1.0,0.0); 

до того glutSwapBuffers, чем я буду видеть, что шахматная доска на месте ..... screenshot #3

ответ

1

Это, вероятно, только половина ответа, но почему на земле вы устанавливаете свои матрицы ПОСЛЕ рисования? Что вы ожидаете от этого?

так:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity();  
    gluLookAt( 0.0, 0.0, -testSet::znear*2, 
      0.0, 0.0, 0.0, 
      0.0, 1.0, 0.0); 

    glMultMatrixf(_data->m); // my transformation matrix 
    glPushMatrix(); 
     ChessboardSurrogate.Draw(6,8,50, 0,0); // draw chessboard(6x8) in (0,0,0) edge per cell 50 
    glPopMatrix(); 

    glPushMatrix();  
     //glutSolidCube(100); //!!!!! 
    glPopMatrix(); 


    glutSwapBuffers(); 

кроме того, всегда убедитесь, что вы устанавливаете правильную матрицу:

glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt()... 

Наконец, если ваш Draw() метод не изменяет видовую матрицу, ваш Тяни/PopMatrix является бесполезным и его следует избегать (по соображениям производительности и мобильности, поскольку он устарел)