QMatrix4x4 Class

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

Header: #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 2 次元変換行列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)

16 個の要素m11,m12,m13,m14,m21,m22,m23,m24,m31,m32,m33,m34,m41,m42,m43, およびm44 から行列を構築する.要素は行の長さ順に指定される。

行列が特殊な型(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

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

この行列の上の 3x3 の部分にvector を乗じることで,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 座標を投影するのではなく,削除する必要がある正投影法を実装するのに適しています.

void QMatrix4x4::translate(const QVector3D &vector)

この行列に,座標をvector の成分で変換する別の行列を掛け合わせます。

scale() およびrotate()も参照

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

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

この行列に,座標をxy の成分で変換する別の行列を乗じます.

scale() およびrotate() も参照

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

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

この行列に,成分xy ,および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 に設定したビューポートのビューポート変換を設定します。

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)

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

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

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

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

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

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。