我正在尝试在 Texture2D 上实现高斯模糊,并且在尝试找到任何好的教程等时遇到了麻烦。
我终于设法找到了一段很好的一次性示例代码,它明显地模糊了图像一点点,但我希望能够随着时间的推移使它变得更模糊和更少模糊,我不太了解高斯模糊如何实现这一点。
我想这一定与 PixelKernel 和 BlurWeights 有关,但我真的不知道这些值的用途/改变它们的作用。
所以我的问题基本上是:
这是在 HLSL/XNA 中进行高斯模糊的好方法吗?如果是这样,我如何使场景更模糊?作为额外的奖励,您能否指出我对高斯模糊在着色器上下文中如何工作的一个很好的解释?
谢谢你的时间,
TS
附言
刚刚意识到我应该包括代码:
sampler2D Tex0;
float TintColour;
int TexHeight = 640;
int TexWidth = 480;
const int KernelSize = 7;
float2 PixelKernel[7] =
{
{-3, 0},
{-2, 0},
{-1, 0},
{0, 0},
{1, 0},
{2, 0},
{3, 0},
};
const float BlurWeights[7] =
{
0.064759,
0.120985,
0.176033,
0.199471,
0.176033,
0.120985,
0.064759,
};
struct VertexShaderOutput
{
float2 TexCoord0 : TEXCOORD0;
};
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
float4 colour = 0;
float2 TexSize = float2(1.0/TexHeight, 1.0/TexWidth);
for(int p = 0; p < 7; p++)
{
colour += tex2D(Tex0, input.TexCoord0 + (PixelKernel[p] * TexSize)) * BlurWeights[p];
}
colour.a = 1.0f;
return colour;
}
technique Technique1
{
pass Pass1
{
// TODO: set renderstates here.
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}