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);
 }

しかし、何らかの理由で、すべて 1 つの単色で画像が表示されます。

ぼかしのない画像は次のとおりです。

ブレない

いわゆるぼかしのある画像は次のとおりです。

ぼかしあり

私はここで何が間違っているのか考えていますか?

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 に答える