Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Clem83

Pages: [1]
1
Graphique / Shader de flou gaussien
« le: Octobre 21, 2018, 04:49:12 pm »
Bonjour ?  tous,

Récemment j'ai commencé ?  m'intéresser aux shaders, et notamment pour créer un effet de flou.
Je n'ai néanmoins pas trouvé de tutoriel, j'ai donc copié un exemple que j'ai trouvé... qui ne fonctionne pas : la fenêtre reste noire  ::).

Je dessine mes objets sur une renderTexture, avant d'appliquer le shader dessus, pour la dessiner dans la fenêtre avec un sprite.

Le code du main, avec la fonction qui modifie la texture au dessus (Attention le code design doit être un cauchemar  ;D) :
int main()
{
       
        sf::RenderWindow window(sf::VideoMode(256, 256), "Shader", sf::Style::Titlebar | sf::Style::Close);
        window.setVerticalSyncEnabled(true);

        // création de la render texture
        sf::RenderTexture base;
        base.create(256, 256);
        base.clear(sf::Color::Black);
       
       
        // dessine 2 cercles sur la texture : fonctionne

        sf::CircleShape first;
        first.setPosition(100, 10);
        first.setRadius(30);
        first.setFillColor(sf::Color::Cyan);

        sf::CircleShape second;
        second.setPosition(10, 50);
        second.setRadius(10);
        second.setFillColor(sf::Color::Blue);

        base.draw(first);
        base.draw(second);

        /////
       

        // déclaration et application du shader : ne fonctionne pas (les cercles ne s'affichent même pas)
        sf::Shader blur;
        sf::Texture local = base.getTexture();
        if (!blur.loadFromFile("blur_gen.frag", sf::Shader::Fragment)) {
                return -1;
        }
        if (!blur.isAvailable()) {
                return -1;
        }

        blur.setUniform("originalTexture", sf::Shader::CurrentTexture);
        blur.setUniform("blur_vector", sf::Glsl::Vec2(1.0, 0.0));
        blur.setUniform("texel_size", sf::Glsl::Vec2(10.f, 10.f));
        sf::Sprite world(local);
        world.setOrigin(0, local.getSize().y / 2);
        world.setPosition(0, 0);

        sf::RenderStates states;
        states.shader = &blur;
        states.blendMode = sf::BlendAlpha;
        base.draw(world, states);

        ////////////////////////////////////


        // création du sprite pour dessiner la texture dans la fenêtre
        sf::Texture texture = base.getTexture();
        sf::Sprite sprite;
        sprite.setTexture(texture);

        while (window.isOpen())
        {
                sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed) window.close();
                        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) window.close();
                }

                window.clear();
                window.draw(sprite);
                window.display();
        }
        return 0;
}
 

et le code GLSL :
varying vec2 v_vTexcoord;
varying vec4 v_vColour;


uniform vec2 blur_vector;
uniform vec2 texel_size;

uniform sampler2D originalTexture;

void main(void){
        vec4 out_color;
        vec2 offset_factor = texel_size * blur_vector;

        out_color += texture2D(originalTexture, v_vTexcoord- 7.4240691*offset_factor) * 0.0562937;
    out_color += texture2D(originalTexture, v_vTexcoord-5.4441177*offset_factor) * 0.0951791;
    out_color += texture2D(originalTexture,v_vTexcoord-3.5653500*offset_factor) * 0.1369112;
    out_color += texture2D(originalTexture, v_vTexcoord-1.4847002*offset_factor) * 0.1675553;
    out_color += texture2D(originalTexture, v_vTexcoord) * 0.0881212;
    out_color += texture2D(originalTexture, v_vTexcoord + 1.4847002*offset_factor) * 0.1675553;
    out_color += texture2D(originalTexture, v_vTexcoord+3.5653500*offset_factor) * 0.1369112;
    out_color += texture2D(originalTexture,v_vTexcoord+5.4441177*offset_factor) * 0.0951791;
    out_color += texture2D(originalTexture, v_vTexcoord+ 7.4240691*offset_factor) * 0.0562937;

        gl_FragColor = v_vColour *out_color;
}

 
Pourriez-vous m'indiquer, s'il vous plaît, d'où vient mon erreur, voire m'aiguiller vers une autre manière de procéder ?

Merci d'avance

PS: Chapeau ?  toute la team SFML pour cette magnifique librairie, pour leur réactivité sur le forum.

2
Graphique / Adapter son programme à la taille de l'écran
« le: Juillet 22, 2016, 04:14:36 pm »
Salut à tous,

J'aurais aimé savoir si un moyen permettait d'adapter un programme à des tailles d'écran différentes sans avoir à bidouiller les échelles des sprites, textes, etc...
En d'autre termes, si mon écran est un 1920x1080, comment faire pour que mon jeu puisse tourner sur un écran 1 280 × 720, ou sur un écran 2 560 × 1 440...

Merci de votre réponse.  :D

3
Graphique / Collision avec Circleshape
« le: Mai 03, 2016, 06:07:51 pm »
Bonjour à tous,
J'aimerais savoir comment calculer une collision entre un rectangle ou un sprite et un objet non rectangulaire (comme une circleshape)
Merci de votre réponse (qui est toujours hyper rapide  :D)

4
Graphique / Bouton avec IntRect
« le: Avril 30, 2016, 12:25:00 pm »
Bonjour à toutes et à tous.
J'ai récemment débuté avec SFML, et je cherche à créer un bouton. Voici le code pour cliquer dessus
positionSouris est un Vector et quitDetector est le IntRect
                if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
            {
                positionSouris=sf::Mouse::getPosition(window);
                bool b1 = quitDetector.contains(positionSouris.x, positionSouris.y);
                std::cout<<b1<<std::endl;
                if (b1=true)
                {
                    std::cout<<"Fermeture"<<std::endl;
                }
                else
                {
                    std::cout<<"Pas de fermeture"<<std::endl;
                }

            }
 
Le problème c'est que peu importe la valeur du bool, le message est  "Fermeture".
Je ne comprends pas d'où vient le problème, il me semble ne rien avoir oublié. Si vous pouviez m'aider svp Merci.  :)

Ps: Soyez indulgents sur ma mainère de code je suis débutant ;)

Pages: [1]
anything