Sur cette page

QMatrix4x4 Class

La classe QMatrix4x4 représente une matrice de transformation 4x4 dans l'espace 3D. Plus d'informations...

En-tête : #include <QMatrix4x4>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Fonctions publiques

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)

Description détaillée

La classe QMatrix4x4 est généralement traitée comme une matrice à majorité de lignes, en ce sens que les constructeurs et les fonctions operator() prennent des données au format à majorité de lignes, comme c'est le cas dans une utilisation de style C.

En interne, les données sont stockées au format colonne-majeur, afin d'être optimisées pour être transmises aux fonctions OpenGL, qui attendent des données en colonne-majeur.

Lorsque vous utilisez ces fonctions, sachez qu'elles renvoient des données au format colonne-major:

Voir également QVector3D et QGenericMatrix.

Documentation des fonctions membres

QMatrix4x4::QMatrix4x4()

Construit une matrice d'identité.

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

Construit une matrice 4x4 à partir des 4 colonnes les plus à gauche et des 4 lignes les plus en haut de matrix. Si matrix a moins de 4 colonnes ou lignes, les éléments restants sont remplis avec des éléments de la matrice identité.

Voir aussi toGenericMatrix().

QMatrix4x4::QMatrix4x4(const QTransform &transform)

Construit une matrice 4x4 à partir de la matrice de transformation 2D conventionnelle de Qt XML transform.

Si transform a un type spécial (identité, translation, échelle, etc.), le programmeur doit faire suivre ce constructeur d'un appel à optimize() s'il souhaite que QMatrix4x4 optimise les appels ultérieurs à translate(), scale(), etc.

Voir également toTransform() et optimize().

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

Construit une matrice à partir des 16 valeurs flottantes données values. Le contenu du tableau values est supposé être dans l'ordre des lignes majeures.

Si la matrice a un type spécial (identité, translation, échelle, etc.), le programmeur doit faire suivre ce constructeur d'un appel à optimize() s'il souhaite que QMatrix4x4 optimise les appels ultérieurs à translate(), scale(), etc.

Voir également copyDataTo() et 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)

Construit une matrice à partir des 16 éléments m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, et m44. Les éléments sont spécifiés dans l'ordre des lignes majeures.

Si la matrice a un type spécial (identité, translation, échelle, etc.), le programmeur doit faire suivre ce constructeur d'un appel à optimize() s'il souhaite que QMatrix4x4 optimise les appels ultérieurs à translate(), scale(), etc.

Voir également optimize().

QVector4D QMatrix4x4::column(int index) const

Renvoie les éléments de la colonne index sous la forme d'un vecteur 4D.

Voir aussi setColumn() et row().

const float *QMatrix4x4::constData() const

Renvoie un pointeur constant vers les données brutes de cette matrice. Ces données brutes sont stockées au format colonne majeure.

Voir aussi data().

void QMatrix4x4::copyDataTo(float *values) const

Récupère les 16 éléments de cette matrice et les copie sur values dans l'ordre des lignes.

float *QMatrix4x4::data()

Renvoie un pointeur sur les données brutes de cette matrice.

Voir aussi constData() et optimize().

const float *QMatrix4x4::data() const

Renvoie un pointeur constant vers les données brutes de cette matrice. Ces données brutes sont stockées au format colonne majeure.

Voir aussi constData().

double QMatrix4x4::determinant() const

Renvoie le déterminant de cette matrice.

void QMatrix4x4::fill(float value)

Remplit tous les éléments de cette matrice avec value.

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

Multiplie cette matrice par une autre qui applique une projection de frustum en perspective pour une fenêtre avec le coin inférieur gauche (left, bottom), le coin supérieur droit (right, top), et les plans d'écrêtage spécifiés nearPlane et farPlane.

Voir également ortho() et perspective().

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

Renvoie l'inverse de cette matrice. Renvoie l'identité si cette matrice ne peut pas être inversée, c'est-à-dire si determinant() est égal à zéro. Si invertible n'est pas nul, true sera écrit à cet emplacement si la matrice peut être inversée ; false dans le cas contraire.

