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