このページでは

QMatrix4x4 Class

QMatrix4x4 クラスは、3次元空間における 4×4 の変換行列を表します。詳細...

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

パブリック関数

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 &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 が特殊なタイプ(単位行列、平行移動、拡大縮小など)である場合、QMatrix4x4にtranslate()やscale()などのその後の呼び出しを最適化させたいときは、このコンストラクタの後にoptimize()を呼び出す必要があります。

toTransform() およびoptimize()も参照してください 。

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

指定された16個の浮動小数点数values から行列を構築します。配列values の内容は、行主順であるものとみなされます。

行列が特殊な型(単位行列、平行移動、拡大縮小など)である場合、QMatrix4x4 にtranslate() やscale() などの呼び出しを最適化させたいときは、このコンストラクタの後にoptimize() を呼び出す必要があります。

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)

m11 、m12 、m13 、m14 、m21 、m22 、m23 、m24 、m31 、m32 、m33 、m34 、m41 、m42 、m43 、およびm44 の16個の要素から行列を構築します。要素は行優先順で指定されます。

行列が特殊な型(単位行列、平行移動、拡大縮小など)である場合、QMatrix4x4 にtranslate() やscale() などのその後の呼び出しを最適化させたいときは、このコンストラクタの後にoptimize() を呼び出す必要があります。

optimize()も参照してください 。

QVector4D QMatrix4x4::column(int index) const

列index の要素を4次元ベクトルとして返します。

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)、および指定されたクリッピング平面nearPlane およびfarPlane を持つウィンドウに対して、パースペクティブ・フラスタム投影を適用する別の行列を乗算します。

ortho() およびperspective()も参照してください 。

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

この行列の逆行列を返します。この行列が逆行列を持たない場合、つまりdeterminant()が0である場合は、単位行列を返します。invertible がNULLでない場合、行列に逆行列が存在すればその位置にtrueが書き込まれ、そうでない場合はfalseが書き込まれます。

行列が単位行列または直交正規行列であると認識された場合、この関数は最適化されたルーチンを使用して素早く行列の逆行列を求めます。

determinant() およびnormalMatrix()も参照してください 。

bool QMatrix4x4::isAffine() const

この行列がアフィン行列である場合は `true ` を返し、そうでない場合は `false` を返す。

アフィン行列とは、3行目が (0, 0, 0, 1) となる 4x4 の行列であり、例えば射影係数が存在しない行列のことです。

isIdentity()も参照してください 。

bool QMatrix4x4::isIdentity() const

この行列が単位行列である場合は `true ` を返し、そうでない場合は `false` を返します。

setToIdentity()も参照してください 。

