gpt4 book ai didi

c++ - SFML 模糊着色器显示无效果

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:11 25 4
gpt4 key购买 nike

我正在尝试按照他们的示例实现 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 一无所知,但我看起来你的 blur_radius 没有选择好。您的图像大小为 100x100,您的模糊着色器以 200px (blur_radius) 的距离对图像进行采样。因此,如果您的纹理启用了 gl_repeat,则您击中的像素与原始像素完全相同。 -> 没有模糊

尝试使用较低的 blur_radius 大约 2-5

关于c++ - SFML 模糊着色器显示无效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24699078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com