我試圖按照他們的示例實現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);
}
但由於某種原因,圖像顯示方式與通常一樣,沒有任何影響。我也沒有得到任何錯誤。有誰知道爲什麼模糊效果不顯示?
我想象你還需要一個頂點着色器(除非SFML默認自己的頂點着色器,如果沒有提供)。 sd :: Shader :: loadFromFile()是否返回true? – Homar
根據他們的教程,您只能使用一種類型的着色器。我將檢查loadFromFile以查看它是否有效。 – user3141607