void QMatrix4x4::lookAt(const QVector3D &eye, const QVector3D &center, 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

この行列に、w座標を1.0と仮定して4次元ベクトルに拡張したpoint を乗算することで、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 ` をマッピングします。返される矩形は、水平軸および垂直軸に平行な辺を持つ通常の 2D 矩形となります。

map()も参照してください 。

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

この行列を `rect ` の各角座標に乗算し、その結果から新しい矩形を形成することで、`rect ` をマッピングします。返される矩形は、水平軸および垂直軸に平行な辺を持つ通常の 2D 矩形となります。

map()も参照してください 。

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

vector は、この行列の上部の 3×3 領域にvector を乗算することで表現されます。この行列の並進成分と投影成分は無視されます。この行列はプレベクトルとして適用されます。

map()も参照してください 。

QMatrix3x3 QMatrix4x4::normalMatrix() const

この 4x4 変換に対応する法線行列を返します。法線行列は、この 4x4 行列の左上にある 3x3 部分行列の逆行列の転置です。3x3 部分行列が可逆でない場合、この関数は単位行列を返します。

inverted()も参照してください 。

void QMatrix4x4::optimize()

現在の要素から、この行列の使用法を最適化してください。

translate()、scale()、rotate() などの一部の演算は、変更対象の行列がすでに単位行列、以前のtranslate() の結果、または以前のscale() の結果であることが分かっている場合、より効率的に実行できます。

通常、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)

この行列に、透視投影を適用する別の行列を乗算します。垂直方向の視野角はverticalAngle 度となり、水平方向の視野角を決定する指定されたaspectRatio を持つウィンドウ内に収まります。投影には、指定されたnearPlane およびfarPlane のクリッピング面が設定され、これらは視聴者から対応する面までの距離を表します。

ortho() およびfrustum()も参照してください 。

void QMatrix4x4::rotate(const QQuaternion &quaternion)

この行列に、指定されたquaternion に従って座標を回転させる別の行列を乗算します。quaternion は正規化済みであると仮定します。

scale()、translate()、およびQQuaternionも参照してください 。

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)

この行列に、ベクトル (x,y,z) を軸として座標をangle 度回転させる別の行列を乗算します。

これはオーバーロードされた関数です。

scale() およびtranslate()も参照してください 。

QVector4D QMatrix4x4::row(int index) const

行index の要素を4次元ベクトルとして返します。

setRow() およびcolumn()も参照してください 。

void QMatrix4x4::scale(const QVector3D &vector)

この行列に、vector の成分を用いて座標をスケーリングする別の行列を掛け合わせます。

translate() およびrotate()も参照してください 。

void QMatrix4x4::scale(float factor)

この行列に、座標を指定されたfactor でスケーリングする別の行列を掛け合わせます。

これはオーバーロードされた関数です。

translate() およびrotate()も参照してください 。

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

この行列に、座標を成分x およびy でスケーリングする別の行列を乗算します。

これはオーバーロードされた関数です。

translate() およびrotate()も参照してください 。

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

この行列に、座標を成分x 、y 、およびz で拡大・縮小する別の行列を掛け合わせます。

これはオーバーロードされた関数です。

translate() およびrotate()も参照してください 。

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

列index の要素を、value の各構成要素に設定します。

column() およびsetRow()も参照してください 。

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

行index の要素を、value の各成分に設定します。

row() およびsetColumn()も参照してください 。

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 の3行目と3列目を単純に削除することで形成されます。これは、z座標を投影するのではなく削除すべき正射影を実装するのに適しています。

QTransform QMatrix4x4::toTransform(float distanceToPlane) const

この行列に対応する、Qtの標準的な2D変換行列を返します。

distanceToPlane が0以外の場合、z座標を調整するために使用する投影係数を示します。値1024は、QTransform::rotate()がx軸およびy軸に対して使用する投影係数に対応します。

distanceToPlane がゼロの場合、返されるQTransform は、QMatrix4x4 の3行目と3列目を単純に削除することで構成されます。これは、z座標を投影するのではなく削除すべき正投影を実装するのに適しています。

void QMatrix4x4::translate(const QVector3D &vector)

この行列に、vector の各成分分だけ座標を平行移動させる別の行列を乗算します。

scale() およびrotate()も参照してください 。

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

この行列に、座標を成分x およびy だけ平行移動させる別の行列を乗算します。

これはオーバーロードされた関数です。

scale() およびrotate()も参照してください 。

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

この行列に、座標を成分x 、y 、およびz だけ平行移動させる別の行列を掛け合わせます。

これはオーバーロードされた関数です。

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] の範囲にある立方体の点を、左下隅が (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) にある要素への定数参照を返します。

column() およびrow()も参照してください 。

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)

vector をmatrix に基づいて変換した結果を、行列を適用する前にベクトルとして返します。

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

matrix のすべての要素とfactor を乗算した結果を返します。

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

point を変換式matrix に基づいて変換した結果を、行列を点の後処理として適用して返します。

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

point をmatrix に基づいて変換した結果を、行列を点の後処理として適用して返します。

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

vector をmatrix に従って変換した結果を、行列をベクトルに後付けして適用した形で返します。

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 から指定されたmatrix へ4×4の行列を読み込み、そのストリームへの参照を返します。

「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.