Метод связи функции обратного вызова с определенным типом события часто полностью зависит от системы. Однако вместе с OpenGL поставляется набор утилит (Utility Toolkit) (см. приложение А), в котором предусмотрены программные средства для того, чтобы помочь в организации управления событиями. Например, команда
gl utMouseFunc(myMouse):
// register the mouse action function
// функция для регистрации действий мыши регистрирует функцию myMouseO в качестве функции, подлежащей выполнению при возникновении события «мышь». Префикс «glut» показывает, что данная функция является частью OpenGL Utility Toolkit. Программист размещает в myMouseO код для обработки всех возможных действий мыши, которые представляют для него интерес.
В листинге 2.1 приведен скелет примерной функции mainO для программы, управляемой событиями. Большинство наших программ в данной книге будут основываться на этой структуре. Существует четыре основных типа событий, с которыми мы будем работать, а «gluU-функции доступны каждому.
Листинг 2.1. Структура управляемой событиями программы, использующей OpenLG void mainO {
initialize things1
1 Замечания, выделенные курсивом внутри фрагментов исходного кода, представляют собой скорее псевдокод, чем настоящий программный код. Эти замечания предполагают действия, которые должен выполнять в этом месте подразумеваемый реальный код.
2.1. Начальная стадия создания изображения
// инициализируем все. что необходимо
create a screen windou II создаем экранное окно
glutDisplayFunc(myDi splay): // register the redraw function // регистрируем функцию обновления окна
glutReshapeFunc(myReshape); // register the reshape function // регистрируем функцию изменения формы
glutMouseFunc(myMouse); // register the rouse action function // регистрируем функцию реакции на действия мыши
glutKeyboardFunc(myKeyboard): // register the keyboard action function // регистрируем функцию реакции на действия // клавиатуры
perhaps initialise other things II при необходимости инициализируем что-то еще