为什么我们需要使用"转置"变换矩阵? (direct3D11)

时间:2015-07-19 18:15:45

标签: c++ matrix direct3d11

我已经阅读了SimpleMath并阅读了Programmers guide文章,但我似乎无法将目标转移到已经转换过矩阵的目的上。转化"

我的意思是,我理解矩阵的转置是什么。我只是不明白为什么我们需要实际进行转置。

以此代码段为例..(假设已经为CameraViewCameraProjection创建了矩阵)

World = XMMatrixIdentity();                             

WVP = World * CameraView * CameraProjection;

XMMatrixTranspose(WVP)      

所以我的问题是,获得WVP转置的目的是什么?这为Direct3D 11服务的目的是什么?

1 个答案:

答案 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着色器按列主要顺序。