【发布时间】: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 的回答)。如果要将圆圈缩放到精灵,请检查链接的问题。