glRasterPos2i(rx, гу);
glutBitmapCharacter(GLUT BITMAP_8_BY_13, k); rx+=glutBitmapWidth(GLUT~BITMAP_8_BY_13, k);
Далее в этой главе будет рассмотрена программа, в которой надпись выводится растровым шрифтом с помощью дисплейного списка.
Организация прикладной программы на базе использования дисплейных списков требует особого внимания при программировании, и мы еще вернемся к этому вопросу в главе 8, когда будем рассматривать иерархические графические модели. Но сейчас нас больше интересует ясность и наглядность программы, хотя это и может пойти в ущерб ее производительности. Поэтому в большинстве примеров в последующих главах дисплейные списки применяться не будут. В принципе, большую часть приведенных текстов программ достаточно легко использовать и применительно к дисплейным спискам. Для этого требуется заключить фрагменты, формирующие изображение, в "процедурные скобки" - вызовы функций glNewList() и glEndList().
3.5. Программирование ввода, управляемого событиями В этом разделе на множестве несложных примеров мы рассмотрим механизм обработки событий при вводе информации пользователем в прикладную программу. В основу программной реализации этого механизма положены функции с обратным вызовом, упомянутые в разделе 3.2. Будут рассмотрены типы событий, распознаваемые операционной системой, и для тех из них, которые представляют интерес для графических приложений, разработаны функции с обратным вызовом, отвечающие за реакцию приложения на эти события.
3.5.1. Использование устройств указания Начнем обсуждение механизма обработки событий с модификации функции main() в программе построения узора Серпинского, рассмотренной в главе 2. В первой ее версии для вывода окна приложения на экран были использованы функции из библиотеки GLUT, а затем с помощью функции glutMainLoop() организован цикл ожидания событий. В теле цикла не было запрограммировано никаких операций. Даже прекращение работы программы выполнялось внешним по отношению к этому циклу механизмом. Этот недостаток первой версии программы был преодолен за счет использования устройства указания, которое позволяло прекратить выполнение программы, вызвав стандартную функцию прерывания выполнения exit() при нажатии определенной кнопки мыши.