Directx 卷积滤波器输出错误的颜色值

Directx 卷积滤波器输出错误的颜色值,directx,hlsl,directx-11,convolution,directcompute,Directx,Hlsl,Directx 11,Convolution,Directcompute,我刚刚开始学习DirectCompute,出于学习的目的,我想制作一个简单的卷积滤波器来模糊纹理。我编写了以下计算着色器来模糊纹理: Texture2D<float4> inputTex; RWTexture2D<float4> outputTex; [numthreads(32, 32, 1)] void main( uint3 DTid : SV_DispatchThreadID ) { float4 totalPixVal = float4( 0.0f,

我刚刚开始学习DirectCompute,出于学习的目的,我想制作一个简单的卷积滤波器来模糊纹理。我编写了以下计算着色器来模糊纹理:

Texture2D<float4> inputTex;
RWTexture2D<float4> outputTex;

[numthreads(32, 32, 1)]
void main( uint3 DTid : SV_DispatchThreadID )
{
    float4 totalPixVal = float4( 0.0f, 0.0f, 0.0f, 0.0f );
    for ( int y = -3; y < 3; ++y )
        for ( int x = -3; x < 3; ++x )
            totalPixVal += inputTex.Load( uint3(DTid.x + x, DTid.y + y, DTid.z) );

    totalPixVal = float4( totalPixVal.xyz / 49.0f, 1.0f );

    float4 inPix       = inputTex.Load( DTid );
    outputTex[DTid.xy] = totalPixVal;
}
该着色器获取当前像素及其48个相邻像素的平均颜色值,从而产生模糊效果

现在,模糊部分工作正常,但着色器输出的颜色似乎不正确。为了测试着色器,我使用了一个在黑色背景上具有纯白色形状的简单图像。我期望的输出是黑色背景上模糊的纯白色形状,但白色形状不再是白色,而是灰色。现在我已经检查了我的代码好几次,但我找不到问题所在。每个纹理的大小相同,为512x512像素

这是我的输入图像:

这是我得到的输出:

任何帮助都将不胜感激


谢谢:D

您只对36个像素求和,而不是49个像素。更改:

for ( int y = -3; y < 3; ++y )
    for ( int x = -3; x < 3; ++x )
for(int y=-3;y<3;++y)
对于(int x=-3;x<3;++x)
致:


for(int y=-3;y)啊,是的,你说得对。谢谢!我想我太专注于所有新的计算着色器(对我来说是新的),所以我完全忽略了这一点
for ( int y = -3; y < 3; ++y )
    for ( int x = -3; x < 3; ++x )
for ( int y = -3; y <= 3; ++y )
    for ( int x = -3; x <= 3; ++x )