【问题标题】:Using only the sprite to draw仅使用精灵进行绘制
【发布时间】:2018-05-22 21:40:44
【问题描述】:

使用 SFML 进行游戏开发的新手,非常喜欢它。

到目前为止,我正在尝试在精灵上渲染一个圆圈,但不知何故,我只得到了四分之一的圆圈,这意味着在绘制而不是精灵时,窗口被视为表面。如果我将 sprie 大小设置为窗口,我会看到完整的圆圈..

这是我的代码:

#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

const char *glsl = R"(
    #version 330 core
    uniform vec2 u_resolution;

    void main() {
        vec2 pos = gl_FragCoord.xy / u_resolution;

        float radius = 0.4;
        float d = smoothstep(radius + 0.01, radius, distance(pos, vec2(0.5)));

        gl_FragColor = vec4(d*0.0, d*0.5, d*1.0, 1.0);
    }
)";

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "GLSL", sf::Style::Default);

    sf::Texture tex;
    tex.create(800 / 2, 600 /2); // or tex.create(800, 600); for full window surface
    sf::Sprite spr(tex);

    sf::Shader shader;
    shader.loadFromMemory(glsl, sf::Shader::Fragment);
    shader.setUniform("u_resolution", sf::Vector2f(800, 600));

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) if(event.type == sf::Event::Closed) window.close();

        window.clear(sf::Color(244,244,244));

        window.draw(spr, &shader);
        window.display();
    }
}

任何帮助将不胜感激。我想要实现的是在精灵范围内渲染整个圆圈。谢谢!

【问题讨论】:

  • 这是某种课堂任务,还是您以不同的用户名重新发布几乎完全相同的问题?
  • 我看过那个,但似乎有点过时了......是的,这是一项任务......
  • 好的,所以总体问题是您想要什么。如果圆圈应该填满窗口,只需放大精灵(请参阅下面的 Rodolphe 的回答)。如果要将圆圈缩放到精灵,请检查链接的问题。

标签: c++ 2d shader sprite sfml


【解决方案1】:

你占据了屏幕的四分之一,因为你做了tex.create(800 / 2, 600 /2);,而你的窗口大小是sf::RenderWindow window(sf::VideoMode(800, 600) ...);。所以它由宽度和高度决定。创建一个与您的窗口大小相同的纹理,我认为您会很好 (tex.create(800, 600);)。

【讨论】:

  • 是的,我知道,但我希望将着色器应用于精灵,而不是整个窗口。又名,最后,圆圈应该在窗口的一部分呈现,而不是在整个窗口..
  • 好的,把你的shader.setUniform("u_resolution", sf::Vector2f(800, 600));改成shader.setUniform("u_resolution", sf::Vector2f(tex.getSize()));
  • 似乎是别的东西,我似乎在屏幕的左下角得到了圆圈,我会看看我是否可以以某种方式修改这些值以获得我想要的位置
  • 渲染上你的圆心在哪里? (左下还是中间?)
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多