Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dessiner un quadrillage avec un VertexArray (SFML)

J'arrive seulement à dessiner une ligne de carrés.

Sujet résolu
    22 février 2020 à 21:27:26

    Bonjour,

    J'aimerais afficher un quadrillage. Pour cela, j'aimerais créer un VertexArray composé de carrés noirs, sur un fond gris. Cependant, je n'arrive qu'à dessiner une ligne.

    Voici le code :

    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    int main()
    {
        unsigned int longueur, hauteur;
        std::cout << "Longueur ? ";
        std:: cin >> longueur;
        std::cout << "Hauteur ? ";
        std::cin >> hauteur;
    
        unsigned int longueurBordure(5), longueurCarre(40);
    
        sf::VertexArray quadrillage(sf::Quads, 4*longueur);
    
        for(unsigned int i(0); i<longueur; i++)
        {
            quadrillage[4*i].position = sf::Vector2f((i+1)*longueurBordure + i*longueurCarre, longueurBordure);
            quadrillage[4*i+1].position = sf::Vector2f((i+1)*(longueurBordure + longueurCarre), longueurBordure);
            quadrillage[4*i+2].position = sf::Vector2f((i+1)*(longueurBordure + longueurCarre), longueurBordure + longueurCarre);
            quadrillage[4*i+3].position = sf::Vector2f((i+1)*longueurBordure + i*longueurCarre, longueurBordure + longueurCarre);
        }
    
        for(unsigned int i(0); i<4*longueur; i++)
        {
            quadrillage[i].color = sf::Color::Black;
        }
    
        sf::RenderWindow window(sf::VideoMode(longueur*longueurCarre + longueurBordure*(longueur+1), hauteur*longueurCarre + longueurBordure*(hauteur+1)), "Programme");
    
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
    
            window.clear(sf::Color(175,175,175));
            window.draw(quadrillage);
            window.display();
        }
    
        return 0;
    }

    C'est au moment de définir les positions des vertices que je bloque. Voici ce que j'obtiens en exécutant le programme :

    Edit : j'ai trouvé une réponse par moi-même :D

    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    int main()
    {
        unsigned int longueur, hauteur;
        std::cout << "Longueur ? ";
        std:: cin >> longueur;
        std::cout << "Hauteur ? ";
        std::cin >> hauteur;
    
        unsigned int longueurBordure(5), longueurCarre(40);
    
        sf::VertexArray quadrillage(sf::Quads, 4*longueur*hauteur);
    
        unsigned int a(0);
    
        for(unsigned int j(0); j<hauteur; j++)
        {
            for(unsigned int i(0); i<longueur; i++)
            {
                quadrillage[4*a].position = sf::Vector2f((i+1)*longueurBordure + i*longueurCarre, (j+1)*longueurBordure + j*longueurCarre);
                quadrillage[4*a+1].position = sf::Vector2f((i+1)*(longueurBordure + longueurCarre), (j+1)*longueurBordure + j*longueurCarre);
                quadrillage[4*a+2].position = sf::Vector2f((i+1)*(longueurBordure + longueurCarre), (j+1)*(longueurBordure + longueurCarre));
                quadrillage[4*a+3].position = sf::Vector2f((i+1)*longueurBordure + i*longueurCarre, (j+1)*(longueurBordure + longueurCarre));
    
                quadrillage[4*a].color = sf::Color::Black;
                quadrillage[4*a+1].color = sf::Color::Black;
                quadrillage[4*a+2].color = sf::Color::Black;
                quadrillage[4*a+3].color = sf::Color::Black;
    
                a++;
            }
        }
    
        sf::RenderWindow window(sf::VideoMode(longueur*longueurCarre + longueurBordure*(longueur+1), hauteur*longueurCarre + longueurBordure*(hauteur+1)), "Programme");
    
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
    
            window.clear(sf::Color(175,175,175));
            window.draw(quadrillage);
            window.display();
        }
    
        return 0;
    }

    En fait, je pensais devoir nécessairement utiliser une 3e boucle for. Et le programme me donne :


    -
    Edité par patate_douce 22 février 2020 à 23:38:12

    • Partager sur Facebook
    • Partager sur Twitter

    Dessiner un quadrillage avec un VertexArray (SFML)

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown