GLUT предоставляет всевозможные функции для работы с окнами. Среди этих функций найти можно практически всё необходимое для создания небольших программ. Как я уже выше говорил, при создании окна, функция glutCreateWindow при успешном завершении возвращает дескриптор созданного окна (значение int). Это значение в дальнейшем может быть использовано для операций с этим окном. Рассмотрим те операции, которые можно производить над окном. Прежде всего необходимо выбрать наше окно, т.е. сделать его текущим (не забывайте, создано может быть несколько окон и надо сообщить GLUT с каким именно окном вы хотите работать). Если вы создали всего одно окно то следующую функцию можно опустить. void glutSetWindow(int win); Эта функция делает окно win текущим. После этого можно производить различные операции над этим окном. int glutGetWindow(void); Эта функция позволяет вам определить какое в данный момент окно является активным. Функция возвращает дескриптор окна. После того как выбрано окно, можно производить над ним конкретные действия:
Существует еще одна интересная функция, которая позволяет устанавливать в окне форму курсора: void glutSetCursor(int cursor); Параметр cursor может принимать одно из следующих значений: GLUT_CURSOR_RIGHT_ARROW, GLUT_CURSOR_LEFT_ARROW, GLUT_CURSOR_INFO, GLUT_CURSOR_DESTROY, GLUT_CURSOR_HELP, GLUT_CURSOR_CYCLE, GLUT_CURSOR_SPRAY, GLUT_CURSOR_WAIT, GLUT_CURSOR_TEXT, GLUT_CURSOR_CROSSHAIR, GLUT_CURSOR_UP_DOWN, GLUT_CURSOR_LEFT_RIGHT, GLUT_CURSOR_TOP_SIDE, GLUT_CURSOR_BOTTOM_SIDE, GLUT_CURSOR_LEFT_SIDE, GLUT_CURSOR_RIGHT_SIDE, GLUT_CURSOR_TOP_LEFT_CORNER, GLUT_CURSOR_TOP_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_LEFT_CORNER, GLUT_CURSOR_INHERIT, GLUT_CURSOR_NONE, GLUT_CURSOR_FULL_CROSSHAIR. В GLUT существует специальный режим, позволяющий вам использовать режим игры для вашей OpenGL программы, т.е. когда ваше приложение занимает весь экран. Для этого в GLUT существуют специальные команды для управления этим режимом. Первая из них: void glutGameModeString(const char *string); Эта функция определяет параметры устанавливаемого разрешения экрана, глубину цвета и частоту обновления экрана(в герцах). Формат входного параметра такой: (Screen_width)x(Screen_height):(Depth)@(Refresh_Frequency) Например: glutGameModeString("640x480:16@72"); - Означает, что необходимо выбрать разрешение экрана 640 на 480 пикселей при глубине цвета в 16 бит и частоте обновления экрана 72 герца. Чтобы перейти в режим GAME MODE необходимо вызвать функцию: int glutEnterGameMode(void); А чтобы выйти из режима GAME MODE необходимо вызвать функцию: void glutLeaveGameMode(void); Ну и чтобы было понятнее приведу пример использования этого режима: … int main(int argc, char *argv[]) { WindW = 400; WindH = 300; glutInit(&argc, argv); glutInitWindowSize(WindW, WindH); glutInitDisplayMode(GLUT_RGB); // Enter to game mode: 800x600, 32 bit color, 72 Hz refresh rate glutGameModeString("800x600:32@72"); // For full screen game mode glutEnterGameMode(); glutReshapeFunc(Reshape); glutDisplayFunc(Draw); glutKeyboardFunc(Key); glClearColor(0, 0, 0, 0); glutMainLoop(); return 0; } …
Полный исходный код программы можно взять отсюда: game_mode.zip Отмечу также что можно вызывать функцию glutGameModeString и таким образом: glutGameModeString("800x600:32"); Т.е. не указывая частоту обновления экрана. При этом GLUT сама выберет подходящую частоту. |