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] 删除。
我来说两句