Ich versuche einen Outline-Effekt zu meinen Buttons zu erstellen, wenn sie angeklickt werden, aber atm Ich teste gerade Sachen mit Shadern ... wenn ich etwas mit meinem Shader zeichne, rendert es die Form komplett schwarzSFML Shader funktioniert nicht
#include <SFML\Graphics.hpp>
int main(){
sf::RenderWindow window(sf::VideoMode(500, 500), "hello world", sf::Style::Close);
sf::RectangleShape rect;
rect.setSize(sf::Vector2f(100, 100));
rect.setFillColor(sf::Color::Red);
sf::Shader blur;
if (!blur.loadFromFile("blur.frag", sf::Shader::Fragment)){
return 1;
}
if (!blur.isAvailable()){
return 1;
}
blur.setUniform("texture", sf::Shader::CurrentTexture);
blur.setUniform("blur_radius", 0.002f);
while (window.isOpen()){
sf::Event evnt;
while (window.pollEvent(evnt)){
if (evnt.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color(0, 100, 100));
sf::RenderStates state;
state.shader = &blur;
window.draw(rect, state);
window.display();
}
return 0;
}
und mein Shader-Code.
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);
}
ich ein unscharfes rotes Rechteck in der linken oberen cornor erscheinen erwarten Theres, sondern ein schwarzes festes Rechtecks.
Bitte bearbeiten in einem [MCVE]. –
@BartekBanachewicz ist jetzt aktualisiert –
Der Shader-Code sieht gut aus. Es gibt jedoch nichts in Ihrem Code, das ein unscharfes rotes Rechteck erscheinen lässt. Sie haben ein blaues Rechteck, auf das Sie den Shader anwenden, aber was erwarten Sie? Sie können nicht nur eine einzelne Farbe verwischen. Um den Unschärfeeffekt zu sehen, müssen Sie etwas anderes haben, etwas, mit dem Sie die Farbe verwischen können. Machen Sie Folgendes als ein Experiment: Wenden Sie den Unschärfe-Shader auf die gesamte Szene an und Sie werden sehen, dass es wie erwartet funktioniert. – user3881815