问题描述
目前正在尝试为我分解这篇文章:https://www.3dgep.com/learning-directx-12-4/。无法理解奇数大小的情况。文章中展示的采样图案图不是我自己画的。文章中的图片看起来像他们显示的第二个样本,好像它被计算为 UV1 +(0.75,0),但实际上它是 UV1+(0.5,0)。
我的图案图像是否正确而文章中的图像不正确?
解决方法
文章中的图片实际上是正确的(例如,它与他们提供的代码匹配)。您的图片有两个错误,这就是它看起来不同的原因:
- (0,0) 不是在左上角像素的中心,而是在该像素的左上角
- 文章中的代码按
TexelSize
缩放 UV 坐标,(在他们的代码中)是 目标 纹理大小的一个。因此,要获得图像的像素坐标,您必须将 0.25 和 0.75 乘以源纹理大小与目标纹理大小的比率。
例如,前两个样本(如果源纹理宽度为 9 像素)将是 (9 / 4) * 0.25 = 0.5625 和 (9 / 4) * 0.75 = 1.6875,所以在这两种情况下都会有点源图像中第一个和第二个像素的中心右侧。
请注意,如果您在着色器中对纹理进行采样,则不会将 UV 乘以您正在采样的纹理的大小,这就是为什么文章中的着色器代码只有 (1 / 4) * 0.25 和 (1 / 4) * 0.75。按纹理大小缩放只是使绘制更容易:)