我已经阅读了SimpleMath并阅读了Programmers guide文章,但我似乎无法将目标转移到已经转换过矩阵的目的上。转化"
我的意思是,我理解矩阵的转置是什么。我只是不明白为什么我们需要实际进行转置。
以此代码段为例..(假设已经为CameraView
和CameraProjection
创建了矩阵)
World = XMMatrixIdentity();
WVP = World * CameraView * CameraProjection;
XMMatrixTranspose(WVP)
所以我的问题是,获得WVP
转置的目的是什么?这为Direct3D 11服务的目的是什么?
答案 0 :(得分:2)
首先,让我们看看矩阵如何在内存中表示。考虑以下矩阵。
1 2 3
4 5 6
7 8 9
存储在计算机内存中的所有值都是按顺序存储的,没有" row"和"列",只有地址。如果您在行主要顺序中表示上面的矩阵,矩阵中的浮点值将线性存储在内存中,如下所示:
最低地址[1 2 3 4 5 6 7 8 9]最高地址
另一方面,如果您在列主要顺序中表示相同的矩阵,矩阵中的浮点值将存储在内存中,如下所示:
最低地址[1 4 7 2 5 8 3 6 9]最高地址
因此,在行 - 主要顺序中,行的连续值在内存中是连续的,而在列 - 主要顺序中,连续值为列在内存中是连续的。
现在,HLSL要求你的矩阵以列主顺序提供,但是DirectXMath以行主顺序存储它的矩阵,因为它的实现方式更快,所以你必须转置它以便它被送入HLSL着色器按列主要顺序。