Таблица 5.4. Геометрические функции
Синтаксис |
Описание |
float length (float x) |
Возвращает длину вектора х, то есть |
float length (vec'2 x) |
sqrtOrrO] л-[0] + л-[1] jr[l] + …) |
float length (vec3 x) | |
float length Cvec4 x) | |
float distance (float pO. |
Возвращает расстояние между pOv\ pi, |
float pi) |
то есть length (pO- pi) |
float distance (vec2 pO. | |
vec2 pi) | |
float distance (vec3 pO. | |
vec3 pi) | |
float distance (vec4 pO. | |
vec4 pi) | |
float dot (float x, float у) |
Возвращает скалярное произведение xwy, |
float dot (vec2 x. vec2 y) |
ТО ЄСТЬ result = JC[0] - /[0] + А-[1] /[1] +… |
float dot (vec3 x. vec3 y) | |
float dot (vec4 x. vec4 y) | |
vec3 cross (vee3 x, vee3 y) |
Возвращает векторное произведение х\л у, |
то есть resultfO] = х[1]- у[2] - у[1] х[2] |
|
resultfl] = л-[21 - /[0] - у[2] х[0] |
|
result[2] = х[0] /[1] - /[0] х[1] |
|
float normalize (float x) |
Возвращает вектор с тем же направлением, что х, |
vec2 normalize (vec2 x) |
но длиной 1 |
vec3 normalize (vec3 x) | |
vec4 normalize (vec4 x) |
5.5. Матричные функции
Синтаксис |
Описание |
vec4 ftransfornH) |
Только для вершинных шейдеров. Эта функция |
гарантирует, что координаты вершин будут |
|
преобразованы таким же способом, что и обыч- |
|
ными операциями OpenGL. Предполагаемое при- |
|
менение этой функции - вычисление значений |
|
для gl^Position |
|
float faceforward (float N. |
Если скалярное произведение (/Vref, /) < 0,0, |
float I. float Nref) |
вернуть N ; в противном случае вернуть -N |
vec2 faceforward (vec2 N. | |
vec2 I. vec2 Href) | |
vec3 faceforward (vec3 N, | |
vec3 I. vec3 Nref) | |
vec4 faceforward (vec4 N. | |
vec4 I. vec4 Nref) | |
float reflect (float I. |
Для инцидентного вектора /и ориентации поверх- |
float N) |
ности N возвращает направление отражения: |
vec2 reflect (vec2 I. | result = /- 2,0 dot(/V, /) N |
vec2 N) |
/Vдолжно быть нормализовано |
vec3 reflect (vec3 1. | |
vec3 N) | |
vec4 reflect (vec4 I. vec4 N) |
Версия функции di stance с параметрами f 1 oat, возможно, не очень полезна (это то ж самое, что абсолютное значение разницы), но при этом вычисляется расстояние Эвклида между двумя точками. Подобным образом Я oat-версия функции normal i ze всегда будет возвращать 1, a f 1 oat-версия функции 1 ength всегда будет возвращать абсолютное значение входного аргумента. Скалярные формы этих функций полезны тем, что типы данных аргументов могут быть изменены без изменения кода, который будет вызывать встроенную функцию.