Для того чтобы OpenGL зарезервировал для этой цели отдельный буфер, в подпрограмме, которая используется в mainO для инициализации режима работы дисплея, вместо команды GLUT_SINGLE нужно применить команду GLuT_D0UBL£:
gl ut I n i tD i s pl ayMode ( GLUT_00UBLE | GLUTJGB):
Команду glutSwapBuffersO нужно расположить сразу после hexSwirl О в коде из листинга 3.3. В этом случае, даже если на рисование ломаной линии уходит заметное время, в процессе анимации изображение будет быстро меняться от одной картинки к другой, что обеспечивает более плавное движение и производит приятный для глаз эффект.
Практическое упражнение 3.2.2. Вращающиеся вихри Рисунок 3.11, а представляет еще один пример отсечения и мозаичного покрытия. На нем показано завихрение шестиугольников с рис. 3.10 с выделением некоторого окна. В этом примере окно остается неизменным, а порт просмотра изменяется от рисунка к рисунку. На рис. 3.11, б показано несколько копий этого рисунка, составленных вместе и покрывающих дисплей мозаикой. Попробуйте выделить отдельные вихри. (Некоторые из этих вихрей были зеркально отражены. Какие именно?) Получившийся результат слепит глаза, отчасти в силу склонности наших глаз складывать множество мелких элементов в единый узор.
Приведенный ниже код создает узор рис. 3.11, б, за исключением зеркального отражения. Функция myDisplayO устанавливает окно один раз и затем рисует отсекаемые вихри снова и снова в различные порты просмотра. Вот этот код:
void myDisplay(void) {
clear the screen II очищаем экран
setWindow(-0.6. 0.6. -0.6. 0.6): // the portion of the swirl to draw // часть вихря для рисования
for(int i - 0: i < 5; i++) // make a pattern of 5-by-4 copies // создаем узор из 5x4 копий
forCint j - 0; j < 4: j++) {
int L - 80:
// the amount to shift each viewport
// количество для сдвига каждого порта просмотра
geViewportti * L. L + i * L. L. L):
hexSwi rK ) :
Дополнительные инструменты для рисования
а б Рис. 3.11. Заверяющиеся шестиугольники в фиксированном окне (а); мозаика, сформированная с использованием многих портов просмотра (б)