c – 为什么我们需要使用转换矩阵的“转置”? (direct3D11)

我已经阅读了
SimpleMath并且还阅读了
Programmers guide文章,但是我似乎无法理解一旦它被“转换”后转置矩阵的目的

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

以此代码片段为例..(假设已经为CameraView和CameraProjection创建了矩阵)

World = XMMatrixIdentity();                             

WVP = World * CameraView * CameraProjection;

XMMatrixTranspose(WVP)      

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

最佳答案 首先,让我们看看矩阵如何在内存中表示.考虑以下矩阵.

1 2 3
4 5 6
7 8 9

存储在计算机存储器中的所有值都是按顺序存储的,没有“行”和“列”的概念,只有地址.如果以行 – 主顺序表示上面的矩阵,矩阵中的浮点值将线性存储在内存中,如下所示:

最低地址[1 2 3 4 5 6 7 8 9]最高地址

另一方面,如果以列主顺序表示相同的矩阵,矩阵中的浮点值将存储在内存中,如下所示:

最低地址[1 4 7 2 5 8 3 6 9]最高地址

因此,在行主要顺序中,行的连续值在内存中是连续的,而在列主要顺序中,列的连续值在内存中是连续的.

现在,HLSL要求你的矩阵以列主顺序提供,但DirectXMath以行主顺序存储它的矩阵,因为它的实现速度更快,所以你必须转置它以便它被送入列中的HLSL着色器 – 主要订单.

点赞