KG / КГ_9глава
.docГЛАВА 9
Пример анимации
Анимация — это создание иллюзии движения, изменения чего-то во времени. Для этого генерируется последовательность кадров путем моделирования развития во времени определенных процессов. В предыдущих главах в некоторых примерах программ мы уже использовали такой способ показа, например, обзор движущейся камерой неподвижных объектов (см. главу 8).
Морфингом (morphing) называются методы моделирования изменений формы объекта. Обычно стадии преобразования формы объекта определяются с помощью множества опорных точек. Потом выполняется некоторая интерполяция и показ всех этапов трансформации [47].
9.1. Поверхность Безье
Рассмотрим пример "живой" поверхности Безье, задаваемой точками-ориентирами. Если плавно перемещать в пространстве эти точки-ориентиры, то поверхность Безье будет соответственно видоизменяться. Выберем кубическую поверхность Безье.
Для описания изменения расположения точек-ориентиров используем пространственные кубические кривые Безье, заданные в параметрической форме. Параметром будет время (или номер кадра). Для описания формы кубических кривых требуется четыре опорные точки.
Таким образом, тут используются кривые Безье для описания стадий трансформаций и поверхности Безье в качестве объектов трансформации. Можно это назвать вариацией на тему Безье. Кроме того, здесь мы попрактикуемся в закрашивании поверхностей методом Гуро.
Для упрощения программы поверхности рисуются симметрично по четырем
квадрантам.
Всего создается сто кадров. Номер кадра определяет значение параметра t от 0 до 1. Этот параметр используется для расчета текущих координат точки каждой из 16 кубических кривых Безье. Вдоль этих кривых скользят опорные точки-ориентиры поверхностей Безье (рис. 9.1). Каждая поверхность отображается полигональной сеткой 10x10.
Результат работы программы изображен на рис. 9.2.
Рис. 9.1. Две трассы движения Рис. 9.2. Двенадцать сплайнов Безье.
Последний кадр
На рис. 9.3 отображена начальная форма и три промежуточные стадии развития объекта.
Рис. 9.3. Четыре стадии изменения формы
9.2. Градиентное закрашивание
При разработке и тестировании функций предыдущей программы почти случайно был получен интересный рисунок— пример градиентного закрашивания поверхностей Безье (рис. 9.4 и на обложке книги).
На этом рисунке поверхность выглядит тек-стурированной рельефными ячейками, будто пуховое одеяло. Каждая ячейка— это грань поверхности Безье, которая рисуется так, что цвет закрашивания темнеет слева направо. Для каждой грани вычисляется наклон нормали, задающий цвет градиентного закрашивания. Объект в целом напоминает, скорее всего, капусту.
Текст программы приведем только для тех функций, которые изменены. Поскольку метод Гуро здесь уже не используется, то функция MyPolygonGouraud переименована В MyPolygon, a MyLineHorGouraud — В MyLineHor. В теле функции MyPolygon вычисляется цвет грани с помощью новой функции RefiectionCoior. В остальном текст программы идентичен тексту предыдущей программы.