class QMatrix4x4#

QMatrix4x4 类表示3D空间中的4x4变换矩阵。更多

新功能,版本4.6。

概述#

方法#

注意

本文档可能包含从C++自动转换为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细说明#

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

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

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

  • data()

  • constData()

另请参阅

QVector3D QGenericMatrix

class Flag#
__init__(transform)#
参数:

transformQTransform

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

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

另请参阅

toTransform() optimize()

__init__()

构建一个单位矩阵。

__init__(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44)
参数:
  • 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 – float

从16个元素 m11m12m13m14m21m22m23m24m31m32m33m34m41m42m43m44 构建一个矩阵。这些元素的指定顺序为行优先。

如果矩阵有特殊的类型(单位矩阵、平移、缩放等),并且在希望 QMatrix4x4translate()scale() 等进一步优化时,程序员应在构造函数之后调用 optimize()

另请参阅

optimize()

__init__(values)
参数:

values – float

从给定的16个浮点数 values 构建一个矩阵。假定数组 values 的内容为行优先顺序。

如果矩阵有特殊的类型(单位矩阵、平移、缩放等),并且在希望 QMatrix4x4translate()scale() 等进一步优化时,程序员应在构造函数之后调用 optimize()

另请参阅

copyDataTo() optimize()

__dummy(arg__1)#
参数:

arg__1 – float 列表

__mgetitem__()#
返回类型:

对象

__reduce__()#
返回类型:

对象

__repr__()#
返回类型:

对象

column(index)#
参数:

index – int

返回类型:

QVector4D

以 4D 向量的形式返回列 index 的元素。

另请参阅

setColumn() row()

copyDataTo()#
返回类型:

元组

检索矩阵中的 16 项并将它们按行主序复制到 values 中。

determinant()#
返回类型:

float

返回该矩阵的行列式。

fill(value)#
参数:

value – float

value 填充该矩阵的所有元素。

flags()#
返回类型:

Flag 的组合

flipCoordinates()#

通过将 y 和 z 坐标乘以 -1 实现右手坐标系和左手坐标系之间的转换。这通常用于创建不缩放视口的左手正交视图,就像 ortho() 所做的那样。

另请参阅

ortho()

frustum(left, right, bottom, top, nearPlane, farPlane)#
参数:
  • left – float

  • right – float

  • bottom – float

  • top – float

  • 近裁剪平面 – float

  • 远裁剪平面 – float

将此矩阵乘以另一个矩阵,该矩阵应用于具有左下角(《left`, 《bottom》),右上角(《right`, 《top》)的窗口,并且指定《nearPlane》和《farPlane》裁剪平面。

另请参阅

ortho()perspective()

inverted()#
返回类型:

PyTuple

返回此矩阵的逆矩阵。如果此矩阵不可逆,即《determinant()》为零,则返回单位矩阵。如果《invertible》不为空,则如果矩阵可以逆置,则将在该位置写入true;否则为false。

如果矩阵被认为是单位矩阵或正交矩阵,则此函数将使用优化的例程快速逆置矩阵。

另请参阅

determinant()normalMatrix()

isAffine()#
返回类型:

bool

如果此矩阵是仿射矩阵,则返回《true》;否则返回《false》。

仿射矩阵是一个行3为(《0, 0, 0, 1》)的4x4矩阵,例如没有投影系数。

另请参阅

isIdentity()

isIdentity()#
返回类型:

bool

如果此矩阵是单位矩阵,则返回《true》;否则返回《false》。

另请参阅

setToIdentity()

lookAt(eye, center, up)#
参数:

通过由视点推导出的视图矩阵乘以此矩阵。值《center》表示《eye`》所看的视图的中心。值《up`》表示相对于《eye`》应考虑哪个方向为“上”。

注意

“up”向量必须不与从“eye”到“center”的视线方向平行。

map(point)#
参数:

pointQPoint

返回类型:

QPoint

通过将此矩阵乘以“point”,将“point”进行映射。矩阵是先于点应用的。

另请参阅

mapRect()

map(point)
参数:

pointQPointF

返回类型:

QPointF

通过后乘此矩阵乘以“point”,将“point”进行映射。矩阵是先于点应用的。

另请参阅

mapRect()

map(point)
参数:

pointQVector3D

返回类型:

QVector3D

通过将“point”扩展为假设w坐标为1.0的4D向量并乘以此矩阵来映射“point”。矩阵是先于点应用的。

注意

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

另请参阅

mapRect() mapVector()

map(point)
参数:

pointQVector4D

返回类型:

QVector4D

通过将此矩阵乘以“point”,将“point”进行映射。矩阵是先于点应用的。

另请参阅

mapRect()

mapRect(rect)#
参数:

rectQRect

返回类型:

QRect

通过对此矩阵乘以“rect”的角落,然后从结果形成一个新的矩形来映射“rect”。返回的矩形将是一个普通二维矩形,边与水平和垂直轴平行。

另请参阅

map()

mapRect(rect)
参数:

rectQRectF

返回类型:

QRectF

通过对此矩阵乘以“rect”的角落,然后从结果形成一个新的矩形来映射“rect”。返回的矩形将是一个普通二维矩形,边与水平和垂直轴平行。

另请参阅

map()

mapVector(vector)#
参数:

vectorQVector3D

返回类型:

QVector3D

通过将矩阵顶部 3x3 部分乘以 vector 来映射 vector。此矩阵的平移和投影组件被忽略。矩阵是在向量之前应用的。

另请参阅

map()

normalMatrix()#
返回类型:

QMatrix3x3

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

另请参阅

inverted()

__ne__(other)#
参数:

otherQMatrix4x4

返回类型:

bool

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

__mul__(m2)#
参数:

m2QMatrix4x4

返回类型:

QMatrix4x4

返回 m1m2 的乘积。

__mul__(factor)
参数:

factor – float

返回类型:

QMatrix4x4

返回将矩阵中所有元素乘以 factor 的结果。

__mul__(factor)
参数:

factor – float

返回类型:

QMatrix4x4

返回将矩阵中所有元素乘以 factor 的结果。

__imul__(other)#
参数:

otherQMatrix4x4

返回类型:

QMatrix4x4

other 的内容与此矩阵相乘。

__imul__(factor)
参数:

factor – float

返回类型:

QMatrix4x4

这是一个重载函数。

将矩阵的所有元素乘以 factor

__add__(m2)#
参数:

m2QMatrix4x4

返回类型:

QMatrix4x4

返回 m1m2 的和。

__iadd__(other)#
参数:

otherQMatrix4x4

返回类型:

QMatrix4x4

other 的内容添加到这个矩阵中。

定义 __sub__#
返回类型:

QMatrix4x4

这是一个重载函数。

返回 matrix 的取反。

定义 __sub__(m2)#
参数:

m2QMatrix4x4

返回类型:

QMatrix4x4

返回 m1m2 的差值。

定义 __isub__(other)#
参数:

otherQMatrix4x4

返回类型:

QMatrix4x4

从该矩阵中减去 other 的内容。

定义 __div__(divisor)#
参数:

除数 - float

返回类型:

QMatrix4x4

返回将 matrix 的所有元素除以 divisor 的结果。

operator/=(divisor)
参数:

除数 - float

返回类型:

QMatrix4x4

这是一个重载函数。

将此矩阵的所有元素除以 divisor

定义 __eq__(other)#
参数:

otherQMatrix4x4

返回类型:

bool

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

定义 optimize()#

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

当知道要修改的矩阵已经是单位矩阵,或者之前执行了 translate() scale() rotate() 等操作时,某些操作(如 translate() 等)可以更有效地执行。

通常,当执行操作时,QMatrix4x4 类会保留这种特殊类型的内部跟踪。但是,如果通过 operator() (int, int) 或 data() 直接修改矩阵,则 QMatrix4x4 将失去对特殊类型的跟踪,并且此后将回退到最安全但最不高效的操作。

通过在直接修改矩阵后调用optimize(),程序员可以强制QMatrix4x4恢复特殊类型,如果元素看起来符合已知的优化类型之一。

另请参阅

operator()(int, int) data() translate()

ortho(rect)#
参数:

rectQRect

这是一个重载函数。

将此矩阵与另一个矩阵相乘,该矩阵应用于具有由rect指定的边界的窗口。近剪切面和远剪切面分别为-1和1。

另请参阅

frustum() perspective()

ortho(rect)
参数:

rectQRectF

这是一个重载函数。

将此矩阵与另一个矩阵相乘,该矩阵应用于具有由rect指定的边界的窗口。近剪切面和远剪切面分别为-1和1。

另请参阅

frustum() perspective()

ortho(left, right, bottom, top, nearPlane, farPlane)
参数:
  • left – float

  • right – float

  • bottom – float

  • top – float

  • 近裁剪平面 – float

  • 远裁剪平面 – float

将此矩阵与另一个矩阵相乘,该矩阵应用于具有左下角 (left, bottom),右上角 (right, top),以及指定的 nearPlanefarPlane 剪切面的窗口。

另请参阅

frustum() perspective()

perspective(verticalAngle, aspectRatio, nearPlane, farPlane)#
参数:
  • verticalAngle - float

  • aspectRatio - float

  • 近裁剪平面 – float

  • 远裁剪平面 – float

将此矩阵与另一个矩阵相乘,该矩阵应用于一个带有给定的 aspectRatio 的窗口,该比率决定了水平视野,并在窗口内有一个垂直视野为 verticalAngle 度。投影将具有指定的 nearPlanefarPlane 剪切面,这些面是从观察者到相应平面的距离。

另请参阅

ortho() frustum()

projectedRotate(angle, x, y, z)#
参数:
  • angle – 浮点数

  • x – 浮点数

  • y – 浮点数

  • z – 浮点数

projectedRotate(angle, x, y, z, distanceToPlane)
参数:
  • angle – 浮点数

  • x – 浮点数

  • y – 浮点数

  • z – 浮点数

  • distanceToPlane – 浮点数

rotate(angle, x, y[, z=0.0f])#
参数:
  • angle – 浮点数

  • x – 浮点数

  • y – 浮点数

  • z – 浮点数

这是一个重载函数。

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

另请参阅

scale() translate()

rotate(quaternion)
参数:

quaternionQQuaternion

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

rotate(angle, vector)
参数:

将此矩阵乘以另一个围绕 vector 进行 angle 度旋转坐标的矩阵。

另请参阅

scale() translate()

row(index)#
参数:

index – int

返回类型:

QVector4D

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

另请参阅

setRow() column()

scale(vector)#
参数:

vectorQVector3D

将此矩阵与另一个矩阵相乘,该矩阵通过 vector 的分量缩放坐标。

另请参阅

translate() rotate()

scale(factor)
参数:

factor – float

这是一个重载函数。

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

另请参阅

translate() rotate()

scale(x, y)
参数:
  • x – 浮点数

  • y – 浮点数

这是一个重载函数。

将此矩阵与另一个矩阵相乘,该矩阵通过 xy 的分量缩放坐标。

另请参阅

translate() rotate()

scale(x, y, z)
参数:
  • x – 浮点数

  • y – 浮点数

  • z – 浮点数

这是一个重载函数。

将此矩阵与另一个矩阵相乘,该矩阵通过 xyz 的分量缩放坐标。

另请参阅

translate() rotate()

setColumn(index, value)#
参数:

index 列的元素设置为 value 的分量。

另请参阅

column() setRow()

setRow(index, value)#
参数:

index 行的元素设置为 value 的分量。

另请参阅

row() setColumn()

setToIdentity()#

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

另请参阅

isIdentity()

toTransform()#
返回类型:

QTransform

返回与该矩阵对应的传统 Qt 2D 变换矩阵。

返回的 QTransform 通过简单地移除 QMatrix4x4 的第三行和第三列而形成。这对于实现需要舍弃而非投影z坐标的正交投影是合适的。

toTransform(distanceToPlane)
参数:

distanceToPlane – 浮点数

返回类型:

QTransform

返回与该矩阵对应的传统 Qt 2D 变换矩阵。

如果 distanceToPlane 不为零,指示用于调整z坐标的投影因子。值为1024对应于用于x和y轴的 rotate() 方法的投影因子。

如果 distanceToPlane 为零,则返回的 QTransform 通过简单地移除 QMatrix4x4 的第三行和第三列而形成。这对于实现需要舍弃而非投影z坐标的正交投影是合适的。

translate(vector)#
参数:

vectorQVector3D

将此矩阵与另一个矩阵相乘,将坐标通过 vector 的分量进行平移。

另请参阅

scale() rotate()

translate(x, y)
参数:
  • x – 浮点数

  • y – 浮点数

这是一个重载函数。

将此矩阵与另一个矩阵相乘,通过分量 xy 进行平移。

另请参阅

scale() rotate()

translate(x, y, z)
参数:
  • x – 浮点数

  • y – 浮点数

  • z – 浮点数

这是一个重载函数。

将此矩阵与另一个矩阵相乘,通过分量 x, y, 和 z 进行平移。

另请参阅

scale() rotate()

transposed()#
返回类型:

QMatrix4x4

返回沿着其对角线转置的此矩阵。

viewport(rect)#
参数:

rectQRectF

这是一个重载函数。

设置与 rect 边界和设置近平面和远平面分别为 0 和 1 的视口变换。

viewport(left, bottom, width, height[, nearPlane=0.0f[, farPlane=1.0f]])
参数:
  • left – float

  • bottom – float

  • width – 浮点数

  • height – 浮点数

  • 近裁剪平面 – float

  • 远裁剪平面 – float

将此矩阵与一个执行OpenGL从标准化设备坐标系(NDC)到视口(窗口)坐标转换的缩放和偏移转换的矩阵相乘。也就是说,它将每个维度在[-1, 1]范围内变化的立方体内的点映射到视口,其近下左角位于(left, bottom, nearPlane),尺寸为(width, height, 远平面 - 近平面)。

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