QMatrix4x4 Class

QMatrix4x4 クラスは、3D 空間の 4x4 変換行列を表します。詳細...

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

パブリックタイプ

flags Flags

パブリック関数

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)
QVariant 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
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)

詳細説明

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 行の 4x4 行列を構築する.matrix の列数または行数が 4 未満の場合,残りの要素は単位行列の要素で埋められる.

toGenericMatrix()も参照

QMatrix4x4::QMatrix4x4(const QTransform &transform)

従来の Qt 2D 変換行列transform から 4x4 行列を構築します.

transform が特殊な型(identity, translate, scale など)を持つ場合,QMatrix4x4 にtranslate() やscale() などへの呼び出しを最適化させたいのであれば,プログラマはこのコンストラクタの後にoptimize() を呼び出す必要があります.

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

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

与えられた 16 個の浮動小数点型values から行列を構築する.配列values の内容は,行長順であると仮定される.

行列が特殊な型(identity, translate, scale など)を持つ場合, 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 個の要素から行列を構築する。要素は行の長さ順に指定される。

行列が特殊な型(identity, translate, scale など)を持つ場合, 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)

この matrx のすべての要素を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() が 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

point w 座標を 1.0 と仮定して 4 次元ベクトルに拡張した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 をマップします.返される矩形は,水平軸と垂直軸に平行な辺を持つ,通常の 2 次元の矩形となります.

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

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

マップvector この行列の一番上の 3x3 の部分に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), および指定されたnearPlanefarPlane のクリッピング平面を持つウィンドウに対して正射投影を適用する別の行列で乗算します。

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)

この行列に、透視投影を適用した別の行列を掛け合わせる。垂直方向の視野は、水平方向の視野を決定する指定されたaspectRatio のウィンドウ内でverticalAngle 度となる。投影は、ビューアから対応する平面までの距離である、指定されたnearPlanefarPlane のクリッピング平面を持ちます。

ortho() およびfrustum()も参照

void QMatrix4x4::rotate(const QQuaternion &quaternion)

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

scale(),translate(),QQuaternionも参照してください

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

この行列に,座標をvector に対してangle 度回転させる別の行列を掛け合わせる.

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)

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

この行列を,成分xyz によって座標をスケーリングする別の行列と乗算します.

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

4x4 行列の左から N 列,上から M 行から NxM の汎用行列を構成する.N または M が 4 より大きい場合,残りの要素は恒等行列の要素で埋められます.

QTransform QMatrix4x4::toTransform() const

この行列に対応する,従来の Qt 2D 変換行列を返します.

返されるQTransform は,単にQMatrix4x4 の 3 行目と 3 列目を削除したものです.これは,z 座標を投影するのではなく,z 座標を削除する必要がある正射投影を実装するのに適しています.

QTransform QMatrix4x4::toTransform(float distanceToPlane) const

この行列に対応する従来の Qt 2D 変換行列を返します。

distanceToPlane が 0 ではない場合、z 座標を調整するために使用する射影係数を示します。値 1024 は,QTransform::rotate ()によって x 軸と y 軸に対して使用される射影係数に対応します.

distanceToPlane が 0 の場合,返されるQTransform は,QMatrix4x4 の 3 行目と 3 列目を単純に削除したものになります.これは,z 座標を投影するのではなく,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)

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

この行列を,成分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]の範囲にある立方体から、左下隅に近い点を(left,bottom,nearPlane)、サイズを(width,height,farPlane -nearPlane)とするビューポートに点をマッピングします。

これは、関数glViewport()とglDepthRange()によって制御される固定関数OpenGLビューポート変換で使用される変換と一致します。

void QMatrix4x4::viewport(const QRectF &rect)

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

rect で囲まれ、near と far がそれぞれ 0 と 1 に設定されているビューポートのビューポート変換を設定します。

QVariant 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 を返す.この演算子は,正確な浮動小数点型の比較を行います.

関連する非会員

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

m1m2 の積を返す。

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

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

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

matrix の全要素にfactor を掛けた結果を返す。

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

matrix に従ってpoint を変換した結果を返す。

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

matrix に従ってpoint を変換した結果を返す。

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

matrix に従ってvector を変換した結果を、行列をポストベクトルに適用して返します。

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

matrix の全要素にfactor を掛けた結果を返す。

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

m1m2 の和を返す。

QMatrix4x4 operator-(const QMatrix4x4 &matrix)

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

matrix の否定を返します。

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

m1m2 の差を返す。

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

matrix の全要素をdivisor で割った結果を返す。

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

与えられたstream に与えられたmatrix を書き込み、ストリームへの参照を返します。

Qt データ型のシリアライズも参照してください

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

与えられたstream から、与えられたmatrix に 4x4 の行列を読み込み、そのストリームへの参照を返します。

Qt データ型のシリアライズも参照してください

© 2025 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.