Si la matrice est reconnue comme étant la matrice identité ou une matrice orthonormée, cette fonction inversera rapidement la matrice en utilisant des routines optimisées.

Voir aussi determinant() et normalMatrix().

bool QMatrix4x4::isAffine() const

Renvoie true si cette matrice est une matrice affine ; false sinon.

Une matrice affine est une matrice 4x4 dont la ligne 3 est égale à (0, 0, 0, 1), c'est-à-dire sans coefficients projectifs.

Voir aussi isIdentity().

bool QMatrix4x4::isIdentity() const

Renvoie true si cette matrice est l'identité ; false sinon.

Voir aussi setToIdentity().

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

Multiplie cette matrice par une matrice de visualisation dérivée d'un point oculaire. La valeur center indique le centre de la vue que le eye regarde. La valeur up indique la direction à considérer comme ascendante par rapport à eye.

Remarque : le vecteur up ne doit pas être parallèle à la ligne de visée entre eye et center.

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

Cartes point en multipliant cette matrice par point. La matrice est appliquée avant le point.

Voir également mapRect().

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

Les cartes point en post-multipliant cette matrice par point. La matrice est appliquée avant le point.

Voir également mapRect().

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

Les cartes point en multipliant cette matrice par point sont étendues à un vecteur 4D en supposant que la coordonnée w est 1,0. La matrice est appliquée avant le point.

Remarque : cette fonction n'est pas la même que mapVector(). Pour les points, utilisez toujours map(). mapVector() ne convient que pour les vecteurs (directions).

Voir également mapRect() et mapVector().

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

Cartes point en multipliant cette matrice par point. La matrice est appliquée avant le point.

Voir également mapRect().

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

Maps rect en multipliant cette matrice par les coins de rect et en formant un nouveau rectangle à partir des résultats. Le rectangle retourné sera un rectangle 2D ordinaire dont les côtés sont parallèles aux axes horizontal et vertical.

Voir aussi map().

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

Maps rect en multipliant cette matrice par les coins de rect et en formant un nouveau rectangle à partir des résultats. Le rectangle retourné sera un rectangle 2D ordinaire dont les côtés sont parallèles aux axes horizontal et vertical.

Voir aussi map().

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

Cartes vector en multipliant la partie supérieure 3x3 de cette matrice par vector. Les composantes de translation et de projection de cette matrice sont ignorées. La matrice est appliquée en tant que pré-vecteur.

Voir également map().

QMatrix3x3 QMatrix4x4::normalMatrix() const

Renvoie la matrice normale correspondant à cette transformation 4x4. La matrice normale est la transposée de l'inverse de la partie supérieure gauche 3x3 de cette matrice 4x4. Si la sous-matrice 3x3 n'est pas inversible, cette fonction renvoie l'identité.

Voir également inverted().

void QMatrix4x4::optimize()

Optimiser l'utilisation de cette matrice à partir de ses éléments actuels.

Certaines opérations telles que translate(), scale() et rotate() peuvent être effectuées plus efficacement si la matrice modifiée est déjà connue comme étant l'identité, une précédente translate(), une précédente scale(), etc.

Normalement, la classe QMatrix4x4 garde la trace de ce type spécial en interne au fur et à mesure que les opérations sont effectuées. Cependant, si la matrice est modifiée directement avec operator()(int, int) ou data(), alors QMatrix4x4 perdra la trace du type spécial et reviendra aux opérations les plus sûres mais les moins efficaces par la suite.

En appelant optimize() après avoir modifié directement la matrice, le programmeur peut forcer QMatrix4x4 à récupérer le type spécial si les éléments semblent se conformer à l'un des types optimisés connus.

Voir également operator()(int, int), data() et translate().

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

Multiplie cette matrice par une autre qui applique une projection orthographique pour une fenêtre avec le coin inférieur gauche (left, bottom), le coin supérieur droit (right, top), et les plans d'écrêtage spécifiés nearPlane et farPlane.

Voir également frustum() et perspective().

void QMatrix4x4::ortho(const QRect &rect)

Multiplie cette matrice par une autre qui applique une projection orthographique pour une fenêtre dont les limites sont spécifiées par rect. Les plans d'écrêtage proche et lointain seront respectivement -1 et 1.

