最佳答案
我完全搞不懂矩阵的定义。我有一个矩阵类,它包含一个 float[16]
,我假设它是行主要的,基于以下观察:
float matrixA[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
float matrixB[4][4] = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } };
matrixA
和 matrixB
在内存中都有相同的线性布局(即所有数字都是有序的)。根据 http://en.wikipedia.org/wiki/Row-major_order,这表明一个行主要的布局。
matrixA[0] == matrixB[0][0];
matrixA[3] == matrixB[0][3];
matrixA[4] == matrixB[1][0];
matrixA[7] == matrixB[1][3];
因此,matrixB[0]
= row 0,matrixB[1]
= row 1,等等。
当我创建一个翻译矩阵时,我的问题/困惑来了,它看起来像:
1, 0, 0, transX
0, 1, 0, transY
0, 0, 1, transZ
0, 0, 0, 1
在内存中设置为 { 1, 0, 0, transX, 0, 1, 0, transY, 0, 0, 1, transZ, 0, 0, 0, 1 }
。
然后,当我调用 GlUniformMatrix4fv时,我需要将转置标志设置为 GL _ FALSE,表明它是列主要的,否则诸如平移/缩放等转换不能正确应用:
如果转置为 GL _ FALSE,则假定每个矩阵都在 如果转置为 GL _ TRUE,则假定每个矩阵为 按行大订单提供。
为什么我的矩阵,看起来是行主要的,需要传递给 OpenGL 作为列主要的?