SFML模糊着色器显示无效

时间:2014-07-11 13:36:11

标签: c++ opengl glsl sfml

我正在尝试按照他们的示例实现SFML着色器,但它没有显示出来。

GameObject是一个继承并实现sf::Drawable的类。在GameObject内,我有一个sf::Texture和一个sf::Sprite个对象,负责游戏对象的图像。我正在尝试对它应用模糊效果。这是我加载图像和着色器的.cpp:

x = new GameObject("Images/apple.png", 100, 100, 1, 1);
mshade.loadFromFile("Shaders/blur.frag", sf::Shader::Fragment);
mshade.setParameter("texture", *(x)->objectTexture);
mshade.setParameter("blur_radius", 200);

这就是我画画的方式:

gameWindow->draw(*x, &mshade);

这是用于创建模糊着色器的GLSL代码:

uniform sampler2D texture;
uniform float blur_radius;

void main()
{
    vec2 offx = vec2(blur_radius, 0.0);
    vec2 offy = vec2(0.0, blur_radius);

    vec4 pixel = texture2D(texture, gl_TexCoord[0].xy)               * 4.0 +
                 texture2D(texture, gl_TexCoord[0].xy - offx)        * 2.0 +
                 texture2D(texture, gl_TexCoord[0].xy + offx)        * 2.0 +
                 texture2D(texture, gl_TexCoord[0].xy - offy)        * 2.0 +
                 texture2D(texture, gl_TexCoord[0].xy + offy)        * 2.0 +
                 texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 +
                 texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 +
                 texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 +
                 texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0;

    gl_FragColor =  gl_Color * (pixel / 16.0);
}

但由于某种原因,图像显示正常,没有任何影响。我也没有得到任何错误。有谁知道为什么模糊效果没有出现?

2 个答案:

答案 0 :(得分:1)

我对SFML一无所知,但我看起来你的blur_radius没有很好的选择。 您的图像大小为100x100,而Blur-Shader采样距离为200px(blur_radius)。因此,如果您的纹理启用了gl_repeat,那么您将获得与原始纹理完全相同的像素。 - >没有模糊

尝试使用较低的blur_radius,可能是2-5左右

答案 1 :(得分:0)

在我的问题中:SFML shader not working我在这个问题上得到了帮助,我还要重新检查tntxtnt的答案,这可能会对你有所帮助。但基本上它会模糊纹理的轮廓,它只会模糊精灵内部的颜色。

相关问题