Il s'agit d'une fonction surchargée.

Voir aussi frustum() et perspective().

void QMatrix4x4::ortho(const QRectF &rect)

Multiplie cette matrice par une autre qui applique une projection orthographique pour une fenêtre dont les limites sont spécifiées par rect. Les plans d'écrêtage proche et lointain seront respectivement -1 et 1.

Il s'agit d'une fonction surchargée.

Voir aussi frustum() et perspective().

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

Multiplie cette matrice par une autre qui applique une projection en perspective. Le champ de vision vertical sera de verticalAngle degrés à l'intérieur d'une fenêtre avec un aspectRatio donné qui détermine le champ de vision horizontal. La projection aura les plans d'écrêtage nearPlane et farPlane spécifiés, qui sont les distances entre le spectateur et les plans correspondants.

Voir également ortho() et frustum().

void QMatrix4x4::rotate(const QQuaternion &quaternion)

Multiplie cette matrice par une autre qui fait pivoter les coordonnées selon une valeur spécifiée quaternion. On suppose que la matrice quaternion a été normalisée.

Voir aussi scale(), translate() et QQuaternion.

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

Multiplie cette matrice par une autre qui fait pivoter les coordonnées de angle degrés par rapport à vector.

Voir aussi scale() et translate().

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

Multiplie cette matrice par une autre qui fait pivoter les coordonnées de angle degrés autour du vecteur (x, y, z).

Il s'agit d'une fonction surchargée.

Voir aussi scale() et translate().

QVector4D QMatrix4x4::row(int index) const

Renvoie les éléments de la ligne index sous la forme d'un vecteur 4D.

Voir aussi setRow() et column().

void QMatrix4x4::scale(const QVector3D &vector)

Multiplie cette matrice par une autre qui échelonne les coordonnées en fonction des composantes de vector.

Voir également translate() et rotate().

void QMatrix4x4::scale(float factor)

Multiplie cette matrice par une autre qui échelonne les coordonnées selon la valeur donnée factor.

Il s'agit d'une fonction surchargée.

Voir aussi translate() et rotate().

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

Multiplie cette matrice par une autre qui échelonne les coordonnées en fonction des composantes x, et y.

Il s'agit d'une fonction surchargée.

Voir aussi translate() et rotate().

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

Multiplie cette matrice par une autre qui échelonne les coordonnées en fonction des composantes x, y, et z.

Il s'agit d'une fonction surchargée.

Voir aussi translate() et rotate().

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

Définit les éléments de la colonne index comme étant les composants de value.

Voir aussi column() et setRow().

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

Définit les éléments de la ligne index comme étant les composants de value.

Voir aussi row() et setColumn().

void QMatrix4x4::setToIdentity()

Définit cette matrice comme étant l'identité.

Voir également isIdentity().

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

Construit une matrice générique NxM à partir des N colonnes les plus à gauche et des M lignes les plus en haut de cette matrice 4x4. Si N ou M est supérieur à 4, les éléments restants sont remplis avec des éléments de la matrice identité.

QTransform QMatrix4x4::toTransform() const

Renvoie la matrice de transformation 2D Qt conventionnelle qui correspond à cette matrice.

La matrice QTransform renvoyée est formée en supprimant simplement la troisième ligne et la troisième colonne de la matrice QMatrix4x4. Cela convient à la mise en œuvre de projections orthographiques où la coordonnée z doit être supprimée au lieu d'être projetée.

QTransform QMatrix4x4::toTransform(float distanceToPlane) const

Renvoie la matrice de transformation 2D Qt conventionnelle qui correspond à cette matrice.

Si distanceToPlane est différent de zéro, il indique un facteur de projection à utiliser pour ajuster la coordonnée z. La valeur 1024 correspond au facteur de projection utilisé par QTransform::rotate() pour les axes x et y.

Si distanceToPlane est égal à zéro, la matrice QTransform renvoyée est formée en supprimant simplement la troisième ligne et la troisième colonne de la matrice QMatrix4x4. Cette méthode convient à la mise en œuvre de projections orthographiques pour lesquelles la coordonnée z doit être supprimée plutôt que projetée.

