Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: cChaD le Avril 17, 2013, 09:00:03 pm

Titre: Text Scale
Posté par: cChaD le Avril 17, 2013, 09:00:03 pm
Salut,

j'utilise les view dans mon programme "gui" est lorsque j'utilise une vue est que je modifie le viewport le bouton garde bien ses formes mais pas le texte, comment faire pour que le sf::Text n'apparaissent pas flou ?

merci.
Titre: Re : Text Scale
Posté par: Laurent le Avril 17, 2013, 09:06:52 pm
Un peu plus de précisions seraient les bienvenues. Tu modifies le viewport de quelle manière ? Tu étires quelque chose ou bien tu gardes les dimensions initiales ? Tu places ta vue à des coordonnées décimales ou bien tu gardes des coordonnées entières ? Ca veut dire quoi "ne garde pas ses formes" ? C'est flou dans quelles proportions ? Tu aurais un screenshot ?
Titre: Re : Text Scale
Posté par: cChaD le Avril 17, 2013, 09:14:58 pm
Alors,

j'inialise le viewport à la main pour l'instant, c'est à dire que j'ai touché jusqu’à que les boutons ait les mêmes dimensions.

Voici les screens :

(http://img11.hostingpics.net/thumbs/mini_622180sans.png) (http://www.hostingpics.net/viewer.php?id=622180sans.png)

(http://img11.hostingpics.net/thumbs/mini_774760avec.png) (http://www.hostingpics.net/viewer.php?id=774760avec.png)
Titre: Re : Text Scale
Posté par: Laurent le Avril 17, 2013, 09:35:15 pm
Tu veux dire que tu ne calcules pas ton viewport en fonction de la position et taille de ta fenêtre interne ? Tu as trouvé des valeurs de manière empirique ?
Titre: Re : Text Scale
Posté par: cChaD le Avril 17, 2013, 09:44:24 pm
Oui c'etait pour tester, mais si je le calcule je n'aurais plus ce flou ?
Titre: Re : Text Scale
Posté par: Laurent le Avril 17, 2013, 10:06:40 pm
Si la taille du viewport correspond exactement à la taille de la vue, il ne devrait y avoir aucune distorsion et donc aucun flou.
Titre: Re : Text Scale
Posté par: cChaD le Avril 17, 2013, 10:13:54 pm
D'accord merci !
Titre: Re : Text Scale
Posté par: cChaD le Avril 17, 2013, 10:52:04 pm
Je comprend pas, quand je place les 2 images à coté j'ai l'impression que sans les view les boutons sont plus grand alors que sur paint il font bien 108x38...

Voici la vue
    sf::View view(sf::FloatRect(210, 73, 280, 469));
    view.setViewport(sf::FloatRect(0.2625f, 0.1216666666666667f, 0.35f, 0.7816666666666667f));

la fenetre fait 800/600.

(http://img11.hostingpics.net/thumbs/mini_721952avec.png) (http://www.hostingpics.net/viewer.php?id=721952avec.png)

(http://img11.hostingpics.net/thumbs/mini_156044sans.png) (http://www.hostingpics.net/viewer.php?id=156044sans.png)
Titre: Re : Text Scale
Posté par: Laurent le Avril 17, 2013, 11:28:52 pm
Pourquoi pas "210 / 800", "73 / 600", etc. au lieu de ces valeurs décimales qui sortent de nulle part ? ;)
Titre: Re : Text Scale
Posté par: cChaD le Avril 17, 2013, 11:49:48 pm
    sf::View view(sf::FloatRect(210, 73, 280, 469));
    view.setViewport(sf::FloatRect((float)210/800, (float)73/600, (float)280/800, (float)469/600));

C'est pareille :/
Titre: Re : Text Scale
Posté par: Laurent le Avril 18, 2013, 07:53:43 am
Dans ce cas, écris un code complet minimal qui reproduit le problème, et je testerai ça. Par "minimal" j'entends un viewport et un sf::Text dans un main(), pas ton application originale.
Titre: Re : Text Scale
Posté par: cChaD le Avril 18, 2013, 01:58:46 pm
Voilà

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "Test lib");
    window.setFramerateLimit(60);

    // GUI
    gui::EngineManager *engine = gui::EngineManager::GetInstance();
    engine->AddScene(window);

    gui::Window *fenetre = new gui::Window("JE SUIS UNE FENETRE", 200, 50, 300, 500);

    sf::RectangleShape rect1(sf::Vector2f(108, 38));
    rect1.setPosition(sf::Vector2f(220, 75));
    sf::RectangleShape rect2(sf::Vector2f(108, 38));
    rect2.setPosition(sf::Vector2f(338, 75));
    sf::RectangleShape rect3(sf::Vector2f(108, 38));
    rect3.setPosition(sf::Vector2f(220, 120));

    sf::Font font; font.loadFromFile("Fonts/BorisBlackBloxx.ttf");
    sf::Text text1("Bouton 1", font, 15);
    text1.setColor(sf::Color::Black);
    text1.setPosition(rect1.getPosition().x + 20, rect1.getPosition().y + 7);
    sf::Text text2("Bouton 2", font, 15);
    text2.setColor(sf::Color::Black);
    text2.setPosition(rect2.getPosition().x + 20, rect2.getPosition().y + 7);
    sf::Text text3("Bouton 3", font, 15);
    text3.setColor(sf::Color::Black);
    text3.setPosition(rect3.getPosition().x + 20, rect3.getPosition().y + 7);


    // Scrolling
    sf::View view(sf::FloatRect(210, 73, 280, 469));
    view.setViewport(sf::FloatRect((float)210/800, (float)73/600, (float)280/800, (float)469/600));

    while(window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();

            engine->HandleEvent(event);
            fenetre->Update();
        }

        window.clear(sf::Color::Black);
        window.setView(window.getDefaultView());
        fenetre->Draw();
        window.setView(view);

        window.draw(rect1);
        window.draw(rect2);
        window.draw(rect3);
        window.draw(text1);
        window.draw(text2);
        window.draw(text3);

        window.display();
    }

    engine->kill();

    return 0;
}
Titre: Re : Text Scale
Posté par: Laurent le Avril 18, 2013, 02:00:37 pm
J'avais pourtant bien précisé ce que je demandais.
Citer
Par "minimal" j'entends un viewport et un sf::Text dans un main(), pas ton application originale.
C'est pas clair ?

