es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El antialiasing de SFML no funciona correctamente al borrar RenderTexture con transparencia.

Tengo un RenderTexture de SFML que estoy creando de la siguiente manera:

sf::ContextSettings settings;
settings.antialiasingLevel = 8;
this->texture.create(size.x, size.y, settings);

En cada frame lo limpio con transparencia y dibujo un RoundedRectangleShape en él:

this->texture.clear(sf::Color::Transparent);

sf::RoundedRectangleShape shape(sf::Vector2f(this->size.x, this->size.y), 15, 16);
shape.setFillColor(this->colour.sfml());

this->texture.draw(shape);

this->texture.display();

Con el borrado transparente, las esquinas no se ven tan suaves como con el color de fondo:

Si lo borro con el color de fondo usando this->texture.clear(sf::Color::Black);, el antialiasing funciona bien y las esquinas quedan suaves:

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución para la suavidad de las esquinas en RenderTexture de SFML

    El problema de la suavidad de las esquinas en RenderTexture se puede resolver configurando el modo de mezcla de la RenderTexture en sf::BlendNone. Esto evitará cualquier mezcla alfa durante el proceso de renderizado, lo que debería resultar en esquinas más suaves para la RoundedRectangleShape.

    Aquí hay un ejemplo de cómo hacer esto:

    // Establecer el modo de mezcla de RenderTexture
    this->texture.setSmooth (true);
    
    // Limpiar RenderTexture con el color de fondo - negro
    this->texture.clear(sf::Color::Black);
    
    // Establecer el modo de mezcla para la forma
    shape.setFillColor(this->color.sfml());
    shape.setOutlineThickness(1.f);
    shape.setOutlineColor(sf::Color(50, 50, 50, 255));
    shape.setBlendMode(sf::BlendNone);
    
    // Dibujar la forma en la textura
    this->texture.draw(shape);
    
    // Finalizar el marco actual
    this->texture.display();
    

    Al establecer el modo de mezcla en sf::BlendNone para la forma, RenderTexture ya no mezclará alfa los bordes de la forma con el fondo transparente, lo que dará como resultado esquinas más suaves.

Comments are closed.