我已经阅读了
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着色器 – 主要订单.