0

我正在尝试在我的着色器上使用卷积矩阵实现高斯模糊。

这是我的代码:

float4 ppPS(float2 uv : TEXCOORD0, uniform sampler2D t1) : COLOR { 
  //kernel matrix
  float3x3 kernel={1*(1/16),2*(1/16),1*(1/16),
  2*(1/16),4*(1/16),2*(1/16),
  1*(1/16),2*(1/16),1*(1/16)
  };

  int x,y;
  float2 sum = 0;
  for (x = -1; x <= 1; x++)
  {
    for (y = -1; y <= 1; y++)
    {
      float2 fl;
      fl.x = uv.x+x;
      fl.y = uv.y+y; 
      sum += (fl)*(kernel[x+1][y+1]);
    }
  }
  return tex2D(t1, sum);
 }

但出于某种原因,我得到了一张全是纯色的照片。

这是没有模糊的图像:

非模糊

这是具有所谓模糊的图像:

有模糊

知道我在这里做错了什么吗?

4

1 回答 1

1

尝试将float3x3初始化值更改为浮点格式(.0f),否则所有值将最终为 0。

 //kernel matrix
 static const float3x3 kernel={1*(1.0f/16.0f),2*(1.0f/16.0f),1*(1.0f/16.0f),
 2*(1.0f/16.0f),4*(1.0f/16.0f),2*(1.0f/16.0f),
 1*(1.0f/16.0f),2*(1.0f/16.0f),1*(1.0f/16.0f)
};

进行此更改后,您将看不到空白输出图像!!!

于 2013-10-19T19:59:55.527 回答