En esta página

QMatrix4x4 Class

La clase QMatrix4x4 representa una matriz de transformación 4x4 en el espacio 3D. Más...

Cabecera: #include <QMatrix4x4>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

Funciones Públicas

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 &center, 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 &matrix)
QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
QMatrix4x4 operator/(const QMatrix4x4 &matrix, float divisor)
QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix)
QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix)

Descripción Detallada

La clase QMatrix4x4 en general se trata como una matriz fila-mayor, en que los constructores y operator() funciones toman datos en formato fila-mayor, como es familiar en el uso de estilo C.

Internamente, los datos se almacenan en formato columna-mayor, para que sean óptimos al pasarlos a funciones OpenGL, que esperan datos columna-mayor.

Cuando utilices estas funciones, ten en cuenta que devuelven datos en formato columna-mayor:

Véase también QVector3D y QGenericMatrix.

Documentación de las funciones miembro

QMatrix4x4::QMatrix4x4()

Construye una matriz identidad.

[explicit] template <int N, int M> QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, float> &matrix)

Construye una matriz 4x4 a partir de las 4 columnas más a la izquierda y las 4 filas más arriba de matrix. Si matrix tiene menos de 4 columnas o filas, los elementos restantes se rellenan con elementos de la matriz identidad.

Véase también toGenericMatrix().

QMatrix4x4::QMatrix4x4(const QTransform &transform)

Construye una matriz 4x4 a partir de la matriz de transformación 2D convencional de Qt transform.

Si transform tiene un tipo especial (identidad, traslación, escala, etc), el programador debería seguir este constructor con una llamada a optimize() si desea que QMatrix4x4 optimice las llamadas posteriores a translate(), scale(), etc.

Véase también toTransform() y optimize().

[explicit] QMatrix4x4::QMatrix4x4(const float *values)

Construye una matriz a partir de los 16 puntos flotantes dados values. Se asume que el contenido de la matriz values está en orden fila-mayor.

Si la matriz tiene un tipo especial (identidad, traducir, escala, etc), el programador debe seguir este constructor con una llamada a optimize() si desea que QMatrix4x4 optimice las llamadas posteriores a translate(), scale(), etc.

Véase también copyDataTo() y 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)

Construye una matriz a partir de los 16 elementos m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, y m44. Los elementos se especifican en orden fila-mayor.

Si la matriz tiene un tipo especial (identidad, traslación, escala, etc), el programador debe seguir este constructor con una llamada a optimize() si desea que QMatrix4x4 optimice las llamadas posteriores a translate(), scale(), etc.

Véase también optimize().

QVector4D QMatrix4x4::column(int index) const

Devuelve los elementos de la columna index como un vector 4D.

Véase también setColumn() y row().

const float *QMatrix4x4::constData() const

Devuelve un puntero constante a los datos brutos de esta matriz. Estos datos brutos se almacenan en formato columna-mayor.

Véase también data().

void QMatrix4x4::copyDataTo(float *values) const

Recupera los 16 elementos de esta matriz y los copia en values en orden fila-mayor.

float *QMatrix4x4::data()

Devuelve un puntero a los datos brutos de esta matriz.

Véase también constData() y optimize().

const float *QMatrix4x4::data() const

Devuelve un puntero constante a los datos brutos de esta matriz. Estos datos brutos se almacenan en formato columna-mayor.

Véase también constData().

double QMatrix4x4::determinant() const

Devuelve el determinante de esta matriz.

void QMatrix4x4::fill(float value)

Rellena todos los elementos de esta matriz con value.

void QMatrix4x4::frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane)

Multiplica esta matriz por otra que aplica una proyección frustum en perspectiva para una ventana con esquina inferior izquierda (left, bottom), esquina superior derecha (right, top), y los planos de recorte nearPlane y farPlane especificados.

Véase también ortho() y perspective().

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

Devuelve la inversa de esta matriz. Devuelve la identidad si esta matriz no se puede invertir; es decir, determinant() es cero. Si invertible no es nulo, entonces se escribirá true en ese lugar si la matriz puede ser invertida; false en caso contrario.

Si la matriz se reconoce como la identidad o una matriz ortonormal, entonces esta función invertirá rápidamente la matriz utilizando rutinas optimizadas.

