Tex2D returns 在 HLSL 中偏离像素中心时的内插值
Tex2D returns interpolated values when off pixel center in HLSL
Tex2D 函数 returns 在偏离像素中心(例如 (0.5, 0.5))时插值,当你有像 1920x1080 这样的大纹理时,这确实是个问题。
我有一个 HLSL 像素着色器,它首先对小图像进行采样,然后计算大查找中的相应像素 table (1920x1080) 并对其进行采样。问题是浮点精度误差使得无法击中像素死点,因此它 returns 一种颜色是用相邻像素插值的。
我该如何解决这个问题?我可以将它设置为不在采样器中插值吗?
编辑:
显然我可以使用内部函数 tex2Dproj,其中我预先将 x 和 y 坐标除以 1.92 和 1.08,然后将 1000 作为 t.w 参数传递,以避免任何重大的浮点精度错误。但我必须这样做似乎很奇怪。
采样器过滤器的默认值是 LINEAR,使其进行插值。要在不进行插值的情况下制作纹理样本,您需要这样做:
texture2D ColorMap;
sampler2D ColorMapSampler = sampler_state
{
texture = <ShadowMap>;
AddressU = clamp;
AddressV = clamp;
magfilter = POINT;
minfilter = POINT;
mipfilter = POINT;
};
让我感到困惑的是,我只有这个纹理有这个问题。我正在使用 MonoGame 并将 SamplerState 设置为着色器外部的 PointClamp,但仅针对第一个纹理 GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
。如果您有多个纹理,最好为着色器中的每个纹理显式声明它。
Tex2D 函数 returns 在偏离像素中心(例如 (0.5, 0.5))时插值,当你有像 1920x1080 这样的大纹理时,这确实是个问题。
我有一个 HLSL 像素着色器,它首先对小图像进行采样,然后计算大查找中的相应像素 table (1920x1080) 并对其进行采样。问题是浮点精度误差使得无法击中像素死点,因此它 returns 一种颜色是用相邻像素插值的。
我该如何解决这个问题?我可以将它设置为不在采样器中插值吗?
编辑:
显然我可以使用内部函数 tex2Dproj,其中我预先将 x 和 y 坐标除以 1.92 和 1.08,然后将 1000 作为 t.w 参数传递,以避免任何重大的浮点精度错误。但我必须这样做似乎很奇怪。
采样器过滤器的默认值是 LINEAR,使其进行插值。要在不进行插值的情况下制作纹理样本,您需要这样做:
texture2D ColorMap;
sampler2D ColorMapSampler = sampler_state
{
texture = <ShadowMap>;
AddressU = clamp;
AddressV = clamp;
magfilter = POINT;
minfilter = POINT;
mipfilter = POINT;
};
让我感到困惑的是,我只有这个纹理有这个问题。我正在使用 MonoGame 并将 SamplerState 设置为着色器外部的 PointClamp,但仅针对第一个纹理 GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
。如果您有多个纹理,最好为着色器中的每个纹理显式声明它。