Программист в любой точке программы может воспользоваться наличием многих клавиш на клавиатуре, с тем чтобы предоставить пользователю больший выбор. Большинство реализаций функции myKeyboardO (клавиатура) состоит из длинного оператора switch (переключатель) с описанием case (регистра) для каждой клавиши, представляющей интерес. В листинге 2.17 приведен один из возможных вариантов. Нажатие клавиши р рисует точку в позиции мыши; нажатие клавиши «стрелка влево» добавляет точку в некоторый (глобальный) список, но не рисует ее2; нажатие клавиши Я вызывает выход из программы. Отметим, что если пользователь нажимает клавишу/7 и держит ее, одновременно перемещая мышь, то генерируется быстрая последовательность точек, составляющая «чертеж от руки».

Листинг 2.17. Пример функции обратного вызова для клавиатуры

void myKeyboard(unsigned char, int mouseX, int mouseY) {

Glint x - mouseX;

Glint у - screenHeight - mouseY: // flip the у value as always // как всегда, зеркально отражаем координату у

switch theKey)

{

case 'р':

drawDot(x. у): // draw a dot at the mouse position // рисуем точку в позиции мыши

break:

case GLUT_KEY_LEFT: List[++last].x - x: // add a point // добавляем точку

1 Аббревиатура «ASCII» означает «American Standard Code for Information Interchange* («Американский стандартный код для обмена информацией»). Таблицы величин ASCII всегда доступны в Интернете. Смотрите также файл asci i. html на web-сайте книги.

2 Названия различных «специальных» клавиш на клавиатуре, таких как функциональные клавиши, клавиши со стрелками, клавишу «home», можно найти во включаемом файле gl ut. h.

2.6. Тематические задания

List [ last].у = у; break: case 'Е':

exit (-1): // termirate the program // прекращаем работу программы default: break: // do nothing // не делаем ничего }

}

2.5. Резюме Самое трудное в написании графических приложений - это начало: необходимо собрать вместе аппаратные и программные ингредиенты в единую программу, которая нарисовала бы несколько первых картинок. Интерфейс прикладного программирования (API) OpenGL оказывается при этом чрезвычайно полезным, предоставляя мощный и вместе с тем сравнительно простой набор подпрограмм для создания графиков. Одним из самых больших достоинств API является его аппаратная независимость, что дает возможность писать программы для одной графической среды и без каких-либо изменений использовать ту же самую программу в другой среде.


⇐ Предыдущая| |Следующая ⇒