我試圖單擊時,他們創建一個輪廓效果,我的按鈕,但ATM我只是測試的東西着色器......每當我畫的東西與我的着色壽它呈現的形狀完全黑SFML着色器不工作
#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;
}
和我的着色器代碼。
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);
}
我期望一個模糊的紅色矩形出現在左上角的圓角,而不是一個黑色的實心矩形。
請在[MCVE]編輯。 –
@BartekBanachewicz它現在 –
更新着色器的代碼看起來不錯。儘管這會讓模糊的紅色矩形出現,但代碼中沒有任何內容。你有一個藍色的矩形,你應用着色器,但你期望什麼?你不能模糊一種顏色。爲了看到模糊效果,你必須有其他的東西,你可以模糊顏色。做到以下幾點作爲一個實驗:應用模糊着色器的整個場景,你會看到它會按預期工作:) – user3881815