Véase también determinant() y normalMatrix().

bool QMatrix4x4::isAffine() const

Devuelve true si esta matriz es una matriz afín; false en caso contrario.

Una matriz afín es una matriz 4x4 con la fila 3 igual a (0, 0, 0, 1), es decir, sin coeficientes proyectivos.

Véase también isIdentity().

bool QMatrix4x4::isIdentity() const

Devuelve true si esta matriz es la identidad; false en caso contrario.

Véase también setToIdentity().

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

Multiplica esta matriz por una matriz de visión derivada de un punto de ojo. El valor center indica el centro de la vista al que mira el eye. El valor up indica qué dirección debe considerarse hacia arriba con respecto a eye.

Nota: El vector up no debe ser paralelo a la línea de visión de eye a center.

QPoint QMatrix4x4::map(const QPoint &point) const

Mapas point multiplicando esta matriz por point. La matriz se aplica prepunto.

Véase también mapRect().

QPointF QMatrix4x4::map(const QPointF &point) const

Mapea point postmultiplicando esta matriz por point. La matriz se aplica prepunto.

Véase también mapRect().

QVector3D QMatrix4x4::map(const QVector3D &point) const

Mapas point multiplicando esta matriz por point extendida a un vector 4D asumiendo 1.0 para la coordenada w. La matriz se aplica pre-punto.

Nota: Esta función no es la misma que mapVector(). Para puntos, utilice siempre map(). mapVector() sólo es adecuada para vectores (direcciones).

Véase también mapRect() y mapVector().

QVector4D QMatrix4x4::map(const QVector4D &point) const

Mapas point multiplicando esta matriz por point. La matriz se aplica prepunto.

Véase también mapRect().

QRect QMatrix4x4::mapRect(const QRect &rect) const

Mapas rect multiplicando esta matriz por las esquinas de rect y luego formando un nuevo rectángulo a partir de los resultados. El rectángulo devuelto será un rectángulo 2D ordinario con lados paralelos a los ejes horizontal y vertical.

Véase también map().

QRectF QMatrix4x4::mapRect(const QRectF &rect) const

Mapas rect multiplicando esta matriz por las esquinas de rect y luego formando un nuevo rectángulo a partir de los resultados. El rectángulo devuelto será un rectángulo 2D ordinario con lados paralelos a los ejes horizontal y vertical.

Véase también map().

QVector3D QMatrix4x4::mapVector(const QVector3D &vector) const

Mapas vector multiplicando la parte superior 3x3 de esta matriz por vector. Los componentes de traslación y proyección de esta matriz se ignoran. La matriz se aplica pre-vector.

Véase también map().

QMatrix3x3 QMatrix4x4::normalMatrix() const

Devuelve la matriz normal correspondiente a esta transformación 4x4. La matriz normal es la transpuesta de la inversa de la parte superior izquierda 3x3 de esta matriz 4x4. Si la submatriz 3x3 no es invertible, esta función devuelve la identidad.

Véase también inverted().

void QMatrix4x4::optimize()

Optimizar el uso de esta matriz a partir de sus elementos actuales.

Algunas operaciones como translate(), scale(), y rotate() pueden realizarse más eficientemente si ya se sabe que la matriz que se está modificando es la identidad, una translate() anterior, una scale() anterior, etc.

Normalmente, la clase QMatrix4x4 realiza un seguimiento interno de este tipo especial a medida que se realizan las operaciones. Sin embargo, si la matriz se modifica directamente con operator()(int, int) o data(), entonces QMatrix4x4 perderá la pista del tipo especial y volverá a las operaciones más seguras pero menos eficientes a partir de entonces.

Llamando a optimize() después de modificar directamente la matriz, el programador puede forzar a QMatrix4x4 a recuperar el tipo especial si los elementos parecen ajustarse a uno de los tipos optimizados conocidos.

Véase también operator()(int, int), data(), y translate().

void QMatrix4x4::ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane)

Multiplica esta matriz por otra que aplica una proyección ortográfica para una ventana con esquina inferior izquierda (left, bottom), esquina superior derecha (right, top), y los planos de recorte nearPlane y farPlane especificados.

Véase también frustum() y perspective().

