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

Auteur Sujet: Bandes noires et ratio 16/9  (Lu 3667 fois)

0 Membres et 2 Invités sur ce sujet

tidann

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Bandes noires et ratio 16/9
« 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
« Modifié: Mars 18, 2018, 07:25:39 pm par tidann »

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Bandes noires et ratio 16/9
« Réponse #1 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)));
}
 

tidann

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Re: Bandes noires et ratio 16/9
« Réponse #2 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

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Bandes noires et ratio 16/9
« Réponse #3 le: Mars 19, 2018, 07:58:08 am »
Et quel est ton problème exactement ? Tu butes sur quoi ? Tu as essayé quoi ?
Laurent Gomila - SFML developer

tidann

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Re: Bandes noires et ratio 16/9
« Réponse #4 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.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re: Bandes noires et ratio 16/9
« Réponse #5 le: Mars 19, 2018, 08:04:12 pm »

tidann

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Re: Bandes noires et ratio 16/9
« Réponse #6 le: Mars 20, 2018, 06:49:10 am »
Un grand merci à toi! C'est exactement ce dont j'avais besoin.