Neu in der Spieleentwicklung mit SFML und wirklich gefällt es.Nur das Sprite zum Zeichnen verwenden
Bis jetzt versuche ich, einen Kreis auf einem Sprite zu rendern, aber irgendwie bekomme ich nur ein Viertel des Kreises, was bedeutet, dass das Fenster als Oberfläche beim Zeichnen statt als Sprite genommen wird. Wenn ich die sprie Größe wie die Fenster zu machen, werde ich den Kreis sehen ..
Hier ist mein Code:
#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();
}
}
Jede Hilfe zu schätzen wissen würde. Was ich erreichen möchte, ist, den gesamten Kreis im Sprite-Bereich darzustellen. Vielen Dank!
Mögliche Duplikate von [SFML/GLSL - Making Shader nimmt VertexArray als Leinwand anstelle des Fensters] (https://stackoverflow.com/questions/47702694/sfml-glsl-making-shader-takes-vertexarray-as-canvas -inst-of-the-window) – Mario
Ist das eine Art von Unterrichtsaufgabe oder wiederholen Sie die fast exakt gleiche Frage unter verschiedenen Benutzernamen? – Mario
Ich habe das gesehen, aber scheinen ein wenig veraltet..und ja, es ist eine Aufgabe ... – sfmldev