我想實現在一個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