void QMatrix4x4::ortho(const QRect &rect)

Multiplica esta matriz por otra que aplica una proyección ortográfica para una ventana con límites especificados por rect. Los planos de recorte cercano y lejano serán -1 y 1 respectivamente.

Se trata de una función sobrecargada.

Véase también frustum() y perspective().

void QMatrix4x4::ortho(const QRectF &rect)

Multiplica esta matriz por otra que aplica una proyección ortográfica para una ventana con límites especificados por rect. Los planos de recorte cercano y lejano serán -1 y 1 respectivamente.

Se trata de una función sobrecargada.

Véase también frustum() y perspective().

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

Multiplica esta matriz por otra que aplica una proyección en perspectiva. El campo de visión vertical será verticalAngle grados dentro de una ventana con un aspectRatio dado que determina el campo de visión horizontal. La proyección tendrá los planos de recorte nearPlane y farPlane especificados, que son las distancias del visor a los planos correspondientes.

Véase también ortho() y frustum().

void QMatrix4x4::rotate(const QQuaternion &quaternion)

Multiplica esta matriz por otra que rota las coordenadas según un quaternion especificado. Se supone que quaternion ha sido normalizada.

Véase también scale(), translate() y QQuaternion.

void QMatrix4x4::rotate(float angle, const QVector3D &vector)

Multiplica esta matriz por otra que rota las coordenadas angle grados alrededor de vector.

Véase también scale() y translate().

void QMatrix4x4::rotate(float angle, float x, float y, float z = 0.0f)

Multiplica esta matriz por otra que rota las coordenadas angle grados alrededor del vector (x, y, z).

Se trata de una función sobrecargada.

Véase también scale() y translate().

QVector4D QMatrix4x4::row(int index) const

Devuelve los elementos de la fila index como un vector 4D.

Véase también setRow() y column().

void QMatrix4x4::scale(const QVector3D &vector)

Multiplica esta matriz por otra que escala las coordenadas por los componentes de vector.

Véase también translate() y rotate().

void QMatrix4x4::scale(float factor)

Multiplica esta matriz por otra que escala las coordenadas por el valor dado factor.

Esta es una función sobrecargada.

Véase también translate() y rotate().

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

Multiplica esta matriz por otra que escala las coordenadas por los componentes x, y y.

Se trata de una función sobrecargada.

Véase también translate() y rotate().

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

Multiplica esta matriz por otra que escala las coordenadas por los componentes x, y, y z.

Se trata de una función sobrecargada.

Véase también translate() y rotate().

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

Establece los elementos de la columna index a los componentes de value.

Véase también column() y setRow().

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

Establece los elementos de la fila index a los componentes de value.

Véase también row() y setColumn().

void QMatrix4x4::setToIdentity()

Establece esta matriz a la identidad.

Véase también isIdentity().

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

Construye una matriz genérica NxM a partir de las N columnas más a la izquierda y las M filas más arriba de esta matriz 4x4. Si N o M es mayor que 4, los elementos restantes se rellenan con elementos de la matriz identidad.

QTransform QMatrix4x4::toTransform() const

Devuelve la matriz de transformación 2D convencional de Qt que corresponde a esta matriz.

La QTransform devuelta se forma simplemente eliminando la tercera fila y la tercera columna de la QMatrix4x4. Esto es adecuado para implementar proyecciones ortográficas en las que la coordenada z debe eliminarse en lugar de proyectarse.

QTransform QMatrix4x4::toTransform(float distanceToPlane) const

Devuelve la matriz de transformación convencional Qt 2D que corresponde a esta matriz.

Si distanceToPlane es distinto de cero, indica un factor de proyección a utilizar para ajustar la coordenada z. El valor de 1024 corresponde al factor de proyección utilizado por QTransform::rotate() para los ejes x e y.

Si distanceToPlane es cero, entonces la matriz devuelta QTransform se forma simplemente eliminando la tercera fila y la tercera columna de QMatrix4x4. Esto es adecuado para implementar proyecciones ortográficas en las que la coordenada z debe eliminarse en lugar de proyectarse.

void QMatrix4x4::translate(const QVector3D &vector)

Multiplica esta matriz por otra que traduce las coordenadas por los componentes de vector.

