我有一个程序,它允许用户通过对话框选择图像,并显示图像。菜单与图像的右键单击相关联,当用户选择聚类时,会提示用户在控制台输入聚类之间的最小距离。
显示窗口是通过调用该viewer()
方法创建的,该方法创建一个窗口并为其设置 GLUT 属性。
我想在提示用户在控制台输入时破坏带有加载图像的原始窗口,因为很多时候,控制台窗口妨碍了图像显示窗口。
用户在控制台输入值后,我希望窗口再次显示。但问题是,虽然我在读入输入后调用了该函数,但直到下一个函数调用完成执行viewer()
后,该窗口才会再次出现。Clustering()
如果我没有破坏第一个窗口并将我的控制台窗口移开,但是我能够在执行聚类算法时看到图像的变化。
我的问题是,为什么这个显式调用createWindow
被忽略并执行下一个命令。我尝试使用glFinish
,但没有帮助:-(有人可以为我提供解决方案吗?
我的伪代码如下所示:
Clustering()
{
loop
{
image processing code
}
display() ;
}
...
display()
{
drawing code
glutSwapBuffers()
}
void viewer() {
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(width, height);
glutInitWindowPosition(100, 100);
win = glutCreateWindow("Image");
glutCreateMenu(menu);
glutAddMenuEntry("Load Image", 1);
glutAddMenuEntry("Clustering", 3);
glutAddMenuEntry("QUIT", 99);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
}
void menu(int id) {
glutSwapBuffers();
switch (id){
case 1://Open image
...........
break;
case 3://Clustering
glutDestroyWindow(win);
cout << "Please enter in the minimum distance between regions - a value between 1 and " << max_distance << ": \n";
cin >> distance;
Viewer();
Clustering();
break;
case 99:
exit(0);
}
glutPostRedisplay();
}
main()
{
....
viewer();
glutMainLoop();
}
哦,顺便说一句,我检查了如何在处理过程中更新 OpenGL 中的显示?已经 。
尽管问题非常相似,但实际问题略有不同。