Вращение треугольника в OpenGL - PullRequest
0 голосов
/ 01 апреля 2011

Я новичок в opengl. Я хочу повернуть свой треугольник, когда нажата клавиша. Мой треугольник не отображается. Возможно, в коде много ошибок. .

void keyboard(unsigned char key, int x, int y)
{


   switch (key) {

      case 'q':
         exit(0);
         break;

         case 'a':
             {

            glPushMatrix();
            glLoadIdentity();
            glTranslatef(0,0,0);
            glRotatef(90.0+rot, 0.0, 1.0, 0.0);
            glBegin(GL_TRIANGLES);        
                glVertex3f( 1.0, 1.0, 0.0 );        
                glVertex3f( 3.0, 2.0, 0.0 );        
                glVertex3f( 3.0, 1.0, 0.0 );        
              glEnd();
            glPopMatrix();

                rot+=1;

             }
         break;
   }
}

и из ОСНОВНОЙ ФУНКЦИИ эта функция вызывается по строке кода ниже.

......

glutKeyboardFunc(keyboard);

.......

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Во-первых, код вашего контроллера должен обрабатывать только приращение вращения

case 'a':
   rot += 1;
   break;

Ваша основная функция отображения должна обрабатывать все остальное. Может случиться так, что ваша реализация вращается и показывает треугольник, но затем основной цикл немедленно меняет ваше представление.

1 голос
/ 01 апреля 2011

Если вы настаиваете на использовании перенасыщения (не очень хорошая идея, IMO, но такова жизнь), вы обычно хотите поместить весь свой код рисования в одно место и передать (указатель на) эту функцию (или ту, которая ее вызывает ) до glutDisplayFunc. В своей функции клавиатуры вы просто делаете что-то вроде:

rot+=1;
glutPostRedisplay();

glutPostRedisplay() означает, что сообщение (по крайней мере, концептуально) отправлено в очередь, чтобы сообщить, что отображение необходимо обновить. Исходя из этого, любая функция, которую вы передали glutDisplayFunc, будет вызываться (но не обязательно сразу).

Если вы занимались программированием Windows API, это практически идентично обычному шаблону: когда вы получаете ввод, вы изменяете данные и лишаете законной силы прямоугольник ваших окон. В ответ на это вы получите сообщение WM_PAINT, и ваш код обновит дисплей. Несмотря на то, что детали различаются, вы также можете увидеть схожие схемы с MacOS и оконной системой X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...