Как мне ввести достаточную задержку при использовании функции glutPostRedisplay() в OpenGL?

#opengl

#opengl

Вопрос:

 void display(void)

{

     char text1[10],text2[10];
     int i;
     glPointSize(2.0);
     glClear(GL_COLOR_BUFFER_BIT);
      circle_draw(x1center,y1center,radius1);
      y1center-=5;
      while(y1center>=100)
      {
          glutPostRedisplay();
          y1center-=5;
      }
      glFlush();

}
  

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

Ответ №1:

 void display(void)
{
     char text1[10],text2[10];
     int i;
     glPointSize(2.0);
     glClear(GL_COLOR_BUFFER_BIT);
     circle_draw(x1center,y1center,radius1);
     glFlush();
}

void update(int) { 
    if (y1center > 100) {
        y1center -= 5;
        glutPostRedisplay();
        glutTimerFunc(100, update, 0);
    }
}

int main() {
// ...

    glutTimerFunc(100, update, 0);

// ...
}
  

Комментарии:

1. 571 C:Dev-CppincludeGLglut.h слишком мало аргументов для функции `void glutTimerFunc(unsigned int, void (*)(int), int)’

2. Я изменил прототип обновления на void update(int); И обратный вызов функции на glutTimerFunc(100,update, 100); Но это по-прежнему не дает желаемого результата

3. Упс, да, прошло некоторое время с тех пор, как я ею пользовался. Вам нужно добавить еще один вызов glutTimerFunc внутри update . Смотрите обновленный код…