Матрица Matrix3x4_t
matrix3x4_t — это класс C++, представляющий матрицу: математическую конструкцию, позволяющую
преобразовывать векторы.
Матрицы в основном используются для вращения векторов, поскольку перемещение и масштабирование выполняются сложением и умножением векторов соответственно. Однако одна матрица может хранить преобразование всех четырёх режимов, что делает их полезными в операциях с интенсивным преобразованием, таких как растеризация вершин.
Класс VMatrix предлагает дополнительную строку для использования (4x4) и позволяет использовать несколько различных функций. Матрицы такого размера в исходном коде в основном применяются для описания преобразований перспективы во время отображения.
Функции
Создание
Создавать матрицы лучше всего при помощи существующих функций Source:
void AngleMatrix( QAngle angle, matrix_3x4_t& out ); // Rotation; can also use Quaternions or Radians
void PositionMatrix( Vector position, matrix3x4_t& out ); // Translation
void AngleMatrix( QAngle angle, Vector position, matrix3x4_t& out ); // Rotation + translation
void SetScaleMatrix( float scale, matrix3x4_t& out ); // Scale
Используйте MatrixMultiply()
для объединения двух матриц в одну. Это можно делать любое количество раз.
Применение

Математическая запись для преобразования матрицы - (вектор * матрица). Source не поддерживает этот синтаксис, хотя достаточно просто добавить его, если это необходимо, вместо этого предлагается использовать следующие функции:
void VectorTransform( Vector in1, matrix3x4_t in2, Vector& out );
void VectorITransform( Vector in1, matrix3x4_t in2, Vector& out ); // 'Inverse' of the above
Существует расширенная функция VectorRotate(), которая принимает matrix3x4_t. Похоже, что она действует аналогично функции VectorTransform().
Прочие / Вспомогательные
void MatrixAngles()
void MatrixPosition()
void MatrixVectors()
- Extract angles and vectors from a matrix.
MatrixAngles()
has many overloads. There is no way to extract a scale. void MatrixTranspose()
Транспонирует матрицу. Это полезно для перестановки столбцов и строк матрицы и необходимо при взаимодействии между системами, которые по-разному определяют матричные операции (как это может делать клиентский код в исходном коде и оттенениях).
void MatrixInvert()
- Reverses a matrix, making it transform in the opposite direction(s). You could also use
VectorITransform()
to apply the matrix. bool MatricesAreEqual()
- Instead of (matrix1 == matrix2).
void MatrixCopy()
Подтвердить:Instead of (matrix1 = matrix2).