在 HLSL 中偏离像素中心时,Tex2D 返回插值

马丁

Tex2D 函数在偏离像素中心时返回插值值(例如 (0.5, 0.5)),当您拥有像 1920x1080 这样的大纹理时,这确实是一个问题。

我有一个 HLSL 像素着色器,它首先对小图像进行采样,然后在大型查找表 (1920x1080) 中计算相应的像素并对其进行采样。问题是浮点精度错误使得不可能达到像素死点,因此它返回与相邻像素插值的颜色。

我怎样才能克服这个问题?我可以将它设置为不在采样器中进行插值吗?

编辑:

显然,我可以使用内部函数 tex2Dproj,其中我预先将 x 和 y 坐标除以 1.92 和 1.08,然后传入 1000 作为 tw 参数以避免任何显着的浮点精度错误。但我必须这样做似乎很奇怪。

马丁

采样器过滤器的默认值为 LINEAR 使其进行插值。要在不插值的情况下制作纹理样本,您需要执行以下操作:

texture2D ColorMap;
sampler2D ColorMapSampler = sampler_state
{
    texture = <ShadowMap>;
    AddressU = clamp;
    AddressV = clamp;
    magfilter = POINT;
    minfilter = POINT;
    mipfilter = POINT;
};

让我绊倒的是我只有这个纹理有这个问题。我正在使用 MonoGame 并在着色器外将 SamplerState 设置为 PointClamp ,但仅适用于第一个 texture GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;如果您有多个纹理,最好为着色器中的每个纹理显式声明它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章