Véase también scale() y rotate().

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

Multiplica esta matriz por otra que traduce las coordenadas por los componentes x, y y.

Se trata de una función sobrecargada.

Véase también scale() y rotate().

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

Multiplica esta matriz por otra que traduce las coordenadas por los componentes x, y, y z.

Se trata de una función sobrecargada.

Véase también scale() y rotate().

QMatrix4x4 QMatrix4x4::transposed() const

Devuelve esta matriz, transpuesta sobre su diagonal.

void QMatrix4x4::viewport(float left, float bottom, float width, float height, float nearPlane = 0.0f, float farPlane = 1.0f)

Multiplica esta matriz por otra que realiza la transformación de escala y sesgo utilizada por OpenGL para transformar de coordenadas normalizadas de dispositivo (NDC) a coordenadas de ventana. Es decir, asigna puntos del cubo que se extienden sobre [-1, 1] en cada dimensión a la ventana gráfica con su esquina inferior izquierda en (left, bottom, nearPlane) y con tamaño (width, height, farPlane - nearPlane).

Esto coincide con la transformación utilizada por la función fija OpenGL viewport transform controlada por las funciones glViewport() y glDepthRange().

void QMatrix4x4::viewport(const QRectF &rect)

Establece la transformación de la vista para una vista delimitada por rect y con near y far establecidos en 0 y 1 respectivamente.

Se trata de una función sobrecargada.

QMatrix4x4::operator QVariant() const

Devuelve la matriz como QVariant.

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

Devuelve true si esta matriz no es idéntica a other; false en caso contrario. Este operador utiliza una comparación exacta en coma flotante.

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

Devuelve una referencia al elemento en la posición (row, column) en esta matriz para que el elemento pueda ser asignado.

Véase también optimize(), setColumn() y setRow().

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

Devuelve una referencia constante al elemento en la posición (row, column) en esta matriz.

Véase también column() y row().

QMatrix4x4 &QMatrix4x4::operator*=(const QMatrix4x4 &other)

Multiplica el contenido de other por esta matriz.

QMatrix4x4 &QMatrix4x4::operator*=(float factor)

Multiplica todos los elementos de esta matriz por factor.

Se trata de una función sobrecargada.

QMatrix4x4 &QMatrix4x4::operator+=(const QMatrix4x4 &other)

Añade el contenido de other a esta matriz.

QMatrix4x4 &QMatrix4x4::operator-=(const QMatrix4x4 &other)

Resta el contenido de other de esta matriz.

QMatrix4x4 &QMatrix4x4::operator/=(float divisor)

Divide todos los elementos de esta matriz por divisor.

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

Devuelve true si esta matriz es idéntica a other; false en caso contrario. Este operador utiliza una comparación exacta en coma flotante.

No miembros relacionados

[noexcept] bool qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2)

Devuelve true si m1 y m2 son iguales, permitiendo un pequeño factor de imprecisión para comparaciones de punto flotante; falso en caso contrario.

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

Devuelve el producto de m1 y m2.

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

Devuelve el resultado de transformar vector según matrix, con la matriz aplicada pre-vector.

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

Devuelve el resultado de multiplicar todos los elementos de matrix por factor.

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

Devuelve el resultado de transformar point según matrix, con la matriz aplicada postpunto.

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

Devuelve el resultado de transformar point según matrix, con la matriz aplicada postpunto.

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

Devuelve el resultado de transformar vector según matrix, con la matriz aplicada post-vector.

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

Devuelve el resultado de multiplicar todos los elementos de matrix por factor.

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

Devuelve la suma de m1 y m2.

QMatrix4x4 operator-(const QMatrix4x4 &matrix)

Devuelve la negación de matrix.

Se trata de una función sobrecargada.

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

Devuelve la diferencia de m1 y m2.

QMatrix4x4 operator/(const QMatrix4x4 &matrix, float divisor)

Devuelve el resultado de dividir todos los elementos de matrix por divisor.

QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix)

Escribe el matrix dado en el stream dado y devuelve una referencia al flujo.

Véase también Serializar tipos de datos Qt.

QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix)

Lee una matriz 4x4 del stream dado al matrix dado y devuelve una referencia al flujo.

Véase también Serializar tipos de datos 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.