QMatrix4x4 类

QMatrix4x4 类表示三维空间中的 4x4 变换矩阵。 更多信息...

头文件 #include <QMatrix4x4>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

flags标志

公共函数

QMatrix4x4()
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)
QMatrix4x4(const QGenericMatrix<N, M, float> &matrix)
QMatrix4x4(const QTransform &transform)
QVector4Dcolumn(int index) const
const float *constData() const
voidcopyDataTo(float *values) const
float *data()
const float *data() const
doubledeterminant() const
voidfill(float value)
voidfrustum(float left, float right, float bottom, float top, float nearPlane, float farPlane)
QMatrix4x4inverted(bool *invertible = nullptr) const
boolisAffine() const
boolisIdentity() const
voidlookAt(const QVector3D &eye, const QVector3D &center, const QVector3D &up)
QPointmap(const QPoint &point) const
QPointFmap(const QPointF &point) const
QVector3Dmap(const QVector3D &point) const
QVector4Dmap(const QVector4D &point) const
QRectmapRect(const QRect &rect) const
QRectFmapRect(const QRectF &rect) const
QVector3DmapVector(const QVector3D &vector) const
QMatrix3x3normalMatrix() const
voidoptimize()
voidortho(float left, float right, float bottom, float top, float nearPlane, float farPlane)
voidortho(const QRect &rect)
voidortho(const QRectF &rect)
voidperspective(float verticalAngle, float aspectRatio, float nearPlane, float farPlane)
voidrotate(float angle, const QVector3D &vector)
voidrotate(float angle, float x, float y, float z = 0.0f)
voidrotate(const QQuaternion &quaternion)
QVector4Drow(int index) const
voidscale(const QVector3D &vector)
voidscale(float x, float y)
voidscale(float x, float y, float z)
voidscale(float factor)
voidsetColumn(int index, const QVector4D &value)
voidsetRow(int index, const QVector4D &value)
voidsetToIdentity()
QGenericMatrix<N, M, float>toGenericMatrix() const
QTransformtoTransform() const
QTransformtoTransform(float distanceToPlane) const
voidtranslate(const QVector3D &vector)
voidtranslate(float x, float y)
voidtranslate(float x, float y, float z)
QMatrix4x4transposed() const
voidviewport(float left, float bottom, float width, float height, float nearPlane = 0.0f, float farPlane = 1.0f)
voidviewport(const QRectF &rect)
QVariantoperator QVariant() const
booloperator!=(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 &operator+=(const QMatrix4x4 &other)
QMatrix4x4 &operator-=(const QMatrix4x4 &other)
QMatrix4x4 &operator/=(float divisor)
booloperator==(const QMatrix4x4 &other) const
QMatrix4x4operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
QVector4Doperator*(const QVector4D &vector, const QMatrix4x4 &matrix)
QVector4Doperator*(const QMatrix4x4 &matrix, const QVector4D &vector)
QPointoperator*(const QPoint &point, const QMatrix4x4 &matrix)
QPointFoperator*(const QPointF &point, const QMatrix4x4 &matrix)
QMatrix4x4operator*(float factor, const QMatrix4x4 &matrix)
QMatrix4x4operator*(const QMatrix4x4 &matrix, float factor)
QMatrix4x4operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
QMatrix4x4operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
QMatrix4x4operator-(const QMatrix4x4 &matrix)
QMatrix4x4operator/(const QMatrix4x4 &matrix, float divisor)
QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix)
QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix)

详细描述

通常情况下,QMatrix4x4 类被视为行主序矩阵,其构造函数和 operator() 函数以行主序格式接收数据,这与C风格的使用方式相似。

内部数据以列主序格式存储,以便于传递给OpenGL函数,因为OpenGL函数期望的是列主序数据。

在使用这些函数时,请注意它们返回的是以 列主序 格式的数据

另请参阅QVector3DQGenericMatrix.

成员函数文档

QMatrix4x4::QMatrix4x4()

构造一个单位矩阵。

[显式构造] 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个元素m11m12m13m14m21m22m23m24m31m32m33m34m41m42m43m44构造矩阵。元素按照行主序顺序指定。

如果矩阵具有特殊类型(单位矩阵、平移、缩放等),则程序员应该在调用optimize()之后构造此矩阵,如果他们希望QMatrix4x4进一步优化translate()、scale()等调用的话。

另请参阅optimize().

[显式构造] 模板 <int N, int M> QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, float> &matrix)

从一个矩阵matrix的最左侧4列和最上面的4行构造一个4x4矩阵。如果matrix的列数或行数少于4列,剩余的元素将用单位矩阵中的元素填充。

