Подпрограмму drawTweenC) можно использовать в цикле анимации, осуществляющем твининг Л и В назад и вперед, вначале с возрастанием г от 0 до 1, а затем с убыванием t обратно до 0 и т. д. Для перехода от одного отображенного твина к следующему мгновенному твину применяется двойная буферизация, которая рассматривалась в главе 3. Код для этой операции имеет такой вид:
for(t - 0.0. delT -0.1; : t +- delT)
// tween back and forth forever
// осуществляем бесконечный твин взад-вперед
Автоматические двери . Автоматические раздвижные двери.
{
clear the buffer II зачищаем буфер
drawTweenCA. В. п. t): glutSwapBuffersO:
if( t >- 1.0 И t <- 0.0) delT - - delT: // reverse the flow of t // реверсируем направление изменения t }
На рис. 4.22 показано искусное использование этой техники, основанной на двух множествах ломаных линий. Показаны три твина (какие значения t взяты?) Поскольку эти два набора ломаных нарисованы достаточно далеко друг от друга, остается место, чтобы нарисовать между ними твины без перекрытия, так что все пять изображений отлично помещаются в одном кадре.
Сьюзан Е. Бренман из корпорации Хьюлетт Паккард в Пало-Альто, Калифорния (Susan Е. Вгеппап of Hewlett Packard Corporation in Palo Alto, California), опубликовала сделанные с помощью этого метода карикатуры знаменитых личностей (см. [Dewdney, 58].) На рис. 4.23 приведен пример такой карикатуры. Второй и четвертый рисунки сделаны на основе оцифрованных портретов Элизабет Тейлор и Джона Ф. Кеннеди. Третий рисунок является твином, а остальные три сделаны методом экстраполяции (extrapolation). Иными словами, использованы значения t, большие 1, так что член (1-0 становится отрицательным. С помощью экстраполяции получаются карикатурные искажения, в некотором смыс4.5. Отображение ключевых геометрических объектов ле «переход по другую сторону» ломаной В относительно ломаной Л. На рисунке также использованы значения г, меньшие 0, что дает аналогичный эффект.
Рис. 4.23. Карикатуры из лиц: твининг и экстраполяция. (С разрешения Сюзанны Бреннан (Susan Brennan)
Твининг используется в киноиндустрии для уменьшения стоимости производства мультипликационных фильмов. Раньше художник должен был рисовать по 24 рисунка на каждую секунду фильма, так как фильмы показывают 24 кадра в секунду. Теперь же художнику нужно нарисовать в определенном порядке только начальный и конечный рисунки, называемые ключевыми кадрами (key frames), и предоставить компьютеру автоматическое генерирование всех остальных кадров. Например, если персонажи не движутся слишком быстро в течение какого-нибудь полусекундного фрагмента мультфильма, то художник может нарисовать и оцифровать первый и последний кадры этого фрагмента, а компьютер создаст 10 твииов с помощью линейной интерполяции, сэкономив тем самым художнику огромное количество времени (см. тематическое задание в конце этой главы, где приводится проект программ, осуществляющий эти эффекты).