我正在编写用于使用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的前面写下课程,这两个主题很少会被共同使用。