另请参阅toGenericMatrix().

QMatrix4x4::QMatrix4x4(const QTransform &transform)

从一个传统的Qt 2D变换矩阵transform构造一个4x4矩阵。

如果transform具有特殊类型(单位矩阵、平移、缩放等),则程序员应该在调用optimize()之后构造此矩阵,如果他们希望QMatrix4x4进一步优化translate()、scale()等调用的话。

另请参阅 toTransform() 和 optimize()。

QVector4D QMatrix4x4::column(int index) const

返回作为4D向量的列index的元素。

另请参阅 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)以及指定的nearPlanefarPlane裁剪平面的视锥投影。

另请参阅 ortho() 和 perspective()。

QMatrix4x4 QMatrix4x4::inverted(bool *invertible = nullptr) const

返回该矩阵的逆矩阵。如果该矩阵不能求逆,则返回单位矩阵;即determinant()为零。如果invertible不是null,则如果矩阵可以求逆,则true将被写入该位置;否则为false。

如果矩阵被识别为单位矩阵或正交矩阵,则该函数将使用优化例程快速求逆矩阵。

另请参阅 determinant() 和 normalMatrix()。

bool QMatrix4x4::isAffine() const

如果该矩阵是仿射矩阵,则返回true;否则为false。

仿射矩阵是一个4x4矩阵,其中第3行等于(0, 0, 0, 1),例如,没有投影系数。

另请参阅 isIdentity()。

bool QMatrix4x4::isIdentity() const

如果该矩阵是单位矩阵,则返回true;否则为false。

另请参阅 setToIdentity()。

void QMatrix4x4::lookAt(const QVector3D &eye, const QVector3D &center, const QVector3D &up)

通过将此矩阵与从观察点推导出的观察矩阵相乘,来乘以此矩阵。中心<center>值表示眼睛所观看的视图中心。《up》值表示相对于眼睛认为的向上的方向。

注意: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的4D向量来映射《point》。矩阵是先应用于点。

注意:此函数与mapVector()不同。对于点,始终使用map()。《mapVector()》仅适用于向量(方向)。

另请参阅 mapRect()和mapVector()。

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

