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();
}
}
すべてのヘルプは感謝だろう。私が達成しようとしているのは、スプライト範囲内の完全な円をレンダリングすることです。ありがとう!
[SFML/GLSL - シェーダを作成するとウィンドウの代わりにキャンバスとしてvertexArrayを作成する](https://stackoverflow.com/questions/47702694/sfml-glsl-making-shader-takes-vertexarray-as-canvas) -Inter-of-the-window) – Mario
これは教室の仕事のようなものですか、別のユーザー名でほぼ同じ質問を再投稿していますか? – Mario
私はそれを見たことがありますが、少し古くなったようです。そしてはい、それは仕事です... – sfmldev