Bonjour,
en programmant tranquillement, je me suis aperçu que certains de mes sprites dont leur texture sont tirés d'un fichier commun, et défini à l'aide d'un ".setTextureRect" avaient des "artefacts", des glitchs trainant sur le bord, et faisant apparaître des pixels situés en dehors du rectangle de texture. En faisant des tests, je suis tombé sur la conclusion que l'antialiasing créait ces petits pixels de trop lorsque le sprite subit une rotation (logique, faut bien avoir une diagonale pour avoir l'antialiasing opérant):
#include <SFML/Graphics.hpp>
#include <iostream>
int main()
{
sf::Sprite sprite;
sf::Texture texture;
texture.loadFromFile("test.png");
sprite.setTexture(texture);
sprite.setTextureRect(sf::IntRect(21,21,21,21));
sprite.setScale(15,15);
sprite.setPosition(300,120);
sf::ContextSettings settings;
settings.antialiasingLevel = 8;
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML works!", sf::Style::Default, settings);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
sprite.setRotation(sprite.getRotation() + 0.1);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
sprite.setRotation(sprite.getRotation() - 0.1);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
sprite.setRotation(0);
window.clear();
window.draw(sprite);
window.display();
}
return 0;
}
J'ai mis le code source ainsi que la texture utiliser pour les tests.
On peut voir que normalement, en position setRotation(0), la fenêtre est bien noire, mais quand on effectue une rotation sur le sprite, on voit apparaître des bords de pixel possédants la couleur des carrés adjacents au rectangle de texture défini.
Ma question finale est: Est-ce que j'ai mal fait quelque chose? Est-ce un bug connu ? (une fonctionnalité désirée comme j'ai pu lire pour d'autres sujets à propos de glitchs visuels)
Cordialement,
Merci de m'avoir lu, bonne journée !