glutldleFunc(idle); if(button==GLUT_MIDDLE && state=GLUT_DOWN)
glutIdleFunc(NULL)j
}

Таким образом, щелчок левой кнопкой мыши запускает вращение квадрата, а щелчок средней кнопкой- прекращает его. Если запустить программу на выполнение, то, скорее всего, выводимое изображение не создаст у вас иллюзию вращающегося квадрата, а вы уви-

Ввод и взаимодействие с пользователем

дите фрагменты квадрата, изменяющиеся с течением времени. Что же в этой программе сделано неправильно? Этим вопросом мы и займемся в дальнейшем.

3.9.2. Двойная буферизация При выводе изображения нужно, чтобы частота обновления была достаточно высокой и зритель не смог заметить, как экран очищается и как на нем формируется новое изображение. Эта частота должна превышать 50 Гц, тогда зритель не заметит мелькания изображения на экране. В графических компьютерных системах это требование касается прежде всего частоты регенерации изображения, т.е. быстродействия буфера кадра. Если содержимое буфера не изменяется и обеспечена частота регенерации свыше 50 Гц (а лучше где-то около 85 Гц), для зрителя будут созданы необходимые комфортные условия восприятия изображения10. Но если содержимое буфера изменяется, то зритель может увидеть совершенно нежелательные эффекты, например заметить "дерганье" последовательных фаз изменяющейся картинки.

Это явление наблюдается особенно отчетливо, если изображение достаточно сложное и очередную его фазу не удается сформировать за один период регенерации. В этом случае зритель увидит половину кадра с новой фазой движения, а половину - с прежней. Изображение перемещающегося объекта будет при этом искажено на экране. То же самое происходит и с последовательными процессами очистки экрана и обрисовки нового изображения, как это имеет место в нашем примере с вращающимся квадратом. Хотя квадрат - это довольно простой объект, который формируется за время, меньшее периода регенерации, в нашей программе отсутствует связь между процессом формирования объекта в буфере и выводом содержимого буфера на экран аппаратными средствами. Таким образом, вполне вероятно, что на экран будет отправлено содержимое буфера, в котором новый квадрат сформирован только частично.


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