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

Auteur Sujet: dessiner dans une zone avec clipping, mais en ratio 1:1 ?  (Lu 1495 fois)

0 Membres et 1 Invité sur ce sujet

binbinhfr

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
dessiner dans une zone avec clipping, mais en ratio 1:1 ?
« le: Avril 21, 2020, 04:45:04 pm »
Bonjour,

je suis nouveau sur SFML, je digère tous les tutos que je trouve, mais j'ai un petit blocage concernant les view / viewports. Je les ai essayé, mais souvent j'obtiens du scaling dès que le viewport n'a pas une dimension de 1.0 en X ou Y, et donc des artefacts dûs au scaling (aliasing etc...).

Or j'aimerais dessiner dans une sous-zone de la RenderWindow, sans aucun scaling.
Exemple: j'ai une RenderWindow de 1000x800.
J'aimerais pendant une partie du rendering, ne dessiner que dans le carré(x=200,y=100,l=500,h=500), comme si c'était une fenêtre normale, et sans scaling. Donc dans cette fenetre, je pourrais accèder aux coordonnées x=0..500 et y =0..500 . Le reste serait "clippé".

Il doit y avoir une solution, mais je ne la trouve pas...

Bonus : dans cette région, j'aimerais pouvoir éventuellement faire du scaling et du translating, comme avec une View.

Donc comment fait on pour qu'un viewport de tailles << 1.0 s'affiche de base sans scaling (et donc sans les artefacts dûs au scaling).

PS : En tout cas, je découvre SFML, et c'est super accessible, merci pour le boulot !
« Modifié: Avril 21, 2020, 05:01:26 pm par binbinhfr »

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re: dessiner dans une zone avec clipping, mais en ratio 1:1 ?
« Réponse #1 le: Avril 21, 2020, 05:21:28 pm »
Si tu veux une vue qui affiche les pixels de 0 à 500, il te faut une vue qui fait une taille de 500x500 et dont le centre est à 250 250. (ou la fonction reset de sf::View avec 0 0 500 500)
Ensuite pour afficher cette vue juste à un endroit particulier de ta fenêtre, il faut lui appliquer le viewport correspondant (200/1000, 100 / 800, 500 / 1000, 500 / 800)

binbinhfr

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re: dessiner dans une zone avec clipping, mais en ratio 1:1 ?
« Réponse #2 le: Avril 21, 2020, 06:37:10 pm »
Si tu veux une vue ....

merci beaucoup !
je n'avais pas compris que la view devait garder comme coordonnées mini 0,0.
Mais du coup, avec les arrondis de float vers integer dûs au viewport, est-on bien sûr que les pixels de mes textures vont bien être affichés sur des valeurs entières (et donc sans artéfacts) ?

Parce que dans mon exemple, ma view va avoir comme coordonnées "globales" : float(200/1000)*1000 = 200 et float(100/800)*800 = 100 car ça tombe juste,

mais si ma fenetre faisait 1024x768
et si j'avais choisi de la positionner en 189,263, on aurait eu pour coordonnées du coin de ma view :
float(189/1024)*1024 = 188.99999 et float(263/768)*768=263.00001 .

Que se passe t'il avec sfml dans ce cas là ? Il arrondit vraiment tout à l'entier et positionne les sprites sur des pixels entiers, ou bien il tente une interpolation ?

Car du coup, s'il doit interpoler toute ma view, ca va rajouter de l'overhead...
« Modifié: Avril 21, 2020, 06:38:56 pm par binbinhfr »

 

anything