Tex2D函数在偏离像素中心(例如((0.5,0.5)))时返回插值,当您具有1920x1080之类的大纹理时,这确实是一个问题。
我有一个HLSL像素着色器,它首先对一幅小图像进行采样,然后在一个大的查找表(1920x1080)中计算相应的像素并对其进行采样。问题在于,浮点精度误差使得无法击中像素死点,因此它返回的颜色是与相邻像素插值的。
我该如何克服这个问题?我可以将其设置为不在采样器中插值吗?
编辑:
显然,我可以使用内部函数tex2Dproj,在该函数中,我将x和y坐标预先除以1.92和1.08,然后将1000作为t.w参数传递,以避免任何明显的浮点精度错误。但是我似乎必须这样做很奇怪。
答案 0 :(得分:0)
采样器过滤器的默认值为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;
。如果您有多个纹理,最好为着色器中的每个纹理明确声明它。