前提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
说:
以列优先顺序排列的矩阵元素的一维数组。
前提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
实际上不是 Column Major,并且文档是错误的。
现在,我应该指出,我实际上并不相信这个结论,但这两个前提似乎很合理。真的,我最不信任前提 B,但是将“行”定义为垂直而“列”定义为水平似乎很奇怪。有人可以解释一下吗?