Рис. 5.1. Функции sin и cos
.2. Экспоненциальные функции
Экспоненциальные функции можно вызывать и из вершинных, и из фрагментах шейдеров. Все перечисленные далее функции выполняются покомпонентно (табл. 5.2).
Таблица 5.2. Экспоненциальные функции
Синтаксис |
Описание |
float pow (float х. float у) |
Возвращает значение хв степени у, то есть ху |
vec2 pow (vec2 x, vec2 y) | |
vec3 pow (vec3 x. vec3 y) | |
vec4 pow (vec4 x, vec4 y) | |
float exp2 (float x) |
Возвращает значение 2 в степени х, то есть 2х |
vec2 exp2 (vec2 x) | |
vec3 exp2 (vec3 x) | |
vec4 exp2 (vec4 x) |
Таблица 5.2 (продолжение)
Синтаксис |
Описание |
float log2 (float х) |
Возвращает логарифм с основанием 2 от х, то есть |
vec2 logZ (vec2 х) |
возвращает значение у, удовлетворяющее |
vec3 1од2 (vec3 х) |
уравнению х= 2 у |
vec4 1од2 (vec4 х) | |
float sqrt (float x) |
Возвращает положительное значение квадратного |
vec2 sqrt (vec2 x) |
корня из X |
vec3 sqrt (vec3 x) | |
vec4 sqrt (,vec4 x) | |
float inversesqrt (float x) |
Возвращает обратное положительному значение |
vec2 inversesqrt (vec2 x) |
квадратного корня из х |
vec3 inversesqrt (vec3 x) | |
vec4 Inversesqrt (vec4 x) |
5.3. Общие функции Общие функции могут использоваться и вершинным, и фрагментиым шейдерами. Все они работают с аргументами покомпонентно (табл. 5.3).
Таблица 5.3. Общие функции
Синтаксис Описание | |
float abs (float х) |
Возвращает x, если x> 0; в противном случае |
vec2 abs (vec2 x) |
возвращает -х |
vec3 abs (vec3 x) | |
vec4 abs Cvec4 x) | |
float sign (float x) |
Возвращает 1,0, если х> 0, 0,0, если х= 0, -1,0, |
vec2 sign (vec? x) |
если х< 0 |
vee3 sign (vec3 x) | |
vec4 sign (vec4 x) | |
float floor (float x) |
Возвращает значение ближайшего целого числа, |
vec2 floor (vec2 x) |
меньшего или равного х |
vec3 floor (vec3 x) | |
vec4 floor (vec4 x) | |
float ceil (float x) |
Возвращает значение ближайшего целого числа, |
vec2 ceil (vec2 x) |
большего или равного х |
vee3 ceil (vec3 x) | |
vec4 ceil (vec4 x) | |
float fract (float x) |
Возвращает х- floor(jc) |
vec2 fract (vec2 x) | |
vec3 fract (vec3 x) | |
vec4 fract (vec4 x) | |
float mod {float x, float y) |
Модуль. Возвращает х- у- f[oor{x!y) для каждого |
vec2 mod (vec2 x. float y) |
компонента х, используя число с плавающей |
vec3 mod (vec3 x. float у) |
запятой у |
vec4 mod (vec4 x, float у) | |
vec2 mod (vec2 x. vec2 y) |
Модуль. Возвращает х- у - floor (х/у) для каждого |
vec3 mod (vsc3 x. vec3 y) |
компонента х, используя соответствующий |
vec4 mod (vec4 x. vec4 y) |
компонент у |
Синтаксис |
Описание |
'float min (float x, float у) |
Возвращает у, если у < лг; в противном случае возвра |
■vec2 min (vec2 x, vec2 y) |
щает X |
ve:3 min (vec3 к. vec3 y) | |
«4 min (vec4 x. vec4 y) | |
vec2 min (vec2 x, float y) |
Возвращает минимум для каждого компонента х, сопо |
vec3 min (vec3 x. float y) |
ставляемого с числом с плавающей запятой у |
vec4 min (vec4 x. float y) | |
float max (float x. float у) |
Возвращает у, если х< у, в противном случае возвра |
Ш2 max (vec2 x, vec2 y) |
щает X |
vec3 max (vec3 x, vec3 y) | |
vec4 max (vec4 x, vec4 y) | |
vec2 max (vec2 x. float у) |
Возвращает максимум для каждого компонента х, сопо |
йэсЗ max (vec3 x. float у) |
ставляемого с числом с плавающей запятой у |
vec4 max (vec4 x. float y) | |
float clamp (float x. float minVal, |
Возвращает min(max(*, minVal), maxVal) для каждого |
float maxVal) |
компонента х, используя числа с плавающей запятой |
y.ec2 clamp Cvec2 x. float minVal. |
minVal и maxVal |
float maxVal) vec3 clamp (vec3 x, | |
float minVal, float maxVal) | |
vec4 clamp (vec4 x, float minVal. | |
float maxVal) | |
vec2 clamp (vec2 x. vec2 minVal, |
Возвращает покомпонентный результат |
vec2 maxVal) |
min(max(A, minVal), maxVal) |
vec3 clamp (vec3 x. vec3 minVal, | |
vec3 maxVal) | |
vec4 cl amp (vec4 x. vec4 minVal, | |
vec4 maxVal) | |
float mix (float x. float y, |
Возвращает х- (1,0 - а) + у- а, то есть линейное |
float a) |
сочетание хи ус использованием числа с плавающей |
vec2 mix (vec2 x. vec2 y, |
запятой а. Значение а не ограничено диапазоном [0,1] |
float a) | |
vec3 mix (vec3 x, vec3 y, | |
float a) | |
vec4 mix (vec4 x, vec4 y. | |
float a) | |
vec2 mix (vec2 x. vec2 y, vec2 a) |
Возвращает покомпонентный результат х- (1,0 -«?)+ |
vec3 mix (vec3 x. vec3 y, vec3 a) |
+ у - а, то есть линейное сочетание векторов хи у |
vec4 mix (vec4 x, vec4 y. vec4 a) |
с использованием вектора а. Значение а не ограничено |
диапазоном [0,1] | |
float step (float edge, float x) |
Возвращает 0, если х< edge; в противном случае |
vec2 step (vec2 edge. vec2 x) |
возвращает 1,0 |
vec3 step (vec3 edge. vec3 x) | |
vec4 step (vec4 edge. vec4 x) | |
float smoothstep (float edgeO, |
Возвращает 0, если *-<edge0, и 1,0, если > edgel, |
float edgel. float x) |
и выполняет плавную интерполяцию Хермита между 0 |
vec2 smoothstep (vec2 edged. |
и 1 при edgeO < х< edgel |
vec2 edgel. vec2 x) | |
vec3 smoothstep (vec3 edgeO. | |
vec3 edgel. vec3 x) | |
vec4 smoothstep Cvee4 edgeO. | |
vec4 edgel. vec4 x) |
Эти функции полезны в целом, кроме того, многие из них могут пригодиться и для создания интересных шейдеров, как будет видно в последующих главах.