Шейдер можно написать так, что он будет рисовать объект по-разному всякий раз при новом значении времени. Чтобы избежать дефектов изображения и разрывов при движении объекта, в конце временного цикла объект должен возвратиться в первоначальное положение. Если приложение использует для создания эффекта анимации шейдер, ему уже не нужно выполнять сложные вычисления - лишь обновлять значения времени при смене кадров и перерисовывать объект. Но иногда приложение может выполнять и некоторые дополнительные вычисления для достижения интересных эффектов анимации.

Интересные эффекты анимации создаются с помощью хранимых и процедурных текстур, шума и другими способами. В этой главе будут описаны некоторые

13.3. Преобразования простые эффекты анимации и шейдеры для изменения формы и расположения объекта, а также для имитации колебательных движений.

3.1. Два режима рисования объекта Пусть существует объект, который нужно рисовать по-разному в зависимости от какого-либо условия: например, мигающая неоновая реклама в некоторые моменты времени включена, а в некоторые - выключена. В принципе, можно написать два разных шейдера, один для включенного состояния, а второй - для выключенного. Но в данном случае будет проще написать один шейдер, который анализирует состояние некоторой переменной и определяет, в каком состоянии находится объект, включенном или выключенном, а потом рисует объект в соответствии с этими данными.

Чтобы это сделать, в приложении устанавливается значение ипйогт-перемен-ной, которое показывает текущее состояние объекта. Приложение должно вовремя обновлять эту переменную; например, для того чтобы неоновая реклама была 3 секунды включена и одну секунду выключена, приложение должно записать в переменную значение «включено», через 3 секунды записать «выключено», еще через одну секунду записать «включено» и т. д. В промежутках нужно всего лишь постоянно перерисовывать изображение. Разделение рендеринга и эффекта анимации делает приложение более простым, его легче поддерживать и легче вносить в него изменения.


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