我正在編寫用於使用opengl圖形的數學類,它使用列主矩陣排序。這是作業。OpenGL的列主要順序
對於mat3(我的矩陣3x3類),以及其他矩陣類,我想出了使用聯合符號來描述矩陣數據。現在我擔心我的訂購是錯誤的(例如,列主要而不是列主要)。
#define real float
union
{
real _data[9];
struct
{
real _11; real _12; real _13;
real _21; real _22; real _23;
real _31; real _32; real _33;
};
struct
{
real _a; real _b; real _c;
real _d; real _e; real _f;
real _g; real _h; real _i;
};
};
我應該改爲書面第二個結構如下:
struct
{
real _11; real _21; real _31;
real _12; real _22; real _32;
real _13; real _23; real _33;
};
這會不會影響的順序爲:
struct
{
real _a; real _d; real _g;
real _b; real _e; real _h;
real _c; real _f; real _i;
};
進一步,我應該如下寫第一個結構矩陣乘法或其他數學運算(行列式,反轉,轉置...)?例如。目前,我的MAT3乘法函數如下:
mat3 operator * (const mat3 & l, const mat3 & r)
{
// matrix matrix multiply
return mat3(
((l._11 * r._11) + (l._12 * r._21) + (l._13 * r._31)),
((l._11 * r._12) + (l._12 * r._22) + (l._13 * r._32)),
((l._11 * r._13) + (l._12 * r._23) + (l._13 * r._33)),
((l._21 * r._11) + (l._22 * r._21) + (l._23 * r._31)),
((l._21 * r._12) + (l._22 * r._22) + (l._23 * r._32)),
((l._21 * r._13) + (l._22 * r._23) + (l._23 * r._33)),
((l._31 * r._11) + (l._32 * r._21) + (l._33 * r._31)),
((l._31 * r._12) + (l._32 * r._22) + (l._33 * r._32)),
((l._31 * r._13) + (l._32 * r._23) + (l._33 * r._33))
);
}
這是我的理解,這個問題困惑了很多人。我認爲,在閱讀了關於這個主題的教科書之後,不得不坐在IDE的前面寫下課程,這兩個主題很少會被共同使用。