Функция ft га ns form предназначена для вычисления gl_Position таким образом: gl_Position = ftransformO
Она преобразует значение glj/ertex, используя текущую матрицу модели-вида, чтобы вычислить для gl_Position значение, идентичное тому, что было бы вычислено с помощью стандартных операций OpenGL. Эта функция используется, например, когда приложение обрабатывает одни и те же геометрические фигуры за несколько проходов, и один проход выполняется с помощью стандартных операций, а другой - с использованием программируемых процессоров.
5.5. Матричные функции
Матричные функции могут вызываться как из вершинных, так и из фрагментных шейдеров (табл. 5.5).
ПРИМЕЧАНИЕЧтобы получить результат математического умножения матриц, следует использовать оператор умножения (*).
Таблица 5,5. Матричные функции
Синтаксис |
Описание |
mat 2 niatrixcontpmu'lt |
Умножает матрицу хна матрицу у покомпонентно, |
mat2 x, mat2 y) |
то есть, result [i][j] является скалярным |
mat3 matrixccspmult |
произведением на /[(][;']. |
mat3 x. mat3 y) | |
mat4 matrixcompmult | |
mat4 x. mat4 y) |
5.6. Функции отношения векторов
Операторы равенства и отношения (<, <=, >, >=, - . 1=) определены таким образом, чтобы возвращать скалярные логические значения, они могут использоваться как из вершинных, так и из фрагментных шейдеров. Для векторов следует воспользоваться одной из перечисленных далее встроенных функций (табл. 5.6).
Таблица 5.6. Функции отношения векторов
Синтаксис |
Описание |
bvec> lessThan(vec2 x. vec2 y) |
Возвращает результаты покомпонентного |
J)vec3 lessThan(vec3 x. vec'3 y) tvec4 lessThan(vec4 x, vec4 y) bvec2 lessThan(ivec2 x. ivec2 y) bvec3 TessThan(ivec3 x, ivec3 y) bvcc-1 lessliian(ivec4 x, ivec4 y) |
сравнения х< у |
dvc-c? lessThanEqual(v.ec2 x, vec2 yj |
Возвращает результаты покомпонентного |
ЬтесЗ lessThanEqual(vec3 x. vec3 y) bvec4 lessThanEqual(vec4 x, vec4 y) bvec2 lessThanEqual(ivec2 x. ivec2 y) 6vec3'lessThanEqual(ivec3 x. ivec3 y) bvec4 lessThanEqual(ivec4 x, ivec4 y) |
сравнения х< у |
bvec2 greaterThan(vec2 x. vec2 y) |
Возвращает результаты покомпонентного |
bvec3 greaterThan(vec3 x. vec3 y) bvec4 greaterThan(vec4 x. vec4 y) bvec2 greaterThan(ivec2 x, ivec2 y) . bvec3 greaterThanCivec3 x, ivec3 y) bvec4 greaterThan(ivec4 x. ivec4 y). |
сравнения х> у |
bvec2 greaterThanEqual(vec2 x. |
Возвращает результаты покомпонентного |
vec2 y) ЬтесЗ greaterThanEqual(vec3 x. vec3 y> bvec4 greaterThanEqual(vec4 x. vec4 y) bvec2 greaterThanEqual(ivec2 x, ivec2 y) ЬтесЗ greaterThanEqual(ivec3 x.ivec3 y) bvec4 greaterThanEqual(ivec4 x,ivec4 y) |
сравнения jcs у |
bvec2 equal(vec2 x. vec2 y) |
Возвращает результаты покомпонентного |
ЬтесЗ equal(vec3 x. vec3 y) bvec4 equal(vec4 x. vec4 y) bvec2 equal (ivec2 x, ivec2 y) Swec3 equal(ivec3 x, ivec3 y) 6vec4 equal(i vec4 x, ivec4 y) bvec2 equal(bvec2 x. bvec2 y) ЬуесЗ equal (ЬуесЗ x. bvec3 y) bvec4 equal(bvec4 x, bvec4 y) |
сравнения х- у |
bvec2 notEqual(vec2 x. yec2 y) |
Возвращает результаты покомпонентного |
bvec3 notEqual(vec3 x, vec3 y) bvee4 notEqual(vec4 x. vec4 y) bvec2 notEqualСivec2 x. ivec2 y) bvec3 notEqual(ivec3 x. ivec3 y) bvec4 notEqualСivec4 x, ivec4 y) bve.c2 notEqual (bvec2 x. bvec2 y) bvee3 notEqualCbvec3 x. bvec3 y) bvec4 notEqual(bvec4 x, bvec4 y) |
сравнения М = у |
bool any(bve.c2 x) |
Возвращает true, если хотя бы один компонент х |
bool any(bvec3 x) |
Возвращает true, если хотя бы один компонент х |
bool any(bvec4 x) |
является true |
bool al1(bvec2 x) bool all(bvec3 x) bool all(bvec4 x) |
Возвращает true, только если все компоненты х- true |
bvec2 not(bvec2 x) bvec3 not(bvec3 x) bvec4 not(bvec4 x) |
Возвращает результаты покомпонентного отрицания х |
5.7. Функции доступа к текстуре
Функции доступа к текстуре видны и вершинному, и фрагментному шейдеру. Каждая из этих функций в качестве первого параметра получает переменную типа sampl ег. Если заданный семплер - типа sarnpl erlD, то операция доступа к текстуре будет считывать данные из 1 D-текстуры, которая ранее была связана с этим семплером. (Было бы неправильно, если бы приложение ассоциировало с переменной sampl erlD не ID-текстуру.) Точно так же переменная sampl er2D используется для доступа к 2 D-тексту ре и т. д. Правила приоритетности текстур, актуальные для стандартных операций OpenGL, здесь будут проигнорированы. Приложение должно устанавливать параметры состояния для текстур самостоятельно перед выполнением шейдера (см. раздел 7.8).