Введение в программирование трехмерных игр с DX9



         

Встроенные функции - часть 2


/p>

Большинство функций имеют перегруженные версии для работы со всеми встроенными типами для которых результат работы функции имеет смысл. Например, функция abs имеет смысл для всех скалярных типов и, следовательно, имеет перегруженные версии для всех них. В то же время векторное произведение имеет смысл только для трехмерных векторов и поэтому для функции cross есть перегруженные версии для работы с трехмерными векторами любых типов (то есть векторами, компоненты которых имеют тип int, float, double и т.д.). С другой стороны, линейная интерполяция, lerp, имеет смысл для скаляров, двухмерных, трехмерных и четырехмерных векторов, и имеет перегруженные варианты для всех этих типов.

ПРИМЕЧАНИЕ

Если вы передаете вектор или матрицу в «скалярную» функцию, то есть функцию, которая обычно выполняется над скалярами (например, cos(x)), вычисления будут проводиться покомпонентно. Например, если написать:

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); // транспонирование матрицы




Содержание  Назад  Вперед