Непонимание OpenGL и GLUT - PullRequest
       4

Непонимание OpenGL и GLUT

0 голосов
/ 04 августа 2010

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

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

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();
    }

И я получаю ожидаемый результат. снимок экрана # 1

Затем я раскомментирую glutSolidCube (100)В любом случае, я даже делаю push / pop текущую матрицу, а позже переопределяю ее на единичную матрицу .... Я думаю, что я бы увидел то же самое изображение результата с cude... НО ! Я вижу ЭТОТ скриншот # 2 Что за ..... & * ^ @ # $% Почему?

Если я добавлю код

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

до glutSwapBuffers, чем я увижу, что шахматная доска на месте ..... снимок экрана # 3

1 Ответ

2 голосов
/ 05 августа 2010

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

так:

    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 () изменяет матрицу вида модели, ваш Push / PopMatrix бесполезен и его следует избегать (из соображений производительности и переносимости, поскольку он устарел)

...