Класс представляющий матрицу 4x4.
Наиболее распространенное использование матрицы 4x4 в трехмерной компьютерной графике - в качестве матрицы трансформации. Для ознакомления с матрицами трансформации, используемыми в WebGL, ознакомьтесь с данным уроком.
Это позволяет Vector3, представляющему точку в трехмерном пространстве, подвергаться преобразованиям, таким как перенос, поворот, сдвиг, масштаб, отражение, получение ортогональной или перспективной проекции и так далее, путем умножения на матрицу. Это известно как применение матрицы к вектору.
Каждый Object3D имеет три связанные с ним Matrix4:
Метод 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];
и внутри все вычисления выполняются с использованием упорядочивания по столбцам. Однако, поскольку фактический порядок не имеет математического значения, а большинство людей привыкли думать о матрицах в порядке возрастания строк, в документации Verge3D матрицы показаны в порядке возрастания строк. Просто имейте в виду, что если вы читаете исходный код, вам придется взять transpose любых матриц, описанных здесь, чтобы понять смысл вычислений.
Существует несколько вариантов извлечения position, rotation и scale из Matrix4.
Создает и инициализирует Matrix4 в 4x4 identity matrix.
column-major список значений матрицы.
Создает новую Matrix4 с элементами elements, идентичными данной.
Устанавливает эту матрицу в преобразование, состоящее из position, quaternion и scale.
Копирует elements матрицы m в данную матрицу.
Копирует компонент перевода предоставленной матрицы m в компонент перевода этой матрицы.
Раскладывает эту матрицу на компоненты position, quaternion и scale. Метод не может быть использован для разложения матрицы мира объекта, если его родитель имеет неоднородный масштаб.
Вычисляет и возвращает
determinant этой матрицы.
На основе метода изложенного здесь.
Возвращает true, если эта матрица и m равны.
Извлекает basis этой матрицы в три предоставленных вектора осей. Если эта матрица является:
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 в компонент вращения этой матрицы.
array — массив для чтения элементов из него.
offset — (необязательно) смещение в массиве. По умолчанию равно 0.
Устанавливает элементы этой матрицы на основе array в формате
column-major.
Инвертирует эту матрицу, используя analytic method. Вы не можете инвертировать с детерминантом, равным нулю. Если вы попытаетесь это сделать, метод выдаст нулевую матрицу.
Получает максимальное значение масштаба по 3 осям.
Сбрасывает данную матрицу в identity matrix.
Строит матрицу вращения, направленную от eye к center, ориентированную вектором up.
axis — Ось вращения, должна быть нормализована.
theta — Угол поворота в радианах.
Устанавливает эту матрицу как преобразование вращения вокруг axis на theta радиан.
Это несколько спорная, но математически обоснованная альтернатива вращению через Quaternions.
Смотрите обсуждение здесь.
Установить это в basis матрицу, состоящую из трех предоставленных базисных векторов:
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) этой матрицы на поворот, заданный Euler Angle. Остальная часть матрицы устанавливается в тождество. В зависимости от order порядка euler возможны шесть исходов. Полный список смотрите здесь.
Устанавливает компонент вращения этой матрицы на вращение, заданное q, как описано here.
Остальная часть матрицы устанавливается в тождество. Таким образом, при задании 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 (θ) радиан.
The resulting matrix will be:
cos(θ) -sin(θ) 0 0
sin(θ) cos(θ) 0 0
0 0 1 0
0 0 0 1
x — величина масштабирования по оси X.
y — величина масштабирования по оси Y.
z — величина масштабирования по оси Z.
Устанавливает эту матрицу в качестве масштабного преобразования:
x, 0, 0, 0,
0, y, 0, 0,
0, 0, z, 0,
0, 0, 0, 1
x — величина сдвига по оси X.
y — величина сдвига по оси Y.
z — величина сдвига по оси Z.
Устанавливает эту матрицу в качестве преобразования сдвига:
1, y, z, 0,
x, 1, z, 0,
x, y, 1, 0,
0, 0, 0, 1
x — значение перевода по оси X.
y — значение перевода по оси Y.
z — значение перевода по оси Z.
Устанавливает эту матрицу в качестве преобразования перевода:
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.
Устанавливает компонент позиции для этой матрицы из вектора 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
array — (необязательный) массив для хранения результирующего вектора.
offset — (необязательно) смещение в массиве, на которое следует поместить результат.
Записывает элементы этой матрицы в массив в
column-major формате.
Transposes данную матрицу.
О том как получить исходный код этого модуля читайте тут.