На рис. 3.10 показаны некоторые из использованных окон; все они являются концентрическими и имеют фиксированное форматное соотношение, но с каждым последующим кадром их размер уменьшается. Представьте мысленно, что нарисовано в порте просмотра для каждого из этих окон.
Скелет программы, позволяющей достичь этого эффекта приближения, показан в листинге 3.3. Для каждого нового кадра экран очищается, окно делается все меньше (с фиксированными центром и форматным соотношением), а рисунок внутри окна рисуется в постоянном порту просмотра.
5 Ф. Хилл
Дополнительные инструменты для рисования
Листинг 3.3. Создание анимации
float сх - 0.3, су - 0.2: // center of the window // центр окна
float Н. w - 1.2. aspect - 0.7:
// window properties
// свойства окна
set the viewport
II устанавливаем порт просмотра
for(int frame - 0: frame < NumFrames: frame++)
{
// for each frame
// для каждого кадра
clear the screen
II очищаем экран
// erase the previous figure
// удаляем предыдущий рисунок
w *- 0.7: // reduce the window width // уменьшаем ширину окна
H - W * aspect; // maintain the same aspect ratio // сохраняем прежнее форматное соотношение
setwindowCcx - W. сх + w. су - H, су + Н); //set the next window // устанавливаем следующее окно
hexSwi rl(); // draw the object // рисуем объект
}
Рис. 3.10. Приближение к завихряющимся шестиугольникам Получение плавной анимации Предыдущее приближение не является вполне удовлетворительным, поскольку рисование новой фигуры занимает определенное время. Все, что видит пользователь, - это повторяющийся цикл из следующих двух действий"opengl1_154.html">⇐ Предыдущая| |Следующая ⇒