varying float Lightlntensity;
uniform float StartRad: uniform vec2 Freq; uniform vec2 Amplitude:
uniform sampler2D WobbleTex: void main (void)
{
vec2 perturb: float rad: vec3 color:
Спортивные силовые тренажеры и аксессуары в Москве.
// Вычисление коэффициента возмущений для направления х
rad = (gl_TexCoord[0].s + gl_TexCoord[0].t - 1.0 + StartRad) * Freq.x:
// Приведение к диапазону -2.0*PI. 2*PI rad = rad * C_2PI_I: rad = fract(rad): rad = rad * C_2PI:
// -PI. PI
if (rad > C_PI) rad = rad - C_2PI; if (rad < -C_PI) rad = rad + C_2PI;
// -PI/2. PI/2
if (rad > C_PI_2) rad = C_PI - rad: if (rad < -C_PI_2) rad = -C_PI - rad;
perturb.x = (rad - (rad * rad * rad / 6.0)) * Amplitude.x;
// Вычисление коэффициента возмущений для направления у
rad = (gl_TexCoord[0].s - gl_TexCoord[0].t + StartRad) * Freq.у;
// Приведение к диапазону -2*PI. 2*PI rad = rad * C_2PI_I: rad = fract(rad): rad = rad * C_2PI:
// -PI. PI
if (rad > C_PI) rad = rad - C_2PI; if (rad < -C_PI) rad = rad + C_2PI:
// -PI/2. PI/2
if (rad > C_PI_2) rad = C_PI - rad: if (rad < -C_PI_2) rad = -C_PI - rad:
perturb.у = (rad - (rad * rad * rad / 6.0)) * Amplitude.y:
color = vec3 (texture2D(WobbleTex. perturb + gl_TexCoord[0].st)):
gl_FragColor = vec4 (color * Lightlntensity, 1.0):
}
13.8. Итоги
В прежних версиях OpenGL эффекты анимации должны были вычисляться только приложением и занимать ресурсы центрального процессора. С введением программируемости эту работу можно переложить на графический ускоритель и выполнять любые вычисления в шейдере. От текущего времени могут зависеть координаты, форма, текстурные координаты, освещение объекта и многие другие параметры.
При разработке шейдера для движущегося объекта следует часть эффекта анимации вычислять в шейдере. Это разгружает главный процессор и упрощает код приложения. В этой главе были описаны некоторые простые способы анимации объектов с помощью шейдеров. Интерполяция ключевых кадров довольно проста. Частицы также можно двигать, изменяя их координаты, цвет, скорость и любые другие параметры. Объекты и текстуры могут вибрировать, двигаться, расти или меняться по сложным математическим формулам.
Анимация - мощный инструмент, способный донести до зрителя любую информацию, а язык шейдеров OpenGL предоставляет новый эффективный способ анимации объектов.
13.9. Ссылки
Для читателей, особо интересующихся анимационными эффектами, будет полезна книга [7]. Авторы книги обнаруживают глубокое понимание принципов работы с анимацией, происходящей на студии Диснея, в ней много цветных иллюстраций. Часть материалов этой книги была опубликована в докладе [3].
В книге [4] описано множество алгоритмов для компьютерной анимации. Книга [1] также содержит несколько разделов об анимации.
Системы частиц впервые были представлены Биллом Ривзом в докладе [5]. Джефф Ландер написал хорошее руководство по системам частиц [2]. Он также выложил несколько примеров исходного кода - демонстрационные программы создания систем частиц на языке шейдеров OpenGL.
1. DeLoura М. Game Programming Gems. Hingham, MS: Charles River Media, 2000.