我试图通过按键盘上的键暂停我的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 :(得分:3)
它无效,因为glutKeyboardFunc(handleKeypress)
由于某种原因被注释掉了。取消注释,它应该工作。
答案 1 :(得分:2)
您的计划分两个阶段进行:
glutMainLoop
之前的所有内容都是初始化,告诉GLUT您要使用的所有不同设置和回调。在主循环期间,GLUT将调用所有回调,您可以绘制。
问题是您在主循环期间设置paused
并在初始化期间进行检查。由于初始化总是在主循环之前发生,因此设置paused
实际上不会做任何事情。
解决方案是不依赖于在初始化期间检查paused
,而是修改您的回调以在paused
为true
时立即返回。
答案 2 :(得分:0)
# 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()的任何位置 加 if(暂停== 0) 在它之上