GlutKeyboardFunc 回调在 openGL 中不起作用
GlutKeyboardFunc callback doesn't work in openGL
我试图通过在 openGL 中按下一个键来简单地退出应用程序,但键盘似乎不起作用。
我也不能仅通过单击 window 的关闭按钮来退出应用程序。对这种行为有什么解释吗? 我也不会连续重新创建 window。
这是代码片段
void keyboardfunc(unsigned char key, int x, int y) {
cout << "Inside" ;
switch (key) {
case 'q': exit(0);
default: break;
}
int main(int argc,char ** argv)
{
.
.
.
glutReshapeFunc(reshape_func);
glutDisplayFunc(draw);
glutKeyboardFunc(keyboardfunc);
myinit();
glutMainLoop();
return 0;
}
该程序是通过以图形方式表示数组来模拟插入排序,使用 for 循环我每次都清屏,每次都将数字表示为直方图
说明一下,插入排序的模拟有效,只有键盘回调无效。
您的绘图函数接受 CPU 控制,并且不允许执行 GLUT 事件循环。考虑到 GLUT 是单线程。
您必须注册一个计时器。定时器将产生新的渲染。每秒计算下一次迭代并强制重绘场景。
void draw(){
renderHistogram();
}
void timer(int value) {
getNextIteration();
glutPostRedisplay();
glutTimerFunc(1000, timer, 1); // executed on a second
}
要注册计时器,请在 glutMainLoop 之前包含此行:
glutTimerFunc(1000, timer, 1); // executed on a second
下一个迭代函数为:
int i = 0, j = 0;
void getNextIteration()
{
if (i == n) {
// Array is sorted
return;
}
int key;
key = arr[i];
if (j == 0 || arr[j] <= key) {
// Internal loop finished, reset j, and advance i;
arr[j + 1] = key;
i++;
j = i - 1;
}
arr[j + 1] = arr[j];
j = j - 1;
}
我试图通过在 openGL 中按下一个键来简单地退出应用程序,但键盘似乎不起作用。 我也不能仅通过单击 window 的关闭按钮来退出应用程序。对这种行为有什么解释吗? 我也不会连续重新创建 window。
这是代码片段
void keyboardfunc(unsigned char key, int x, int y) {
cout << "Inside" ;
switch (key) {
case 'q': exit(0);
default: break;
}
int main(int argc,char ** argv)
{
.
.
.
glutReshapeFunc(reshape_func);
glutDisplayFunc(draw);
glutKeyboardFunc(keyboardfunc);
myinit();
glutMainLoop();
return 0;
}
该程序是通过以图形方式表示数组来模拟插入排序,使用 for 循环我每次都清屏,每次都将数字表示为直方图
说明一下,插入排序的模拟有效,只有键盘回调无效。
您的绘图函数接受 CPU 控制,并且不允许执行 GLUT 事件循环。考虑到 GLUT 是单线程。
您必须注册一个计时器。定时器将产生新的渲染。每秒计算下一次迭代并强制重绘场景。
void draw(){
renderHistogram();
}
void timer(int value) {
getNextIteration();
glutPostRedisplay();
glutTimerFunc(1000, timer, 1); // executed on a second
}
要注册计时器,请在 glutMainLoop 之前包含此行:
glutTimerFunc(1000, timer, 1); // executed on a second
下一个迭代函数为:
int i = 0, j = 0;
void getNextIteration()
{
if (i == n) {
// Array is sorted
return;
}
int key;
key = arr[i];
if (j == 0 || arr[j] <= key) {
// Internal loop finished, reset j, and advance i;
arr[j + 1] = key;
i++;
j = i - 1;
}
arr[j + 1] = arr[j];
j = j - 1;
}