opengl — приостановка программы cUT GLUT с вводом с клавиатуры

Я пытаюсь приостановить свою программу GLUT во время ее выполнения нажатием клавиши на клавиатуре. Кажется, не признать мою запись. Вот соответствующие разделы моего кода:

static bool paused = false;
void handleKeypress(unsigned char key, //The key that was pressed
int x, int y) {    //The current mouse coordinates
switch (key) {
case 27: //Escape key
exit(0); //Exit the program
case 'p':
paused = !paused;
break;
}
}

int main(int argc, char** argv) {
//Initialize GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 400); //Set the window size

//Create the window
glutCreateWindow("Fractals in Motion");
initRendering(); //Initialize rendering

//Set handler functions for drawing, keypresses, and window resizes
if(!paused)
{
glutDisplayFunc(drawScene);       //drawScene draws everything does the real work
glutTimerFunc(10, update, 0); //Add a timer
}
//glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);

glutMainLoop(); //Start the main loop.  glutMainLoop doesn't return.
return 0; //This line is never reached
}

Я на самом деле получил скелет этого кода из этого очень написанного урока:

http://www.videotutorialsrock.com/opengl_tutorial/basic_shapes/home.php

Тем не менее, я не могу заставить программу остановиться, когда я нажимаю клавишу «p». Если у вас есть лучшие методы, пожалуйста, дайте мне знать!

0

Решение

это не работает, потому что glutKeyboardFunc(handleKeypress) закомментировано по какой-то причине. раскомментируйте и это должно работать.

3

Другие решения

Ваша программа работает в два этапа:

  • инициализация
  • Основной цикл

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

Проблема в том, что вы устанавливаете paused во время основного цикла и проверки его во время инициализации. Поскольку инициализация всегда происходит до основного цикла, настройка paused на самом деле ничего не буду делать.

Решение состоит в том, чтобы не полагаться на проверку paused во время инициализации, но вместо этого измените ваши обратные вызовы, чтобы немедленно вернуться, если paused является true,

2

# include<GL/glut.h>
void keys(unsigned char key, int x, int y)
{
if (key == 'a')     paused = 1;
if (key == 'A')     paused = 0;
glutPostRedisplay();
}

добавьте эту функцию в вашу программу для функции клавиатуры и везде, где вы используете glutPostRedisplay () в программе
добавлять
если (пауза == 0)
над ним

0
По вопросам рекламы [email protected]