Для того чтобы 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. Дополнительные инструменты для рисования

Френсис Хилл

а б Рис. 3.11. Заверяющиеся шестиугольники в фиксированном окне (а); мозаика, сформированная с использованием многих портов просмотра (б)


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