void QMatrix4x4::translate(const QVector3D &vector)

Multiplie cette matrice par une autre qui traduit les coordonnées par les composantes de vector.

Voir également scale() et rotate().

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

Multiplie cette matrice par une autre qui traduit les coordonnées par les composantes x, et y.

Il s'agit d'une fonction surchargée.

Voir aussi scale() et rotate().

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

Multiplie cette matrice par une autre qui traduit les coordonnées par les composants x, y, et z.

Il s'agit d'une fonction surchargée.

Voir aussi scale() et rotate().

QMatrix4x4 QMatrix4x4::transposed() const

Renvoie cette matrice, transposée sur sa diagonale.

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

Multiplie cette matrice par une autre qui effectue la transformation d'échelle et de biais utilisée par OpenGL pour transformer les coordonnées normalisées de l'appareil (NDC) en coordonnées de la fenêtre. En d'autres termes, elle fait correspondre les points du cube situés sur [-1, 1] dans chaque dimension à la fenêtre dont le coin inférieur gauche se trouve à (left, bottom, nearPlane) et dont la taille est (width, height, farPlane - nearPlane).

Cela correspond à la transformation utilisée par la fonction fixe OpenGL viewport transform contrôlée par les fonctions glViewport() et glDepthRange().

void QMatrix4x4::viewport(const QRectF &rect)

Configure la transformation de la fenêtre de visualisation délimitée par rect et dont les valeurs near et far sont respectivement 0 et 1.

Il s'agit d'une fonction surchargée.

QMatrix4x4::operator QVariant() const

Retourne la matrice sous forme de QVariant.

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

Renvoie true si cette matrice n'est pas identique à other; faux sinon. Cet opérateur utilise une comparaison exacte en virgule flottante.

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

Renvoie une référence à l'élément situé à la position (row, column) dans cette matrice, de sorte que l'élément puisse être affecté.

Voir aussi optimize(), setColumn() et setRow().

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

Renvoie une référence constante à l'élément situé à la position (row, column) dans cette matrice.

Voir aussi column() et row().

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

Multiplie le contenu de other par cette matrice.

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

Multiplie tous les éléments de cette matrice par factor.

Il s'agit d'une fonction surchargée.

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

Ajoute le contenu de other à cette matrice.

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

Soustrait le contenu de other de cette matrice.

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

Divise tous les éléments de cette matrice par divisor.

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

Renvoie true si cette matrice est identique à other; faux sinon. Cet opérateur utilise une comparaison exacte en virgule flottante.

Non-membres apparentés

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

Renvoie true si m1 et m2 sont égaux, en tenant compte d'un petit facteur de flou pour les comparaisons en virgule flottante ; faux dans le cas contraire.

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

Renvoie le produit de m1 et m2.

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

Renvoie le résultat de la transformation de vector en fonction de matrix, avec le prévecteur appliqué à la matrice.

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

Renvoie le résultat de la multiplication de tous les éléments de matrix par factor.

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

Renvoie le résultat de la transformation de point en fonction de matrix, avec la matrice appliquée après le point.

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

Renvoie le résultat de la transformation de point en fonction de matrix, avec la matrice appliquée après le point.

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

Renvoie le résultat de la transformation de vector en fonction de matrix, la matrice étant appliquée après le vecteur.

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

Renvoie le résultat de la multiplication de tous les éléments de matrix par factor.

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

Renvoie la somme de m1 et m2.

QMatrix4x4 operator-(const QMatrix4x4 &matrix)

Renvoie la négation de matrix.

Il s'agit d'une fonction surchargée.

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

Renvoie la différence entre m1 et m2.

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

Renvoie le résultat de la division de tous les éléments de matrix par divisor.

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

Écrit la donnée matrix dans la donnée stream et renvoie une référence au flux.

Voir aussi Serializing Qt Data Types (Sérialisation des types de données Qt).

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

Lit une matrice 4x4 de l'adresse stream dans l'adresse matrix et renvoie une référence au flux.

Voir aussi Serializing Qt Data Types (Sérialisation des types de données 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.