通过将此矩阵的上3x3部分乘以《vector》来映射《vector`。此矩阵的平移和投影部分将被忽略。矩阵是先应用于向量。

另请参阅 map()。

QMatrix3x3 QMatrix4x4::normalMatrix() const

返回与这个4x4变换对应的正交矩阵。正交矩阵是这个4x4矩阵左上角3x3部分的逆矩阵的转置。如果3x3子矩阵不可逆,则此函数返回单位矩阵。

另请参阅反转()。

void QMatrix4x4::optimize()

优化此矩阵从其当前元素的使用。

如果已知正在修改的矩阵已经是单位矩阵、先前的平移、先前的缩放等,则一些操作(如平移()、缩放()和旋转())可以更有效地执行。

通常,当操作执行时,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),并具有指定的nearPlanefarPlane剪切平面。

另请参阅视锥体()和透视()。

void QMatrix4x4::ortho(const QRect &rect)

这是一个重载函数。

将此矩阵乘以另一个矩阵,该矩阵对应于一个具有由rect指定的边界的窗口的正交投影。近剪切平面和远剪切平面分别为-1和1。

另请参阅视锥体()和透视()。

void QMatrix4x4::ortho(const QRectF &rect)

这是一个重载函数。

将此矩阵乘以另一个矩阵,该矩阵对应于一个具有由rect指定的边界的窗口的正交投影。近剪切平面和远剪切平面分别为-1和1。

另请参阅视锥体()和透视()。

void QMatrix4x4::perspective(float verticalAngle, float aspectRatio, float nearPlane, float farPlane)

将此矩阵乘以另一个矩阵,该矩阵应用透视投影。垂直视场为verticalAngle度,以给定aspectRatio的窗口为基准,该比例确定水平视场。投影将具有指定的nearPlanefarPlane剪切平面,这些平面是观众到相应平面的距离。

另请参阅正交()和视锥体()。

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)

这是一个重载函数。

将此矩阵与另一个通过 angle 度绕向量 (x, y, z) 旋转坐标的矩阵相乘。

另请参阅 scale() 和 translate

void QMatrix4x4::rotate(const QQuaternion &quaternion)

将此矩阵与另一个根据指定的 quaternion 旋转坐标的矩阵相乘。假设 quaternion 已归一化。

另请参阅 scaletranslateQQuaternion

QVector4D QMatrix4x4::row(int index) const

index 行的元素作为 4D 向量返回。

另请参阅 setRow() 和 column

void QMatrix4x4::scale(const QVector3D &vector)

将此矩阵与另一个通过 vector 的组件缩放坐标的矩阵相乘。

另请参阅 translaterotate

void QMatrix4x4::scale(float x, float y)

这是一个重载函数。

将此矩阵与另一个通过组件 xy 缩放坐标的矩阵相乘。

另请参阅 translaterotate

void QMatrix4x4::scale(float x, float y, float z)

这是一个重载函数。

将此矩阵与另一个通过组件 xyz 缩放坐标的矩阵相乘。

另请参阅 translaterotate

void QMatrix4x4::scale(float factor)

这是一个重载函数。

将此矩阵与另一个通过给定 factor 缩放坐标的矩阵相乘。

另请参阅 translaterotate

void QMatrix4x4::setColumn(int index, const QVector4D &value)

index 列的元素设置为 value 的组件。

另请参阅 columnsetRow

void QMatrix4x4::setRow(int index, const QVector4D &value)

index 行的元素设置为由 value 的组件。

另请参阅 rowsetColumn

void QMatrix4x4::setToIdentity()

将此矩阵设置为恒等矩阵。

另请参阅 isIdentity()。

template <int N, int M> QGenericMatrix<N, M, float> QMatrix4x4::toGenericMatrix() const

从这个4x4矩阵的左侧的N列和最上面的M行构建一个NxM的正则矩阵。如果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的分量平移坐标的矩阵。

另请参阅scale()和rotate()。

void QMatrix4x4::translate(float x, float y)

这是一个重载函数。

将此矩阵乘以另一个通过组件xy平移坐标的矩阵。

另请参阅scale()和rotate()。

void QMatrix4x4::translate(float x, float y, float z)

这是一个重载函数。

将此矩阵乘以另一个通过组件xyz平移坐标的矩阵。

另请参阅scale()和rotate()。

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]范围内的点映射到视口,其近下左角在(leftbottomnearPlane),并且具有大小(widthheightfarPlane - nearPlane)。

这与由函数glViewport()和glDepthRange()控制的固定功能OpenGL视图变换使用的变换相匹配。

void QMatrix4x4::viewport(const QRectF &rect)

这是一个重载函数。

为视图边界为rect的视图设置视图变换,并将近和远分别设置为0和1。

QVariant QMatrix4x4::operator QVariant() const

返回矩阵作为QVariant

bool QMatrix4x4::operator!=(const QMatrix4x4 &other) const

如果此矩阵与other不相同,则返回true;否则为false。此运算符使用精确的浮点比较。

const float &QMatrix4x4::operator()(int row, int column) const

返回对在此矩阵中位置为(rowcolumn)的元素的常量引用。

另请参阅 column()和row()。

float &QMatrix4x4::operator()(int row, int column)

返回对此矩阵位置为(rowcolumn)的元素的引用,以便可以赋值给该元素。

另请参阅 optimize(),setColumn()和setRow()。

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。此运算符使用精确的浮点数比较。

相关的非成员函数

QMatrix4x4 operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2)

返回m1m2的乘积。

QVector4D operator*(const QVector4D &vector, const QMatrix4x4 &matrix)

返回将向量vector根据matrix转换的结果,应用矩阵后乘向量。

QVector4D operator*(const QMatrix4x4 &matrix, const QVector4D &vector)

返回将向量vector根据matrix转换的结果,应用矩阵前乘向量。

QPoint operator*(const QPoint &point, const QMatrix4x4 &matrix)

返回将点point根据matrix转换的结果,应用矩阵后乘点。

QPointF operator*(const QPointF &point, const QMatrix4x4 &matrix)

返回将点point根据matrix转换的结果,应用矩阵后乘点。

QMatrix4x4 operator*(float factor, const QMatrix4x4 &matrix)

返回将matrix所有元素乘以factor的结果。

QMatrix4x4 operator*(const QMatrix4x4 &matrix, float factor)

返回将matrix所有元素乘以factor的结果。

QMatrix4x4 operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2)

返回m1m2的和。

QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)

返回m1m2的差。

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 读取一个 4x4 矩阵到给定的 matrix 中,并返回流引用。

另请参阅 序列化 Qt 数据类型

© 2024 Qt 公司有限公司。本文件中包含的文档贡献版权属于其各自所有者。本文件提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 及其相应标志为芬兰的 Qt 公司及其全球子公司和附属公司的商标。所有其他商标均为其各自所有者的财产。