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.


Messages - Clem83

Pages: [1]
1
Graphique / Re: Shader de flou gaussien
« le: Octobre 22, 2018, 11:34:41 am »
Bonjour,
en effet le seul problème est le shader. Je n'ai pas trouvé de tutoriels prorpre sur le sujet, j'avais donc copié le code que j'avais trouvé. J'ai regardé l'exemple "blur" de la SFML mais l'effet n'était pas assez important (même en changeant le radius) : pour obtenir l'effet souhaité, je devait appliquer le shader 4/5 fois ?  la suite, beaucoup moins performant que la petite fonction que j'avais créée :

void createblur(sf::RenderTexture &renderTexture, int boxSize, int iterations = 1)
{
        for (int n = 0; n < iterations; ++n)
        {
                sf::Image img = renderTexture.getTexture().copyToImage();
                sf::Image _new;
                _new.create(img.getSize().x, img.getSize().y);

                for (int i = 0; i < img.getSize().x; ++i)
                {
                        for (int j = 0; j < img.getSize().y; ++j)
                        {

                                int sum = 0, r = 0, g = 0, b = 0, a = 0;
                                for (int ii = -boxSize / 2; ii < boxSize / 2; ++ii)
                                {
                                        for (int jj = -boxSize / 2; jj < boxSize / 2; ++jj)
                                        {
                                                if (sf::IntRect(0, 0, img.getSize().x, img.getSize().y).contains(sf::Vector2i(ii + i, jj + j)))
                                                {
                                                        sum += 1;
                                                        sf::Color color = img.getPixel(i + ii, j + jj);
                                                        r += color.r;
                                                        b += color.b;
                                                        g += color.g;
                                                        a += color.a;
                                                }
                                        }
                                }
                                if (sum == 0)
                                        _new.setPixel(i, j, sf::Color(0, 0, 0, 0));
                                else
                                        _new.setPixel(i, j, sf::Color(round(r / sum), round(g / sum), round(b / sum), round(a / sum)));
                        }
                }
                renderTexture.clear();
                sf::Texture texture;
                texture.loadFromImage(_new);
                sf::Sprite sprite(texture);
                renderTexture.draw(sprite);
                renderTexture.display();
        }
}

Du coup je ne pense pas passer par des shaders. Merci beaucoup quand même

2
Général / Re: quel ide installer pour débutant ????
« le: Octobre 21, 2018, 04:57:33 pm »
Pour ma part j'ai utilisé code blocks puis Visual Studio. Code::Blocks marche très bien, et prend moins de place que VS.

3
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.

4
Graphique / Re : Adapter son programme à la taille de l'écran
« le: Juillet 22, 2016, 08:22:05 pm »
Merci je vais essayer !

5
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

6
Graphique / Re : Collision avec Circleshape
« le: Mai 16, 2016, 03:11:01 pm »
Merci pour ta réponse.   :)

7
Graphique / Re : Re : Map avec vertexArray
« le: Mai 14, 2016, 07:24:12 pm »
J'ai absolument pas compris un broc de ton topic.  :)
Désolé si ma demande n'était pas assez claire, j'avais du mal à m'exprimer.
J'ai donc modifié mes posts et reformulé ma question.
Merci de ton aide

8
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)

9
Graphique / Re : Bouton avec IntRect
« le: Avril 30, 2016, 05:20:01 pm »
Merci bien. J'avais oublié le deuxième "=".

10
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]