gpt4 book ai didi

matrix - 转换序列 : Projective Texturing (HLSL)

转载 作者:行者123 更新时间:2023-12-04 15:26:31 28 4
gpt4 key购买 nike

当我阅读 this article on Projective Texturing (9.3.2)在 nvidia 上,我遇到了这张图:


(来源:nvidia.com)

转换的编写顺序让我感到困惑。这是因为我学会了从左到右阅读矩阵乘法,还因为我认为转换顺序应该按以下顺序进行:


(来源:nvidia.com)

现在我的问题如下:

因为矩阵乘法不是可交换的,所以我应该按什么顺序进行乘法?

而如果确实和普通物体的变换顺序是一样的,那为什么要这样写呢?

通过相同的顺序,我的意思是这样的 hlsl 代码:

float4 worldPosition        = mul(input.Position, World);
float4 viewPosition = mul(worldPosition, View);
output.Position = mul(viewPosition, Projection);

最后(这是可选的,但可能对其有相同疑问的其他人有用),您将如何编写 HLSL 代码来执行此投影纹理乘法,或者如果您通过 XNA 传递完整的矩阵,您将如何进行转换。

最佳答案

您的转换可以象征性地写为

y = T P V W x

在哪里:

x = (x0, y0, z0, w0)T:物体坐标(列向量4x1)
= (s, t, r, q)T:窗口空间坐标(列向量 4x1)
:世界建模矩阵(4x4)
:查看建模矩阵(4x4)
电话 :投影矩阵(4x4)
电话 :视口(viewport)变换矩阵(4x4)

计算如下:

y = T (P (V (W x)))

即从右到左。 HLSL 代码为:

float4 worldPosition  = mul(World, input.Position);     // W x
float4 viewPosition = mul(View, worldPosition); // V (W x)
float4 projPosition = mul(Projection, viewPosition); // P (V (W x))
float4 vportPosition = mul(Viewport, projPosition); // T (P (V (W x)))

关于matrix - 转换序列 : Projective Texturing (HLSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559304/

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