Класс QMatrix4x4
Класс QMatrix4x4 представляет матрицу преобразования 4x4 в 3D-пространстве. Подробнее...
| Заголовок: | #include <QMatrix4x4> |
| qmake: | QT += gui |
| С момента: | Qt 4.6 |
Этот класс был представлен в Qt 4.6.
Открытые функции
| QMatrix4x4(const QMatrix &matrix) | |
| QMatrix4x4(const QTransform &transform) | |
| QMatrix4x4(const QGenericMatrix<N, M, float> &matrix = ...) | |
| QMatrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) | |
| QMatrix4x4(const float *values) | |
| QMatrix4x4() | |
| QVector4D | column(int index) const |
| const float * | constData() const |
| void | copyDataTo(float *values) const |
| float * | data() |
| const float * | data() const |
| double | determinant() const |
| void | fill(float value) |
| void | frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane) |
| QMatrix4x4 | inverted(bool *invertible = nullptr) const |
| bool | isAffine() const |
| bool | isIdentity() const |
| void | lookAt(const QVector3D &eye, const QVector3D ¢er, const QVector3D &up) |
| QPoint | map(const QPoint &point) const |
| QPointF | map(const QPointF &point) const |
| QVector3D | map(const QVector3D &point) const |
| QVector4D | map(const QVector4D &point) const |
| QRect | mapRect(const QRect &rect) const |
| QRectF | mapRect(const QRectF &rect) const |
| QVector3D | mapVector(const QVector3D &vector) const |
| QMatrix3x3 | normalMatrix() const |
| void | optimize() |
| void | ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane) |
| void | ortho(const QRect &rect) |
| void | ortho(const QRectF &rect) |
| void | perspective(float verticalAngle, float aspectRatio, float nearPlane, float farPlane) |
| void | rotate(float angle, const QVector3D &vector) |
| void | rotate(float angle, float x, float y, float z = 0.0f) |
| void | rotate(const QQuaternion &quaternion) |
| QVector4D | row(int index) const |
| void | scale(const QVector3D &vector) |
| void | scale(float x, float y) |
| void | scale(float x, float y, float z) |
| void | scale(float factor) |
| void | setColumn(int index, const QVector4D &value) |
| void | setRow(int index, const QVector4D &value) |
| void | setToIdentity() |
| QMatrix | toAffine() const |
| QGenericMatrix<N, M, float> | toGenericMatrix() const |
| QTransform | toTransform() const |
| QTransform | toTransform(float distanceToPlane) const |
| void | translate(const QVector3D &vector) |
| void | translate(float x, float y) |
| void | translate(float x, float y, float z) |
| QMatrix4x4 | transposed() const |
| void | viewport(float left, float bottom, float width, float height, float nearPlane = 0.0f, float farPlane = 1.0f) |
| void | viewport(const QRectF &rect) |
| QVariant | operator QVariant() const |
| bool | operator!=(const QMatrix4x4 &other) const |
| const float & | operator()(int row, int column) const |
| float & | operator()(int row, int column) |
| QMatrix4x4 & | operator*=(const QMatrix4x4 &other) |
| QMatrix4x4 & | operator*=(float factor) |
| QMatrix4x4 & | оператор+=(const QMatrix4x4 &other) |
| QMatrix4x4 & | оператор-=(const QMatrix4x4 &other) |
| QMatrix4x4 & | оператор/=(float divisor) |
| bool | оператор==(const QMatrix4x4 &other) const |
Связанные нечленные функции
| bool | qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QMatrix4x4 | оператор*(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QPoint | оператор*(const QPoint &point, const QMatrix4x4 &matrix) |
| QPointF | оператор*(const QPointF &point, const QMatrix4x4 &matrix) |
| QPoint | оператор*(const QMatrix4x4 &matrix, const QPoint &point) |
| QVector4D | оператор*(const QVector4D &vector, const QMatrix4x4 &matrix) |
| QVector3D | оператор*(const QVector3D &vector, const QMatrix4x4 &matrix) |
| QPointF | оператор*(const QMatrix4x4 &matrix, const QPointF &point) |
| QVector4D | оператор*(const QMatrix4x4 &matrix, const QVector4D &vector) |
| QVector3D | оператор*(const QMatrix4x4 &matrix, const QVector3D &vector) |
| QMatrix4x4 | оператор*(float factor, const QMatrix4x4 &matrix) |
| QMatrix4x4 | оператор*(const QMatrix4x4 &matrix, float factor) |
| QMatrix4x4 | оператор+(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QMatrix4x4 | оператор-(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QMatrix4x4 | оператор-(const QMatrix4x4 &matrix) |
| QMatrix4x4 | оператор/(const QMatrix4x4 &matrix, float divisor) |
| QDataStream & | оператор<<(QDataStream &stream, const QMatrix4x4 &matrix) |
| QDataStream & | оператор>>(QDataStream &stream, QMatrix4x4 &matrix) |
Подробное описание
Класс QMatrix4x4 в целом рассматривается как матрица в порядке следования строк, в том смысле, что конструкторы и функции оператор() принимают данные в формате следования строк, как это обычно используется в C.
Внутренне данные хранятся в формате следования столбцов для оптимизации при передаче функциям OpenGL, которые ожидают данные в формате следования столбцов.
При использовании этих функций следует иметь в виду, что они возвращают данные в формате следования столбцов:
См. также QVector3D и QGenericMatrix.
Документация по членам-функциям
QMatrix4x4::QMatrix4x4(const QMatrix &matrix)
Создаёт матрицу 4x4 из обычной Qt 2D аффинной трансформации matrix.
Если matrix имеет специальный тип (единичная, трансляции, масштабирования и т. д.), программист должен следовать этому конструктору с вызовом optimize(), если он желает, чтобы QMatrix4x4 оптимизировал дальнейшие вызовы translate(), scale() и т. д.
См. также toAffine() и optimize().
QMatrix4x4::QMatrix4x4(const QTransform &transform)
Создаёт матрицу 4x4 из обычной Qt 2D матрицы преобразования transform.
Если transform имеет специальный тип (единичная, трансляции, масштабирования и т. д.), программист должен следовать этому конструктору с вызовом optimize(), если он желает, чтобы QMatrix4x4 оптимизировал дальнейшие вызовы translate(), scale() и т. д.
См. также toTransform() и optimize().
QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, float> &matrix = ...)
Создаёт матрицу 4x4 из левых 4 столбцов и верхних 4 строк матрицы matrix. Если matrix имеет менее 4 столбцов или строк, оставшиеся элементы заполняются элементами единичной матрицы.
См. также toGenericMatrix().
QMatrix4x4::QMatrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44)
Создаёт матрицу из 16 элементов m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43 и m44. Элементы задаются в порядке следования строк.
Если матрица имеет специальный тип (единичная, трансляции, масштабирования и т. д.), программист должен следовать этому конструктору с вызовом optimize(), если он желает, чтобы QMatrix4x4 оптимизировал дальнейшие вызовы translate(), scale() и т. д.
См. также optimize().
QMatrix4x4::QMatrix4x4(const float *values)
Создаёт матрицу из заданных 16 значений с плавающей точкой values. Содержимое массива values предполагается в порядке следования строк.
Если матрица имеет специальный тип (единичная, трансляции, масштабирования и т. д.), программист должен следовать этому конструктору с вызовом optimize(), если он желает, чтобы QMatrix4x4 оптимизировал дальнейшие вызовы translate(), scale() и т. д.
См. также copyDataTo() и optimize().
QMatrix4x4::QMatrix4x4()
Создаёт единичную матрицу.
QVector4D QMatrix4x4::column(int index) const
Возвращает элементы столбца index как вектор 4D.
См. также setColumn() и row().
const float *QMatrix4x4::constData() const
Возвращает постоянный указатель на сырые данные этой матрицы. Эти сырые данные хранятся в формате следования столбцов.
См. также data().
void QMatrix4x4::copyDataTo(float *values) const
Получает 16 элементов этой матрицы и копирует их в values в порядке следования строк.
float *QMatrix4x4::data()
Возвращает указатель на сырые данные этой матрицы.
См. также constData() и optimize().
const float *QMatrix4x4::data() const
Возвращает постоянный указатель на сырые данные этой матрицы. Эти сырые данные хранятся в формате следования столбцов.
См. также constData().
double QMatrix4x4::determinant() const
Возвращает определитель этой матрицы.
void QMatrix4x4::fill(float value)
Заполняет все элементы этой матрицы значением value.
void QMatrix4x4::frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane)
Умножает эту матрицу на другую, которая применяет проекцию перспективного усеченного конуса для окна с нижним левым углом (left, bottom), верхним правым углом (right, top) и заданными плоскостями обрезки nearPlane и farPlane.
См. также ortho() и perspective().
QMatrix4x4 QMatrix4x4::inverted(bool *invertible = nullptr) const
Возвращает обратную матрицу этой матрицы. Возвращает единичную матрицу, если эту матрицу нельзя обратить; т. е. determinant() равно нулю. Если invertible не равен нулю, то в эту позицию будет записано значение true, если матрицу можно обратить; в противном случае — false.
Если матрица распознается как единичная или ортогональная матрица, то эта функция быстро обратит матрицу, используя оптимизированные процедуры.
См. также determinant() и normalMatrix().
bool QMatrix4x4::isAffine() const
Возвращает true , если эта матрица является аффинной матрицей; в противном случае — false.
Аффинная матрица — это 4x4 матрица со строкой 3, равной (0, 0, 0, 1), например, без проекционных коэффициентов.
Эта функция была добавлена в Qt 5.5.
См. также isIdentity().
bool QMatrix4x4::isIdentity() const
Возвращает true , если эта матрица — единичная; в противном случае — false.
См. также setToIdentity().
void QMatrix4x4::lookAt(const QVector3D &eye, const QVector3D ¢er, const QVector3D &up)
Умножает эту матрицу на матрицу вида, полученную из точки наблюдения. Значение center указывает центр вида, на который смотрит eye. Значение up указывает, какое направление следует рассматривать как вверх относительно eye.
Примечание: вектор up не должен быть параллелен линии визирования от eye к center.
QPoint QMatrix4x4::map(const QPoint &point) const
Преобразует point, умножив эту матрицу на point.
См. также mapRect().
QPointF QMatrix4x4::map(const QPointF &point) const
Преобразует point, умножив эту матрицу на point.
См. также mapRect().
QVector3D QMatrix4x4::map(const QVector3D &point) const
Преобразует point, умножив эту матрицу на point.
См. также mapRect() и mapVector().
QVector4D QMatrix4x4::map(const QVector4D &point) const
Преобразует point, умножив эту матрицу на point.
См. также mapRect().
QRect QMatrix4x4::mapRect(const QRect &rect) const
Преобразует rect, умножив эту матрицу на углы rect, а затем сформировав новый прямоугольник из результатов. Возвращаемый прямоугольник будет обычным 2D прямоугольником со сторонами, параллельными горизонтальной и вертикальной осям.
См. также map().
QRectF QMatrix4x4::mapRect(const QRectF &rect) const
Преобразует rect, умножив эту матрицу на углы rect, а затем сформировав новый прямоугольник из результатов. Возвращаемый прямоугольник будет обычным 2D прямоугольником со сторонами, параллельными горизонтальной и вертикальной осям.
См. также map().
QVector3D QMatrix4x4::mapVector(const QVector3D &vector) const
Преобразует vector, умножив верхнюю 3x3 часть этой матрицы на vector. Компоненты переноса и проекции этой матрицы игнорируются.
См. также map().
QMatrix3x3 QMatrix4x4::normalMatrix() const
Возвращает нормальную матрицу, соответствующую этому 4x4 преобразованию. Нормальная матрица — это транспонированная обратная матрица левой верхней 3x3 части этой 4x4 матрицы. Если 3x3 подматрица необратима, эта функция возвращает единичную матрицу.
См. также inverted().
void QMatrix4x4::optimize()
Оптимизирует использование этой матрицы из её текущих элементов.
Некоторые операции, такие как translate(), scale() и rotate(), могут выполняться более эффективно, если известно, что изменяемая матрица является единичной, предыдущей translate(), предыдущей scale() и т. д.
Обычно класс QMatrix4x4 отслеживает этот специальный тип ввода/вывода во время выполнения операций. Однако, если матрица изменяется напрямую с помощью {QLoggingCategory::operator()}{operator()()} или data(), тогда QMatrix4x4 потеряет отслеживание специального типа и вернётся к самым безопасным, но наименее эффективным операциям.
Вызывая optimize() после прямого изменения матрицы, программист может заставить QMatrix4x4 восстановить специальный тип, если элементы, похоже, соответствуют одному из известных оптимизированных типов.
См. также operator()(), data() и translate().
void QMatrix4x4::ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane)
Умножает эту матрицу на другую, которая применяет ортогональную проекцию для окна с нижним левым углом (left, bottom), верхним правым углом (right, top) и заданными плоскостями обрезки nearPlane и farPlane.
См. также frustum() и perspective().
void QMatrix4x4::ortho(const QRect &rect)
Это перегруженная функция.
Умножает эту матрицу на другую, которая применяет ортогональную проекцию для окна с границами, заданными rect. Плоскости обрезки near и far будут соответственно -1 и 1.
См. также frustum() и perspective().
void QMatrix4x4::ortho(const QRectF &rect)
Это перегруженная функция.
Умножает эту матрицу на другую, которая применяет ортогональную проекцию для окна с границами, заданными rect. Плоскости обрезки near и far будут соответственно -1 и 1.
См. также frustum() и perspective().
void QMatrix4x4::perspective(float verticalAngle, float aspectRatio, float nearPlane, float farPlane)
Умножает эту матрицу на другую, которая применяет перспективную проекцию. Вертикальное поле зрения будет составлять verticalAngle градусов в окне с заданным aspectRatio, который определяет горизонтальное поле зрения. Проекция будет иметь заданные плоскости обрезки nearPlane и farPlane, которые представляют расстояния от наблюдателя до соответствующих плоскостей.
См. также ortho() и frustum().
void QMatrix4x4::rotate(float angle, const QVector3D &vector)
Умножает эту матрицу на другую, которая вращает координаты на angle градусов вокруг vector.
См. также scale() и translate().
void QMatrix4x4::rotate(float angle, float x, float y, float z = 0.0f)
Это перегруженная функция.
Умножает эту матрицу на другую, которая вращает координаты на угол градусов вокруг вектора (x, y, z).
См. также scale() и translate().
void QMatrix4x4::rotate(const QQuaternion &quaternion)
Умножает эту матрицу на другую, которая вращает координаты в соответствии с заданным кватернионом. Предполагается, что кватернион был нормирован.
См. также scale(), translate() и QQuaternion.
QVector4D QMatrix4x4::row(int index) const
Возвращает элементы строки index в виде 4D вектора.
См. также setRow() и column().
void QMatrix4x4::scale(const QVector3D &vector)
Умножает эту матрицу на другую, которая масштабирует координаты с помощью компонентов вектора.
См. также translate() и rotate().
void QMatrix4x4::scale(float x, float y)
Это перегруженная функция.
Умножает эту матрицу на другую, которая масштабирует координаты с помощью компонентов x и y.
См. также translate() и rotate().
void QMatrix4x4::scale(float x, float y, float z)
Это перегруженная функция.
Умножает эту матрицу на другую, которая масштабирует координаты с помощью компонентов x, y и z.
См. также translate() и rotate().
void QMatrix4x4::scale(float factor)
Это перегруженная функция.
Умножает эту матрицу на другую, которая масштабирует координаты с помощью заданного множителя.
См. также translate() и rotate().
void QMatrix4x4::setColumn(int index, const QVector4D &value)
Устанавливает элементы столбца index на компоненты value.
См. также column() и setRow().
void QMatrix4x4::setRow(int index, const QVector4D &value)
Устанавливает элементы строки index на компоненты value.
См. также row() и setColumn().
void QMatrix4x4::setToIdentity()
Устанавливает эту матрицу в единичную.
См. также isIdentity().
QMatrix QMatrix4x4::toAffine() const
Возвращает стандартную 2D аффинную матрицу преобразования Qt, соответствующую этой матрице. Предполагается, что эта матрица содержит только элементы 2D аффинного преобразования.
См. также toTransform().
QGenericMatrix<N, M, float> QMatrix4x4::toGenericMatrix() const
Создает NxM общую матрицу из левых N столбцов и верхних M строк этой 4x4 матрицы. Если N или M больше 4, то оставшиеся элементы заполняются элементами единичной матрицы.
QTransform QMatrix4x4::toTransform() const
Возвращает стандартную 2D матрицу преобразования Qt, соответствующую этой матрице.
Возвращаемый QTransform формируется путем простого удаления третьей строки и третьего столбца из QMatrix4x4. Это подходит для реализации ортогональных проекций, где координата z должна быть опущена, а не спроецирована.
См. также toAffine().
QTransform QMatrix4x4::toTransform(float distanceToPlane) const
Возвращает стандартную 2D матрицу преобразования Qt, соответствующую этой матрице.
Если distanceToPlane не равно нулю, это указывает на множитель проекции, используемый для корректировки координаты z. Значение 1024 соответствует множителю проекции, используемому функцией QTransform::rotate() для осей x и y.
Если distanceToPlane равно нулю, то возвращаемый QTransform формируется путем простого удаления третьей строки и третьего столбца из QMatrix4x4. Это подходит для реализации ортогональных проекций, где координата z должна быть опущена, а не спроецирована.
См. также toAffine().
void QMatrix4x4::translate(const QVector3D &vector)
Умножает эту матрицу на другую, которая перемещает координаты на компоненты вектора.
void QMatrix4x4::translate(float x, float y)
Это перегруженная функция.
Умножает эту матрицу на другую, которая перемещает координаты на компоненты x и y.
void QMatrix4x4::translate(float x, float y, float z)
Это перегруженная функция.
Умножает эту матрицу на другую, которая перемещает координаты на компоненты x, y и z.
QMatrix4x4 QMatrix4x4::transposed() const
Возвращает эту матрицу, транспонированную относительно своей диагонали.
void QMatrix4x4::viewport(float left, float bottom, float width, float height, float nearPlane = 0.0f, float farPlane = 1.0f)
Умножает эту матрицу на другую, которая выполняет преобразование масштабирования и смещения, используемое OpenGL для преобразования из нормализованных координат устройства (NDC) в координаты области просмотра (окна). То есть, она отображает точки из куба, охватывающего [-1, 1] в каждом измерении, в область просмотра с его ближним нижним левым углом в (left, bottom, nearPlane) и размером (width, height, farPlane - nearPlane).
Это соответствует преобразованию, используемому фиксированной функцией OpenGL преобразованием области просмотра, управляемым функциями glViewport() и glDepthRange().
void QMatrix4x4::viewport(const QRectF &rect)
Это перегруженная функция.
Устанавливает преобразование области просмотра для области просмотра, ограниченной rect, и с ближней и дальней плоскостями, установленными соответственно в 0 и 1.
QVariant QMatrix4x4::operator QVariant() const
Возвращает матрицу как QVariant.
bool QMatrix4x4::operator!=(const QMatrix4x4 &other) const
Возвращает true если эта матрица не идентична other; в противном случае — false. Этот оператор использует точное сравнение с плавающей точкой.
const float &QMatrix4x4::operator()(int row, int column) const
Возвращает постоянную ссылку на элемент в позиции (row, column) в этой матрице.
float &QMatrix4x4::operator()(int row, int column)
Возвращает ссылку на элемент в позиции (row, column) в этой матрице, чтобы элемент можно было присвоить.
См. также optimize(), setColumn() и setRow().
QMatrix4x4 &QMatrix4x4::operator*=(const QMatrix4x4 &other)
Умножает содержимое other на эту матрицу.
QMatrix4x4 &QMatrix4x4::operator*=(float factor)
Это перегруженная функция.
Умножает все элементы этой матрицы на множитель.
QMatrix4x4 &QMatrix4x4::operator+=(const QMatrix4x4 &other)
Добавляет содержимое other к этой матрице.
QMatrix4x4 &QMatrix4x4::operator-=(const QMatrix4x4 &other)
Вычитает содержимое other из этой матрицы.
QMatrix4x4 &QMatrix4x4::operator/=(float divisor)
Это перегруженная функция.
Делит все элементы этой матрицы на divisor.
bool QMatrix4x4::operator==(const QMatrix4x4 &other) const
Возвращает true , если эта матрица идентична other; в противном случае — false. Этот оператор использует точное сравнение с плавающей точкой.
Связанные нечленные функции
bool QMatrix4x4::qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Возвращает true , если m1 и m2 равны, позволяя небольшую погрешность при сравнении с плавающей точкой; в противном случае — false.
QMatrix4x4 QMatrix4x4::operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Возвращает произведение m1 и m2.
QPoint QMatrix4x4::operator*(const QPoint &point, const QMatrix4x4 &matrix)
Возвращает результат преобразования point согласно matrix, применив матрицу после точки.
QPointF QMatrix4x4::operator*(const QPointF &point, const QMatrix4x4 &matrix)
Возвращает результат преобразования point согласно matrix, применив матрицу после точки.
QPoint QMatrix4x4::operator*(const QMatrix4x4 &matrix, const QPoint &point)
Возвращает результат преобразования point согласно matrix, применив матрицу перед точкой.
QVector4D QMatrix4x4::operator*(const QVector4D &vector, const QMatrix4x4 &matrix)
Возвращает результат преобразования vector согласно matrix, применив матрицу после вектора.
QVector3D QMatrix4x4::operator*(const QVector3D &vector, const QMatrix4x4 &matrix)
Возвращает результат преобразования vector согласно matrix, применив матрицу после вектора.
QPointF QMatrix4x4::operator*(const QMatrix4x4 &matrix, const QPointF &point)
Возвращает результат преобразования point согласно matrix, применив матрицу перед точкой.
QVector4D QMatrix4x4::operator*(const QMatrix4x4 &matrix, const QVector4D &vector)
Возвращает результат преобразования vector согласно matrix, применив матрицу перед вектором.
QVector3D QMatrix4x4::operator*(const QMatrix4x4 &matrix, const QVector3D &vector)
Возвращает результат преобразования vector согласно matrix, применив матрицу перед вектором.
QMatrix4x4 QMatrix4x4::operator*(float factor, const QMatrix4x4 &matrix)
Возвращает результат умножения всех элементов matrix на factor.
QMatrix4x4 QMatrix4x4::operator*(const QMatrix4x4 &matrix, float factor)
Возвращает результат умножения всех элементов matrix на factor.
QMatrix4x4 QMatrix4x4::operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Возвращает сумму m1 и m2.
QMatrix4x4 QMatrix4x4::operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Возвращает разность m1 и m2.
QMatrix4x4 QMatrix4x4::operator-(const QMatrix4x4 &matrix)
Это перегруженная функция.
Возвращает отрицание matrix.
QMatrix4x4 QMatrix4x4::operator/(const QMatrix4x4 &matrix, float divisor)
Возвращает результат деления всех элементов matrix на divisor.
QDataStream &QMatrix4x4::operator<<(QDataStream &stream, const QMatrix4x4 &matrix)
Записывает заданную matrix в заданный stream и возвращает ссылку на поток.
См. также Сериализация типов данных Qt.
QDataStream &QMatrix4x4::operator>>(QDataStream &stream, QMatrix4x4 &matrix)
Считывает 4x4 матрицу из заданного stream в заданную matrix и возвращает ссылку на поток.
См. также Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qmatrix4x4.html