QMatrix4x4 Class
QMatrix4x4 类表示三维空间中的一个 4x4 变换矩阵。更多内容...
| 标题: | #include <QMatrix4x4> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- 所有成员的列表,包括继承的成员
- 已弃用的成员
- QMatrix4x4 属于3D 渲染 模块。
公共函数
| QMatrix4x4() | |
| QMatrix4x4(const QGenericMatrix<N, M, float> &matrix) | |
| QMatrix4x4(const QTransform &transform) | |
| QMatrix4x4(const float *values) | |
| 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) | |
| 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(const QQuaternion &quaternion) |
| void | rotate(float angle, const QVector3D &vector) |
| void | rotate(float angle, float x, float y, float z = 0.0f) |
| QVector4D | row(int index) const |
| void | scale(const QVector3D &vector) |
| void | scale(float factor) |
| void | scale(float x, float y) |
| void | scale(float x, float y, float z) |
| void | setColumn(int index, const QVector4D &value) |
| void | setRow(int index, const QVector4D &value) |
| void | setToIdentity() |
| 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) |
| operator QVariant() const | |
| bool | operator!=(const QMatrix4x4 &other) const |
| float & | operator()(int row, int column) |
| const float & | operator()(int row, int column) const |
| QMatrix4x4 & | operator*=(const QMatrix4x4 &other) |
| QMatrix4x4 & | operator*=(float factor) |
| QMatrix4x4 & | operator+=(const QMatrix4x4 &other) |
| QMatrix4x4 & | operator-=(const QMatrix4x4 &other) |
| QMatrix4x4 & | operator/=(float divisor) |
| bool | operator==(const QMatrix4x4 &other) const |
相关的非成员
| bool | qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QMatrix4x4 | operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QVector4D | operator*(const QMatrix4x4 &matrix, const QVector4D &vector) |
| QMatrix4x4 | operator*(const QMatrix4x4 &matrix, float factor) |
| QPoint | operator*(const QPoint &point, const QMatrix4x4 &matrix) |
| QPointF | operator*(const QPointF &point, const QMatrix4x4 &matrix) |
| QVector4D | operator*(const QVector4D &vector, const QMatrix4x4 &matrix) |
| QMatrix4x4 | operator*(float factor, const QMatrix4x4 &matrix) |
| QMatrix4x4 | operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QMatrix4x4 | operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2) |
| QMatrix4x4 | operator-(const QMatrix4x4 &matrix) |
| QMatrix4x4 | operator/(const QMatrix4x4 &matrix, float divisor) |
| QDataStream & | operator<<(QDataStream &stream, const QMatrix4x4 &matrix) |
| QDataStream & | operator>>(QDataStream &stream, QMatrix4x4 &matrix) |
详细说明
QMatrix4x4 类通常被视为行优先矩阵,其构造函数和operator() 函数采用行优先格式接收数据,这与 C 风格的使用方式一致。
在内部,数据以列优先格式存储,以便最佳地传递给期望列优先数据的 OpenGL 函数。
使用这些函数时请注意,它们返回的是列优先格式的数据:
另请参阅 QVector3D 和QGenericMatrix 。
成员函数文档
QMatrix4x4::QMatrix4x4()
构建一个单位矩阵。
[explicit] template <int N, int M> QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, float> &matrix)
根据matrix 的左起4列和顶部4行构建一个4×4矩阵。如果matrix 的列数或行数少于4,则用单位矩阵中的元素填充剩余的元素。
另请参阅 toGenericMatrix()。
QMatrix4x4::QMatrix4x4(const QTransform &transform)
根据常规的 Qt 2D 变换矩阵transform 构建一个 4x4 矩阵。
如果 `transform ` 具有特殊类型(单位矩阵、平移、缩放等),则开发者应在调用此构造函数后,接着调用 `optimize()`,以便让 `QMatrix4x4` 能够优化后续对 `translate()`、`scale()` 等函数的调用。
另请参阅 toTransform() 和optimize()。
[explicit] QMatrix4x4::QMatrix4x4(const float *values)
根据给定的 16 个浮点数values 构建一个矩阵。假设数组values 中的内容按行优先顺序排列。
如果矩阵具有特殊类型(单位矩阵、平移、缩放等),则程序员应在调用此构造函数后,接着调用optimize(),以便 QMatrix4x4 能对后续对translate()、scale() 等函数的调用进行优化。
另请参阅 copyDataTo() 和optimize()。
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()。
QVector4D QMatrix4x4::column(int index) const
返回列index 的元素,并将其作为4维向量返回。
const float *QMatrix4x4::constData() const
返回指向该矩阵原始数据的常量指针。该原始数据以列优先格式存储。
另请参阅 data()。
void QMatrix4x4::copyDataTo(float *values) const
获取该矩阵中的 16 个元素,并按行优先顺序将其复制到values 中。
float *QMatrix4x4::data()
返回指向该矩阵原始数据的指针。
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。
仿射矩阵是指第 3 行等于 (0, 0, 0, 1) 的 4×4 矩阵,即不包含射影系数。
另请参阅 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 相乘(通过将w坐标设为1.0将其扩展为4维向量)来映射point 。该矩阵在点处理前应用。
QVector4D QMatrix4x4::map(const QVector4D &point) const
通过将该矩阵与point 相乘,将其映射为point 。该矩阵在点之前应用。
另请参见 mapRect()。
QRect QMatrix4x4::mapRect(const QRect &rect) const
该函数通过将矩阵rect 与矩形rect 的四角坐标相乘,并根据结果构建一个新的矩形,从而实现映射。返回的矩形将是一个普通二维矩形,其两边分别与水平轴和垂直轴平行。
另请参阅 map()。
QRectF QMatrix4x4::mapRect(const QRectF &rect) const
该函数通过将矩阵rect 与rect 的各角点相乘,并根据结果构建一个新的矩形,从而实现映射。返回的矩形将是一个普通二维矩形,其两边分别与水平轴和垂直轴平行。
另请参阅 map()。
QVector3D QMatrix4x4::mapVector(const QVector3D &vector) const
将矩阵映射为vector ,方法是将该矩阵顶部的 3×3 部分与vector 相乘。该矩阵的平移和投影分量被忽略。该矩阵以“前向量”方式应用。
另请参阅 map()。
QMatrix3x3 QMatrix4x4::normalMatrix() const
返回与该 4×4 变换相对应的法线矩阵。该法线矩阵是该 4×4 矩阵左上角 3×3 子矩阵的逆矩阵的转置。如果该 3×3 子矩阵不可逆,则该函数返回单位矩阵。
另请参阅 inverted()。
void QMatrix4x4::optimize()
根据该矩阵的当前元素优化其使用方式。
translate scale如果已知待修改的矩阵是单位矩阵、先前调用的 `translate()`、`scale()` 或 `rotate()` 等结果,则上述操作可以更高效地执行。
通常情况下,QMatrix4x4 类会在执行操作时在内部跟踪这种特殊类型。但是,如果直接使用operator()(int, int)或data()修改矩阵,则QMatrix4x4 将无法继续跟踪该特殊类型,此后将恢复为最安全但效率最低的操作。
通过在直接修改矩阵后调用 optimize(),如果元素似乎符合已知的优化类型之一,程序员可以强制QMatrix4x4 恢复该特殊类型。
另请参阅 operator()(int, int)、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 指定的窗口应用正交投影。近裁剪平面和远裁剪平面将分别是-1和1。
这是一个重载函数。
另请参阅 frustum() 和perspective()。
void QMatrix4x4::ortho(const QRectF &rect)
将该矩阵与另一个矩阵相乘,后者对边界由rect 指定的窗口应用正交投影。近裁剪平面和远裁剪平面将分别为-1和1。
这是一个重载函数。
另请参阅 frustum() 和perspective()。
void QMatrix4x4::perspective(float verticalAngle, float aspectRatio, float nearPlane, float farPlane)
将该矩阵与另一个应用透视投影的矩阵相乘。在由给定aspectRatio 确定的窗口内,垂直视场角为verticalAngle 度,该 决定了水平视场角。该投影将具有指定的nearPlane 和farPlane 裁剪平面,它们分别是观察者到相应平面的距离。
void QMatrix4x4::rotate(const QQuaternion &quaternion)
将该矩阵与另一个矩阵相乘,该矩阵根据指定的quaternion 对坐标进行旋转。假设quaternion 已归一化。
另请参阅 scale()、translate() 以及QQuaternion 。
void QMatrix4x4::rotate(float angle, const QVector3D &vector)
将该矩阵与另一个矩阵相乘,该矩阵会将坐标绕vector 旋转angle 度。
void QMatrix4x4::rotate(float angle, float x, float y, float z = 0.0f)
将该矩阵与另一个矩阵相乘,该矩阵会将坐标绕向量 (x,y,z) 旋转angle 度。
这是一个重载函数。
QVector4D QMatrix4x4::row(int index) const
返回行index 的元素,并将其作为4维向量返回。
void QMatrix4x4::scale(const QVector3D &vector)
将该矩阵与另一个矩阵相乘,该矩阵会根据vector 的各分量对坐标进行缩放。
void QMatrix4x4::scale(float factor)
将该矩阵与另一个矩阵相乘,该矩阵会将坐标按给定的factor 进行缩放。
这是一个重载函数。
void QMatrix4x4::scale(float x, float y)
将该矩阵与另一个矩阵相乘,该矩阵通过分量x 和y 对坐标进行缩放。
这是一个重载函数。
void QMatrix4x4::scale(float x, float y, float z)
将该矩阵与另一个矩阵相乘,该矩阵通过分量x 、y 和z 对坐标进行缩放。
这是一个重载函数。
void QMatrix4x4::setColumn(int index, const QVector4D &value)
将index 列的元素设置为value 的各分量。
void QMatrix4x4::setRow(int index, const QVector4D &value)
将行index 的元素设置为value 的各分量。
void QMatrix4x4::setToIdentity()
将该矩阵设置为单位矩阵。
另请参阅 isIdentity()。
template <int N, int M> QGenericMatrix<N, M, float> QMatrix4x4::toGenericMatrix() const
根据该 4×4 矩阵的最左侧 N 列和最上方 M 行,构建一个N ×M 的泛型矩阵。如果 N 或 M 大于 4,则剩余元素将用单位矩阵中的元素填充。
QTransform QMatrix4x4::toTransform() const
返回与该矩阵对应的常规 Qt 2D 变换矩阵。
返回的QTransform 是通过直接删除QMatrix4x4 的第三行和第三列生成的。这适用于实现正交投影,在该投影中应舍弃z坐标而非对其进行投影。
QTransform QMatrix4x4::toTransform(float distanceToPlane) const
返回与该矩阵对应的常规 Qt 2D 变换矩阵。
如果distanceToPlane 不为零,则表示用于调整z坐标的投影因子。数值1024对应于QTransform::rotate()函数对x轴和y轴使用的投影因子。
如果distanceToPlane 为零,则返回的QTransform 是通过直接删除QMatrix4x4 的第三行和第三列生成的。这适用于实现正射投影,在该投影中应舍弃z坐标而非对其进行投影。
void QMatrix4x4::translate(const QVector3D &vector)
将该矩阵与另一个矩阵相乘,该矩阵会根据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)。
这与由函数 glViewport() 和 glDepthRange() 控制的 OpenGL 视口变换所使用的变换相匹配。
void QMatrix4x4::viewport(const QRectF &rect)
为由rect 界定的视口设置视口变换,其中near和far分别设为0和1。
这是一个重载函数。
QMatrix4x4::operator QVariant() const
将矩阵作为QVariant 返回。
bool QMatrix4x4::operator!=(const QMatrix4x4 &other) const
如果该矩阵与other 不相同,则返回true ;否则返回false。该运算符使用精确浮点比较。
float &QMatrix4x4::operator()(int row, int column)
返回此矩阵中位于位置 (row,column) 的元素的引用,以便可以向该元素赋值。
另请参阅 optimize()、setColumn() 和setRow()。
const float &QMatrix4x4::operator()(int row, int column) const
返回指向该矩阵中位置 (row,column) 处元素的常量引用。
QMatrix4x4 &QMatrix4x4::operator*=(const QMatrix4x4 &other)
将other 中的内容与该矩阵相乘。
QMatrix4x4 &QMatrix4x4::operator*=(float factor)
将该矩阵的所有元素与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
如果该矩阵与other 完全相同,则返回true ;否则返回false。该运算符使用精确浮点比较。
相关的非成员
[noexcept] bool qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
如果 `m1 ` 和 `m2 ` 相等(浮点数比较允许存在微小误差),则返回 `true `;否则返回 `false`。
QMatrix4x4 operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
返回m1 与m2 的乘积。
QVector4D operator*(const QMatrix4x4 &matrix, const QVector4D &vector)
返回根据matrix 对vector 进行变换后的结果,其中矩阵以“前向量”方式应用。
QMatrix4x4 operator*(const QMatrix4x4 &matrix, float factor)
返回将matrix 中的所有元素与factor 相乘的结果。
QPoint operator*(const QPoint &point, const QMatrix4x4 &matrix)
返回根据matrix 对point 进行变换后的结果,且矩阵是在点之后应用的。
QPointF operator*(const QPointF &point, const QMatrix4x4 &matrix)
返回根据matrix 对坐标point 进行变换后的结果,其中矩阵在坐标点之后应用。
QVector4D operator*(const QVector4D &vector, const QMatrix4x4 &matrix)
返回根据matrix 对vector 进行变换后的结果,其中矩阵在向量之后应用。
QMatrix4x4 operator*(float factor, const QMatrix4x4 &matrix)
返回将matrix 中的所有元素与factor 相乘的结果。
QMatrix4x4 operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
返回m1 和m2 的和。
QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
返回m1 与m2 之间的差值。
QMatrix4x4 operator-(const QMatrix4x4 &matrix)
返回matrix 的取反。
这是一个重载函数。
QMatrix4x4 operator/(const QMatrix4x4 &matrix, float divisor)
返回将matrix 中的所有元素除以divisor 所得的结果。
QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix)
将给定的matrix 写入给定的stream ,并返回该流的引用。
另请参阅 《Qt 数据类型的序列化》。
QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix)
从给定的stream 中读取一个4×4矩阵到给定的matrix 中,并返回该流的引用。
另请参阅 《Qt 数据类型的序列化》。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.