Witam,
Mam taki problem gdyż w moim programie wdrożyłem obiekty 3D. Wszystko działa jak trzeba jednak głównym program jest w konsoli i teraz przedstawię jak to działa i z czym mam problem.
Wpisuje komendę show i wyskakuje okno Open GL
Po wpisaniu komendy show wykonuje się taki if
if (a_krawedz_COMMAND == "show")
{
// Inicjalizacja biblioteki GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("Cube");
// Rejestracja funkcji obsługi zdarzeń
glutDisplayFunc(displayCube);
glutReshapeFunc(reshape);
glutMouseFunc(mouseCube);
glutMotionFunc(motion);
glutKeyboardFunc(keyboardCube);
////glutSpecialFunc(specialKeys);
// Ustawienie koloru tła
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// Włączenie testu głębokości
glEnable(GL_DEPTH_TEST);
// Inicjalizacja wygładzania krawędzi
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
// Pętla główna
glutMainLoop();
///// jak mam wyjść z petli glutMainLoop(); ?
}
I mam teraz funkcję keyboard w której po naciśnięciu ESC okno Open GL się zamyka za pomocą funkcji:
glutDestroyWindow(glutGetWindow());
Tu jest kod funkcji keyboard:
void keyboardCube(unsigned char key, int x, int y)
{
if (key == 'f' || key == 'F')
{
filledCube = !filledCube;
glutPostRedisplay();
}
if (key == 'v' || key == 'V')
{
showVertices = !showVertices;
glutPostRedisplay();
}
if (key == 'r' || key == 'R')
{
autoRotate = !autoRotate;
if (autoRotate)
glutIdleFunc(rotateCube);
else
glutIdleFunc(nullptr);
}
if (key == 27) // ESC
{
}
// Prze³¹czanie wyœwietlania przek¹tnych szeœcianu
if (key == 'd' || key == 'D')
{
showDiagonals = !showDiagonals;
glutPostRedisplay();
}
}
I teraz przejdę do sedna problemu.
Chce widzieć jak przerwać pętle glutMainLoop();, gdyż po naciśnięciu ESC okno się zamknie
if (key == 27) // ESC
{
glutDestroyWindow(glutGetWindow());
}
ale nie wiem jak potem powrócić do programu tak żeby program nie kończył się, bo jak zrobię tak :
if (key == 27) // ESC
{
exit(0);
}
to program się zakończy a jak tak nie chce, chce żeby tern program w konsoli który wywołuje okno OEPN GL, dalej działał i można w nim było dalej wpisywać komendy czy wykonywać inne obliczenia.
tego nie chce tak jak poniżej na obrazku.
Jak ktoś wie jak przerwać tą pętlę to proszę o pomoc :).
Z góry dziękuję.