【发布时间】:2014-07-11 13:36:10
【问题描述】:
我正在尝试按照他们的示例实现 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);
}
但由于某种原因,图像显示正常,没有任何效果。我也没有收到任何错误。有谁知道为什么不显示模糊效果?
【问题讨论】:
-
我想你还需要一个顶点着色器(除非 SFML 默认为它自己的顶点着色器,如果没有提供的话)。 sd::Shader::loadFromFile() 是否返回 true?
-
根据他们的教程,您只能使用一种着色器。我会检查 loadFromFile 看看它是否有效。