Opengl 如何添加垂直高斯模糊

Opengl 如何添加垂直高斯模糊,opengl,glsl,Opengl,Glsl,这是我的片段着色器代码,我将高斯模糊应用于纹理2D图像 vec3 incrementalGaussian; incrementalGaussian.x = 1.0f / (sqrt(2.0f * pi) * BlurValue ); incrementalGaussian.y = exp(-0.5f / (BlurValue * BlurValue )); incrementalGaussian.z = incrementalGaussian.y * incrementalGaussian.

这是我的片段着色器代码,我将高斯模糊应用于纹理2D图像

vec3 incrementalGaussian;
incrementalGaussian.x = 1.0f / (sqrt(2.0f * pi) * BlurValue  );
incrementalGaussian.y = exp(-0.5f / (BlurValue  * BlurValue ));
incrementalGaussian.z = incrementalGaussian.y * incrementalGaussian.y;
 vec4 avgValue = vec4(0.0f, 0.0f, 0.0f, 0.0f);
float coefficientSum = 0.0f;

// Take the central sample first...
avgValue += texture2D(text, TexCoords.st) * incrementalGaussian.x;
coefficientSum += incrementalGaussian.x;
incrementalGaussian.xy *= incrementalGaussian.yz;

//Go through the remaining 8 vertical samples (4 on each side of the center)

for (float i = 1.0f; i <= numBlurPixelsPerSide ; i++) { 
    avgValue += texture2D(text, TexCoords.st - i * 0.01f * 
               blurMultiplyVec) * incrementalGaussian.x;         
    avgValue += texture2D(text, TexCoords.st + i * 0.01f * 
                blurMultiplyVec) * incrementalGaussian.x;         
    coefficientSum += 2 * incrementalGaussian.x;
    incrementalGaussian.xy *= incrementalGaussian.yz;
avgValue.g = avgValue.r;
avgValue.b = avgValue.r;
color =  avgValue * vec4(textColor, 1.0)  / coefficientSum ;
}  
vec3递增阿尔高辛;
增量algaussian.x=1.0f/(sqrt(2.0f*pi)*模糊值);
增量algaussian.y=exp(-0.5f/(模糊值*模糊值));
incrementalGaussian.z=incrementalGaussian.y*incrementalGaussian.y;
vec4平均值=vec4(0.0f,0.0f,0.0f,0.0f);
浮动系数总和=0.0f;
//先取中心样本。。。
avgValue+=texture2D(text,TexCoords.st)*递增algaussian.x;
coefficientSum+=增量algaussian.x;
incrementalGaussian.xy*=incrementalGaussian.yz;
//检查剩余的8个垂直样本(中心每侧4个)

对于(float i=1.0f;i一般来说,高斯模糊使用两次。对于垂直模糊,您必须添加第二次。首先进行水平模糊,然后对结果应用垂直模糊

对于水平模糊,纹理坐标的u分量将被置换:


用于(float i=1.0f;我有一个问题,如果我们想对场景应用模糊,然后将其渲染到帧缓冲区,并从中创建纹理,然后将其传递到着色器。对于纹理,我们不必将其渲染到帧缓冲区。如何对纹理进行多次传递。与此相同,LearnOpenGL.com-高斯模糊在图像上进行,而不是在图像上进行场景。@shomit第一遍将纹理渲染为新纹理,第二遍将纹理渲染为场景。