DirectX12 mips 奇数大小的纹理 mips 生成

问题描述

目前正在尝试为我分解这篇文章https://www.3dgep.com/learning-directx-12-4/。无法理解奇数大小的情况。文章中展示的采样图案图不是我自己画的。文章中的图片看起来像他们显示的第二个样本,好像它被计算为 UV1 +(0.75,0),但实际上它是 UV1+(0.5,0)。

我的图案图像是否正确而文章中的图像不正确?

My image of the sampling,odd width case

解决方法

文章中的图片实际上是正确的(例如,它与他们提供的代码匹配)。您的图片有两个错误,这就是它看起来不同的原因:

  • (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。按纹理大小缩放只是使绘制更容易:)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...