Встроенные функции
В HLSL есть богатый набор встроенных функций, часто используемых для трехмерной графики. Ниже приведена таблица с сокращенным списком этих функций. В следующих двух главах мы попрактикуемся в применении некоторых из них. А сейчас давайте просто познакомимся с этими функциями.
ПРИМЕЧАНИЕ
Функция | Описание |
abs(x) | Возвращает |x|. |
ceil(x) | Возвращает наименьшее целое, которое больше или равно x. |
clamp(x, a, b) | Ограничивает x в диапазоне [a, b] и возвращает результат. Если x меньше a возвращается a, если x больше b, возвращается b, в остальных случаях возвращается x. |
cos(x) | Возвращает косинус x, x — в радианах. |
cross(u, v) | Возвращает u × v. |
degrees(x) | Преобразует x из радиан в градусы. |
determinant(M) | Возвращает детерминант матрицы det(M). |
distance(u, v) | Возвращает расстояние |v – u| между точкам u и v. |
dot(u, v) | Возвращает u Ч v. |
floor(x) | Возвращает наибольшее целое, которое меньше или равно x. |
length(v) | Возвращает |v|. |
lerp(u, v, t) | Линейная интерполяция между u и v на основании параметра t, находящегося в диапазоне [0, 1]. |
log(x) | Возвращает ln(x). |
log10(x) | Возвращает log10(x). |
log2(x) | Возвращает log2(x). |
max(x, y) | Возвращает x если x ≥ y, иначе возвращает y. |
min(x, y) | Возвращает x если x ≤ y, иначе возвращает y. |
mul(M, N) | Возвращает произведение матриц MN. Обратите внимание, что произведение матриц MN должно быть определено. Если M это вектор, он используется как вектор-строка, чтобы было определено произведение вектора на матрицу. Точно так же, если N это вектор, то он используется как вектор-столбец, чтобы было определено произведение матрицы на вектор. |
normalize(v) | Возвращает v/|v|. |
pow(b, n) | Возвращает bn. |
radians(x) | Преобразует x из градусов в радианы. |
reflect(v, n) | Вычисляет вектор отражения по исходному вектору v и нормали поверхности n. |
refract(v, n, eta) | Вычисляет вектор преломления по исходному вектору v, нормали поверхности n и отношению коэффициентов преломления двух материалов eta. Чтобы получить дополнительные сведения о преломлении, посмотрите закон Снеллиуса в учебнике физики. |
rsqrt(x) | Возвращает 1/√x. |
saturate(x) | Возвращает clamp(x, 0.0, 1.0). |
sin(x) | Возвращает синус x, x в радианах. |
sincos(in x, out s, out c) | Возвращает синус и косинус x, x в радианах. |
sqrt(x) | Возвращает √x. |
tan(x) | Возвращает тангенс x, x в радианах. |
transpose(M) | Возвращает транспонированную матрицу MT. |
ПРИМЕЧАНИЕ
float3 v = float3(0.0f, 0.0f, 0.0f); v = cos(v);
то функция будет применена к каждой компоненте : v = (cos(x), cos(y), cos(z)).
float x = sin(1.0f); // синус 1.0f радиан
float y = sqrt(4.0f); // квадратный корень из 4.
vector u = {1.0f, 2.0f, -3.0f, 0.0f}; vector v = {3.0f, -1.0f, 0.0f, 2.0f}; float s = dot(u, v); // скалярное произведение векторов u и v.
float3 i = {1.0f, 0.0f, 0.0f}; float3 j = {0.0f, 1.0f, 0.0f}; float3 k = cross(i, j); // векторное произведение векторов i и j.
matrix<float, 2, 2> M = {1.0f, 2.0f, 3.0f, 4.0f}; matrix<float, 2, 2> T = transpose(M); // транспонирование матрицы