Класс представляющий матрицу 4x4.
Наиболее распространенное использование матрицы 4x4 в трехмерной компьютерной графике - в качестве матрицы трансформации.
Это позволяет вектору, представляющему точку в трехмерном пространстве, подвергаться преобразованиям, таким как перенос, поворот, сдвиг, масштаб, отражение, получение ортогональной или перспективной проекции и так далее, путем умножения на матрицу. Это известно как применение матрицы к вектору.
Каждый Object3D имеет три связанные с ним матрицы 4x4:
Объекты камер имеют три дополнительные матрицы 4x4:
Примечание: Object3D.normalMatrix это матрица 3x3 (Matrix3), а не 4x4.
Метод set() принимает аргументы в порядке row-major а внутри массива elements они хранятся в главном порядке столбцов.
Это означает, что вызов
const m = new v3d.Matrix4();
m.set(11, 12, 13, 14,
21, 22, 23, 24,
31, 32, 33, 34,
41, 42, 43, 44);
приведет к тому, что массив elements будет содержать:
m.elements = [11, 21, 31, 41,
12, 22, 32, 42,
13, 23, 33, 43,
14, 24, 34, 44];
и внутри все вычисления выполняются с использованием упорядочивания по столбцам. Однако, поскольку фактический порядок не имеет математического значения, а большинство людей привыкли думать о матрицах в порядке возрастания строк, в документации «Вердж3Д» матрицы показаны в порядке возрастания строк. Просто имейте в виду, что если вы читаете исходный код, вам придется сделать транспонирование любых матриц, описанных здесь, чтобы понять смысл вычислений.
Существует несколько вариантов извлечения позиции, поворота и масштабирования из Matrix4.
Создает и инициализирует Matrix4 в 4x4 единичную матрицу.
column-major список значений матрицы.
Создает новую Matrix4 с элементами elements, идентичными данной.
Устанавливает преобразование матрицы, состоящее из position, quaternion и scale.
Устанавливает преобразование матрицы, состоящее из position, euler и scale.
Копирует элементы матрицы m в данную матрицу.
Копирует компонент перемещения предоставленной матрицы m в компонент перемещения текущей матрицы.
Раскладывает текущую матрицу на компоненты position, quaternion и scale.
Замечание: не все матрицы могут быть разложены такоим образом. В частности, метод не может быть использован для разложения мировой матрицы объекта, если его родитель имеет неоднородный масштаб.
order — порядок углов Эйлера, используемый для разложения параметра euler. По умолчанию euler._order.
Раскладывает текущую матрицу на компоненты position, euler и scale.
Вычисляет и возвращает определитель (детерминант) матрицы.
Возвращает true, если текущая матрица и m равны.
Извлекает базис текущей матрицы в три предоставленных вектора осей. Если эта матрица вида:
a, b, c, d,
e, f, g, h,
i, j, k, l,
m, n, o, p
то для xAxis, yAxis, zAxis будут установлены значения:
xAxis = (a, e, i)
yAxis = (b, f, j)
zAxis = (c, g, k)
Извлекает компонент вращения предоставленной матрицы m в компонент вращения текущей матрицы.
0.Устанавливает элементы текущей матрицы на основе массива в формате column-major.
Инвертирует текущую матрицу, используя аналититический метод.
Вы не можете инвертировать с детерминантом, равным нулю. Если вы попытаетесь это сделать, метод выдаст нулевую матрицу.
Получает максимальное значение масштаба по 3 осям.
Сбрасывает данную матрицу в единичную матрицу.
Строит матрицу вращения, направленную от eye к center, ориентированную вектором up.
Устанавливает текущую матрицу как преобразование вращения вокруг axis на theta радиан.
Это несколько спорная, но математически обоснованная альтернатива вращению через кватернионы.
Установить текущую матрицу в базисную матрицу, состоящую из трех предоставленных базисных векторов:
xAxis.x, yAxis.x, zAxis.x, 0,
xAxis.y, yAxis.y, zAxis.y, 0,
xAxis.z, yAxis.z, zAxis.z, 0,
0, 0, 0, 1
Создает матрицу перспективной проекции. Используется внутри метода PerspectiveCamera.updateProjectionMatrix()
Создает матрицу ортогональной проекции. Используется внутри метода OrthographicCamera.updateProjectionMatrix().
Устанавливает компонент вращения (левая верхняя матрица 3x3) текущей матрицы на поворот, заданный углами Эйлера. Остальная часть матрицы устанавливается в единичную матрицу. В зависимости от пордяка углов Эйлера возможны шесть исходов. Полный список смотрите здесь.
Устанавливает компонент вращения текущей матрицы на вращение, заданное q, как описано здесь. Остальная часть матрицы устанавливается в единичную матрицу. Таким образом, при задании q = w + xi + yj + zk результирующая матрица будет иметь вид:
1-2y²-2z² 2xy-2zw 2xz+2yw 0
2xy+2zw 1-2x²-2z² 2yz-2xw 0
2xz-2yw 2yz+2xw 1-2x²-2y² 0
0 0 0 1
theta — угол поворота в радианах.
Устанавливает текущую матрицу как вращательное преобразование вокруг оси X на theta (θ) радиан. Результирующая матрица будет иметь вид:
1 0 0 0
0 cos(θ) -sin(θ) 0
0 sin(θ) cos(θ) 0
0 0 0 1
theta — угол поворота в радианах.
Устанавливает текущую матрицу как вращательное преобразование вокруг оси Y на theta (θ) радиан. Результирующая матрица будет иметь вид:
cos(θ) 0 sin(θ) 0
0 1 0 0
-sin(θ) 0 cos(θ) 0
0 0 0 1
theta — угол поворота в радианах.
Устанавливает текущую матрицу как вращательное преобразование вокруг оси Z на theta (θ) радиан. Результирующая матрица будет иметь вид:
cos(θ) -sin(θ) 0 0
sin(θ) cos(θ) 0 0
0 0 1 0
0 0 0 1
Устанавливает преобразование маштабирования в текущую матрицу:
x, 0, 0, 0,
0, y, 0, 0,
0, 0, z, 0,
0, 0, 0, 1
Устанавливает преобразование сдвига в текущую матрицу:
1, yx, zx, 0,
xy, 1, zy, 0,
xz, yz, 1, 0,
0, 0, 0, 1
Устанавливает преобразование перемещения в текущую матрицу:
1, 0, 0, x,
0, 1, 0, y,
0, 0, 1, z,
0, 0, 0, 1
Умножает текущую матрицы на m справа
Устанавливает текущую матрицу в a x b.
Умножает каждый компонент матрицы на скалярное значение s.
Умножает текущую матрицу на m слева.
Умножает столбцы текущей матрицы на вектор v.
Устанавливает elements текущей матрицы в заданные значения row-major n11, n12, ... n44.
Устанавливает левые верхние элементы 3x3 текущей матрицы из матрицы m.
Устанавливает компонент позиции для текущей матрицы из вектора v, не затрагивая остальную часть матрицы - т.е. если матрица находится в текущем состоянии:
a, b, c, d,
e, f, g, h,
i, j, k, l,
m, n, o, p
Она становится:
a, b, c, v.x,
e, f, g, v.y,
i, j, k, v.z,
m, n, o, p
Записывает элементы текущей матрицы в массив в column-major формате.
Транспонирует текущую матрицу.
О том как получить исходный код этого модуля читайте тут.