前提

当谈论线性存储器中的“Column Major”矩阵时,列是一个接一个地指定的,因此存储器中的前4个条目对应于矩阵中的第一列。另一方面,“行主要”矩阵被理解为依次指定行,从而存储器中的前4个条目指定矩阵的第一行。
GLKMatrix4看起来像这样:

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成员上的documentation说:



前提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,但是将“行”定义为垂直,而将“列”定义为水平似乎很奇怪。有人可以解释吗?

最佳答案

声明有点困惑,但是矩阵按列的主要顺序排列。结构中的四行代表矩阵中的列,其中m0 *为第0列,m3 *为第3列。这很容易验证,只需创建一个转换矩阵并检查转换组件的值m30,m31和m32即可。

我猜想您的困惑来自于这样一个事实,即结构实际上将浮点数表示为列时,它们将它们按行排列。

关于c - GLKit的GLKMatrix “Column Major”怎么样?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9688509/

10-09 04:57