Размытие по Гауссу с матрицей свертки на шейдере

Я пытаюсь реализовать размытие по Гауссу с помощью матрицы свертки на моем шейдере.

Вот код, который у меня есть:

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

но по какой-то причине я получаю картинку в одном сплошном цвете.

Вот изображение без размытия:

не размытие

Вот изображение с так называемым размытием:

с размытием

Любая идея о том, что я делаю не так здесь?

0

Решение

Попробуйте изменить 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)
};

После этого изменения вы не увидите пустое изображение на выходе !!!

1

Другие решения

Других решений пока нет …