2017-12-08 27 views
2

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(); 
    } 
} 

すべてのヘルプは感謝だろう。私が達成しようとしているのは、スプライト範囲内の完全な円をレンダリングすることです。ありがとう!

+0

[SFML/GLSL - シェーダを作成するとウィンドウの代わりにキャンバスとしてvertexArrayを作成する](https://stackoverflow.com/questions/47702694/sfml-glsl-making-shader-takes-vertexarray-as-canvas) -Inter-of-the-window) – Mario

+0

これは教室の仕事のようなものですか、別のユーザー名でほぼ同じ質問を再投稿していますか? – Mario

+0

私はそれを見たことがありますが、少し古くなったようです。そしてはい、それは仕事です... – sfmldev

答えて

0

tex.create(800/2, 600 /2);を実行し、ウィンドウサイズがsf::RenderWindow window(sf::VideoMode(800, 600) ...);であるため、画面の1/4を占有します。したがって、それは幅と高さで分けられます。あなたのウィンドウと同じサイズのテクスチャを作成して、あなたが良いと思う(tex.create(800, 600);)。

+0

ええ、私は知っていますが、スプライトのシェーダを適用することを望んでいますが、ウィンドウ全体ではありません。最後に、円はウィンドウの一部ではなくウィンドウの一部にレンダリングされるべきです。 – sfmldev

+1

さて、 'shader.setUniform(" u_resolution "、sf :: Vector2f(800,600));' shader.setUniform( "u_resolution"、sf :: Vector2f(tex.getSize())); ' –

+0

他の何かに見えますが、画面の左下のクォートに円が表示されています何とか値を変更して、どこでもそれを得ることができるかどうかを確認します –

関連する問題