前提A
線形メモリの「列メジャー」行列について話すとき、メモリの最初の4つのエントリが行列の最初の列に対応するように、列が次々に指定されます。一方、「行メジャー」行列は、メモリ内の最初の4つのエントリが行列の最初の行を指定するように、行を次々に指定すると理解されます。
AGLKMatrix4
は次のようになります。
union _GLKMatrix4
{
struct
{
float m00, m01, m02, m03;
float m10, m11, m12, m13;
float m20, m21, m22, m23;
float m30, m31, m32, m33;
};
float m[16];
}
typedef union _GLKMatrix4 GLKMatrix4;
メンバーのドキュメントには次のように書かれています。m
列優先順の行列要素の1次元配列。
構内B
GLKMatrix4の「行」は、水平方向に宣言された4つのフロートのセットです([m00, m01, m02, m03]
最初の「行」になります)。したがって、これらのエントリはmRowColとして解釈できます(m12
行1、列2のエントリになります)。
これらのGLKMatrix構造体メンバーが宣言の順序に基づいてどのように配置されているかを見ると、次のようになります。
[m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, ...]
最初の4つのエントリは、最初の列ではなく、マトリックスの最初の行を明確に表しています。
結論
m
実際には列メジャーではなく、ドキュメントが間違っています。
さて、私は実際には結論を信じていないことに注意する必要がありますが、2つの前提はかなり合理的であるように思われます。本当に、私は前提Bを最も信用していませんが、「行」を垂直に、「列」を水平に定義するのは奇妙に思えます。誰かがこれを説明できますか?