Я пытаюсь реализовать размытие по Гауссу с помощью матрицы свертки на моем шейдере.
Вот код, который у меня есть:
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);
}
но по какой-то причине я получаю картинку в одном сплошном цвете.
Вот изображение без размытия:
Вот изображение с так называемым размытием:
Любая идея о том, что я делаю не так здесь?
Попробуйте изменить 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)
};
После этого изменения вы не увидите пустое изображение на выходе !!!
Других решений пока нет …