En plus comment veux-tu que je teste ça, le code n'est même pas complet. Je la sors de mon c** la gui::Window ? ;)
Titre: Re : Text Scale
Posté par: cChaD le Avril 18, 2013, 02:10:31 pm
int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "Test lib");
    window.setFramerateLimit(60);

    sf::RectangleShape rect1(sf::Vector2f(108, 38));
    rect1.setPosition(sf::Vector2f(220, 75));
    sf::RectangleShape rect2(sf::Vector2f(108, 38));
    rect2.setPosition(sf::Vector2f(338, 75));
    sf::RectangleShape rect3(sf::Vector2f(108, 38));
    rect3.setPosition(sf::Vector2f(220, 120));

    sf::Font font; font.loadFromFile("Fonts/BorisBlackBloxx.ttf");
    sf::Text text1("Bouton 1", font, 15);
    text1.setColor(sf::Color::Black);
    text1.setPosition(rect1.getPosition().x + 20, rect1.getPosition().y + 7);
    sf::Text text2("Bouton 2", font, 15);
    text2.setColor(sf::Color::Black);
    text2.setPosition(rect2.getPosition().x + 20, rect2.getPosition().y + 7);
    sf::Text text3("Bouton 3", font, 15);
    text3.setColor(sf::Color::Black);
    text3.setPosition(rect3.getPosition().x + 20, rect3.getPosition().y + 7);


    // Scrolling
    sf::View view(sf::FloatRect(210, 73, 280, 469));
    view.setViewport(sf::FloatRect((float)210/800, (float)73/600, (float)280/800, (float)469/600));

    while(window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::Black);
        window.setView(view);
        window.draw(rect1);
        window.draw(rect2);
        window.draw(rect3);
        window.draw(text1);
        window.draw(text2);
        window.draw(text3);

        window.display();
    }

    return 0;
}
Titre: Re : Text Scale
Posté par: Laurent le Avril 18, 2013, 03:07:23 pm
Ce code fonctionne très bien chez moi, j'ai le même résultat au pixel près avec et sans la vue.
Titre: Re : Text Scale
Posté par: cChaD le Avril 18, 2013, 03:12:17 pm
C'est le 2éme boutton qui fait 107x38...
Titre: Re : Text Scale
Posté par: cChaD le Avril 26, 2013, 07:17:46 pm
Tu sais d'où ça pourrait venir ?

car le 1er et 3éme bouton ont la bonne dimensions mais pas le 2éme...
Titre: Re : Text Scale
Posté par: Laurent le Avril 26, 2013, 07:47:58 pm
Aucune idée. Comme je te l'ai dit, chez moi ça fonctionne parfaitement.
Titre: Re : Text Scale
Posté par: cChaD le Avril 26, 2013, 11:39:19 pm
Alors, ça fonctionne avec comme valeur (0, 0, 800, 600) je pense que ma différence de 1px viens du résultat de la division..
Titre: Re : Text Scale
Posté par: cChaD le Avril 27, 2013, 02:49:46 pm
Il y a que comme ça que j'ai la bonne dimensions (281/800) car avec (280/800) j'ai 107x38 pour le deuxième carré.

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "Test lib");
    window.setFramerateLimit(50);

    sf::RectangleShape rect1(sf::Vector2f(108, 38));
    rect1.setPosition(sf::Vector2f(220, 75));
    sf::RectangleShape rect2(sf::Vector2f(108, 38));
    rect2.setPosition(sf::Vector2f(338, 75));
    sf::RectangleShape rect3(sf::Vector2f(108, 38));
    rect3.setPosition(sf::Vector2f(220, 120));

    // Scrolling
    sf::View view(sf::FloatRect(210, 73, 280, 469));
    view.setViewport(sf::FloatRect((float)210/800, (float)73/600, (float)281/800, (float)469/600));

    while(window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::Black);
        window.setView(view);
        window.draw(rect1);
        window.draw(rect2);
        window.draw(rect3);
        window.display();
    }

    return 0;
}
Titre: Re : Text Scale
Posté par: cChaD le Avril 27, 2013, 11:35:34 pm
Et quand je parle que le rect à 1px en - c'est quand je regarde sur paint et que je fait la comparaison avec et sans la vue.
Titre: Re : Text Scale
Posté par: gostron le Avril 28, 2013, 12:09:56 pm
Peut-être hors sujet, mais je te conseillerais de faire 281./800 plutôt qu'un cast sans parenthèses de 281. En effet, il suffit d'un seul float dans un calcul pour que le calcul soit effectué en flotants et non pas en entiers, et le point suffit à lui-seul pour la conversion.