В первой части фрагментного шейдера вычисляется коэффициент возмущения для направления х. Необходимо, чтобы коэффициент возмущений зависел от 5- и г-компонентов текстурных координат. Для этого вычисляется локальная переменная rad, которая линейно зависит от значений s и t. (Похожее, но немного другое выражение будет вычислять коэффициент возмущения для направления у во второй половине шейдера.) К результату добавляется значение StartRad. И наконец, по х-компоненту Freq результат масштабируется.

Значение rad будет увеличиваться с увеличением StartRad, а частота возмущений увеличивается с ростом коэффициента масштабирования Freq.x. Коэффициент масштабирования должен увеличиваться при увеличении размера текстуры на экране, чтобы видимая частота возмущений не зависела от масштаба. Можно представлять uniform-переменную Freq как шкалу Рихтера для возмущений. Если ее значение будет равно 0, то возмущений вообще не будет. Значение 1,0 вызовет легкое покачивание, 2,0 - тряску, 4,0 - биение, а 8,0 - эффект, похожий на землетрясение.

Следующие семь строк кода приводят значение rad к диапазону [-л/2, я/2]. После этого можно вычислять sin (rad) с помощью первых двух членов последовательности Тейлора для синуса, это всего лишь выражение х - х?/3\. Результат вычисления умножается нах-компонент переменной Ampi itude. Значение вычисленного синуса будет находиться в диапазоне [-1, 1]. Если просто прибавить это значение к текстурной координате как коэффициент возмущения, координата сильно изменится. Но в данном случае нужно колебание, а не эффект взрыва, поэтому вычисленное значение синуса умножается на 0,05, в результате чего получаются возмущения небольшого размера. Увеличивая этот коэффициент, можно задавать возмущения большего размера, а уменьшая - меньшего размера. Представить себе действие коэффициента можно так: он определяет, как далеко «уходит» текстурная координата от первоначального значения. Значение коэффициента 0,05 означает, что текстурная координата изменится не больше, чем на ±0,05.


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