【问题标题】:sf::Shader and sf::RectangleShapesf::Shader 和 sf::RectangleShape
【发布时间】:2013-04-04 20:10:39
【问题描述】:

我有一个关于使用 SFML 图形库中的 sf::Shape 的问题。在我的游戏中,我使用sf::RectangleShapes。例如 UserInterface 或播放器。这是代码的和平:

std::unique_ptr<sf::RectangleShape> rect;
sf::RenderTarget &target;
sf::RenderStates &stats;

void SfUIComponents::SfBaseRectangle::draw()
{
        target.draw(*rect, stats);
}

当我使用如下文件加载着色器时:

If(shader->loadFromFile(vertex, fragment)){ loaded = true;}

effect->loadFromFile("wave.vert","blur.frag"); 

在我绘制矩形之前:

void SfShader::activate()
{
    stats.shader = shader;
}

我绘制的文本也显示了效果,但矩形不可见。所以 ms 问题没有显示更多代码。是否可以将 sfml 着色器用于简单填充白色的矩形?

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

    您可以在渲染时使用着色器。 您可以通过创建“sf::RenderState”并设置它的着色器来做到这一点:

    sf::RenderState rs;
    sf::Shader effect;
    
    effect.loadFromFile("wave.vert","blur.frag");
    
    rs.shader = &effect;
    
    window.draw(rect , rs);
    

    如果您不需要使用来自 RenderState 的更多信息(如纹理),您可以直接将着色器传递给绘图函数:

    sf::Shader effect;
    
    effect.loadFromFile("wave.vert","blur.frag");
    
    window.draw(rect , &effect);
    

    【讨论】:

    • 我试过了,但是矩形是不可见的。我有关于使用 "shader.SetTexture("image", image);" 的解决方案我在加载和设置纹理后直接给矩形一个纹理。我使用 sf::Shader::currentTexture。知道这是可能的。但是感谢您的回答(:
    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多