Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: tidann le Mars 18, 2018, 07:22:12 pm

Titre: Bandes noires et ratio 16/9
Posté par: tidann le Mars 18, 2018, 07:22:12 pm
Bonjour à tous,

Avant de commencer, oui je sais qu'il existe déjà des topics posant une question équivalente, mais après beaucoup de recherches, je n'ai trouvé aucune "vraie" solution à mon problème  :(

J'aimerais avoir toujours un ratio 16/9 à la vue de ma fenêtre (quelles que soient ses dimensions), cela grâce aux viewport, mais c'est un énorme casse-tête  :o!  J'ai cherché très longtemps, sans résultat..

Donc, si le ratio de la fenêtre est différent de 16/9 (très très probable), des bandes noires liées au viewport devraient s'afficher. Bien entendu, la vue s'agrandit en fonction de la taille de la fenêtre.

Voici le plus important de mon code :

#include <SFML/Graphics.hpp>
#include <iostream>
#include <cstdlib>
#include <string>
#include <cmath>
#include "TileMap.h"

//fonctions..

#pragma region variables
sf::RenderWindow fenetre;
sf::View vue;
//sprites etc...
#pragma endregion variables

int main()
{

    fenetre.create(sf::VideoMode(1600, 900), "SFML");
    fenetre.setPosition(sf::Vector2i(100, 100));
    fenetre.setFramerateLimit(60);

    vue.setSize(1600, 900);
    vue.setCenter(spritePersonnage.getPosition().x, spritePersonnage.getPosition().y);

    //autres définitions de sprites etc..

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

        //Autres événements..

        if (event.type == sf::Event::Resized)
        {
            //c'est ici que tout se joue..
        }

        vue.setCenter(spritePersonnage.getPosition().x, spritePersonnage.getPosition().y);



        fenetre.clear(sf::Color::Black);
        fenetre.draw(map);
        fenetre.draw(spritePersonnage);
        fenetre.setView(vue);
        fenetre.display();
    }

    return 0;
}

//fonctions...

Aussi : mon code est dégoutant, je sais, mais je suis en phase d'apprentissage, j'expérimente :)

Merci de votre aide !

tidann
Titre: Re: Bandes noires et ratio 16/9
Posté par: Sipige le Mars 19, 2018, 07:04:16 am
sf::Event event;
while(window.pollEvent(event)
{
      window.setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.width/16*9)));
}
 
Titre: Re: Bandes noires et ratio 16/9
Posté par: tidann le Mars 19, 2018, 07:31:04 am
Bonjour à toi,
C'est ce à quoi j'avais pensé au début mais... En fait la vue est bien en 16/9, mais elle s'adapte à la fenêtre qui elle n'est pas en 16/9. Donc on obtient une image déformée (as-tu testé avant ?). Ce code est bon, mais insuffisant. Il est la base du script : ensuite, il faut faire en sorte que la vue ne s'adapte pas à la fenêtre, grâce au sf::Viewport. C'est là que je sèche....
Merci en tout cas d'avoir assayé de m'aider!
tidann
Titre: Re: Bandes noires et ratio 16/9
Posté par: Laurent le Mars 19, 2018, 07:58:08 am
Et quel est ton problème exactement ? Tu butes sur quoi ? Tu as essayé quoi ?
Titre: Re: Bandes noires et ratio 16/9
Posté par: tidann le Mars 19, 2018, 07:56:48 pm
J'aimerais toujours avoir le même ratio 16/9 sur ma vue quelquesoit la taille de la fenêtre. Ca implique qu'il y ait des bandes noires autour.. Et aussi il faut que  le zoom de la vue soit le même, pour afficher le même nombre d'éléments tout le temps. J'ai essayé la classe viewport; mais je ne
sais pas comment faire pour obtenir ce que je veux.. Voici l'avancée de mon travail:
-> etape 1 : définir la taille de la vue par "hauteur" en hauteur et "hauteur * 16/9" en largeur
-> etape 2 : définir le viewport pour afficher des bandes noires, pour ne pas déformer la vue. C'est là que je bloque.
Titre: Re: Bandes noires et ratio 16/9
Posté par: G. le Mars 19, 2018, 08:04:12 pm
Tu peux jeter un oeil sur ça
https://github.com/SFML/SFML/wiki/Source%3A-Letterbox-effect-using-a-view
Titre: Re: Bandes noires et ratio 16/9
Posté par: tidann le Mars 20, 2018, 06:49:10 am
Un grand merci à toi! C'est exactement ce dont j'avais besoin.