Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: sf::font smooth  (Lu 2165 fois)

0 Membres et 1 Invité sur ce sujet

nico69

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
sf::font smooth
« le: Mai 14, 2016, 10:56:13 pm »
Bonjour,

J'ai remarqué que le rendu qu'un sf::Text est automatiquement smooth, que la taille de la police soit exacte ou une interpolation des données de la police.

Je suis actuellement en train de réaliser un programme qui fait un zoom constant sur la vue (donc 1 pixel réel est affiché en 2*2).
Je me retrouve donc en final avec du texte flou .... (en haut)

J'ai trouvé une solution .... pas très élégante pour éviter ce lissage du texte, je dessine le texte sur un sf::RenderTexture que j’insère dans un sf::Sprite pour réaliser le rendu.
Voici un code pour reproduire un rendu similaire à l'image précédente.
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::View v(window.getView());
    v.zoom(1/2.0f);
    window.setView(v);

    sf::Font font;
    font.loadFromFile("res/font/PressStart2P.ttf");
    sf::Text text("Something", font, 8);
    text.setPosition(-text.getGlobalBounds().left, -text.getGlobalBounds().top);
    text.setColor(sf::Color::Black);
    sf::RenderTexture textImg;
    textImg.create(text.getGlobalBounds().width, text.getGlobalBounds().height);
    textImg.clear(sf::Color(0, 0, 0, 0));
    textImg.draw(text);
    textImg.display();
    sf::Sprite sText(textImg.getTexture());
    text.setPosition(60, 85);
    sText.setPosition(60, 115);

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

        window.clear(sf::Color::White);
        window.draw(text);
        window.draw(sText);
        window.display();
    }

    return 0;
}
 
Y a t'il un meilleur moyen de faire pour supprimer le lissage des textes ? Ou idéalement de supprimer ce comportement (comme setSmooth sur les sf::Texture, mais rien trouvé de ce genre sur sf::Text et sf::Font).
Merci pour votre aide! :)

Edit : j'oubliais, j'utilise cette police si ça peut être utile : http://www.dafont.com/fr/press-start-2p.font
« Modifié: Mai 14, 2016, 10:58:15 pm par nico69 »

nico69

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : sf::font smooth
« Réponse #1 le: Mai 19, 2016, 09:22:29 pm »
Bonjour,
Après plusieurs tests, je vois que la création de texture a la volée à chaque fois que j'ai besoin de dessiner donne des performances assez dégueulasse.
A part faire comme cela, ou doubler la résolution de toutes les assets (et adapter le code) pour supprimer le zoom, y a t'il une autre solution pour éviter le smooth des texte ?

Modifier et recompiler SFML ?

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : sf::font smooth
« Réponse #2 le: Mai 19, 2016, 11:28:23 pm »
Si tu parles de la technique de ton précédant message, il ne faut pas recréer la RenderTexture à chaque fois mais juste faire le cycle maRenderTexture.clear() -> Dessins -> maRenderTexture.display().