gpt4 book ai didi

c++ - 为什么我们需要使用转换矩阵的 "transpose"? (direct3D11)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:07 36 4
gpt4 key购买 nike

我已阅读 SimpleMath并阅读 Programmers guide文章,但我似乎无法理解矩阵“转换”后转置矩阵的目的

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

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

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 ] 最高地址

所以在-major order中,rows的连续值在内存中是连续的,而在column-major order中,连续值在内存中是连续的。

现在,HLSL 要求您的矩阵以列优先顺序提供,但 DirectXMath 以行优先顺序存储它的矩阵,因为这样它的实现速度更快,所以您必须转置它以便它被馈送以列优先顺序进入 HLSL 着色器。

更正:

HLSL 默认以列优先顺序获取矩阵,但 DirectXMath 以行优先顺序存储其矩阵,因为它的实现速度更快,因此一种解决方案是转置矩阵,以便将它们馈送到 HLSL 着色器中列主要顺序。或者,您可以覆盖此默认值,以便 HLSL 以行优先顺序获取您的矩阵,然后您就不必转置它们。

关于c++ - 为什么我们需要使用转换矩阵的 "transpose"? (direct3D11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504378/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com