我想实现在一个Texture2D高斯模糊,并有麻烦试图找到任何好的教程等试图让高斯模糊强/越模糊 - XNA 4.0 HLSL
我终于设法找到这是一段很好的一遍示例代码,它明显地使图像模糊一点点,但是我希望能够使它随着时间的推移变得更模糊,更不易模糊,而且我不太了解高斯模糊如何实现这一点。
我想它必须是与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();
}
}
看看[3D Graphics with XNA Game Studio 4.0](http://www.google.co.il/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCQQFjAB&url=http%3A %2F%2Fvrac.castelbrazelbub.net%2FGentoomen%2520Library%2FComputer%2520Graphics%2FPackt .-。3D.Graphics.with.XNA.Game.Studio.4.0.pdf&EI = U5x1UKqQBsjMsgaZ14CIAg&USG = AFQjCNHTf0gc6mssUlaDwZ5OYmpRwQKICA&SIG2 = 8o0V0d2yKGZ_lXhLos8-ZA及CAD = RJA),第2章&8,特别是第214页。 –
要获得任何强/宽和正确的模糊,你将需要一个2通效果。一次通过不能采样足够的像素(当然不能足够快);两次通过将复杂度从n^2降低到2n,允许更大的采样区域和更强的模糊。 – ssube
啊好的@peachykeen谢谢你的回复,我听说2-pass的方式更高效,更好,但我找不到任何地方的好教程/例子 - 特别是对于HLSL(因为我还没有完成多通道的东西在HLSL之前)。 – poncho