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

Auteur Sujet: Problème redimentionnement  (Lu 3473 fois)

0 Membres et 1 Invité sur ce sujet

aiatar95

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Problème redimentionnement
« le: Mars 28, 2013, 11:58:15 am »
Bonjour,

Je cherche à redimensionner une image après l'avoir tourner, mais le redimensionnement ne prends pas en compte la rotation.

Comment puis-je faire ?

Merci d'avance.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème redimentionnement
« Réponse #1 le: Mars 28, 2013, 12:59:12 pm »
Va falloir donner un peu plus de détails s'il-te-plaît.
Laurent Gomila - SFML developer

aiatar95

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Problème redimentionnement
« Réponse #2 le: Mars 28, 2013, 01:18:51 pm »
Désolé si je n'ai pas était clair.

J'ai donc pris une texture (de Minecraft pour les tests), que j'ai tourné de 45° :



J'ai ensuite effectué un redimensionnement uniquement sur l'axe X, mais voici ce que j'obtiens :



Comment puis-je donc faire pour que le redimensionnement prenne en compte la rotation ?

aiatar95

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème redimentionnement
« Réponse #3 le: Mars 28, 2013, 01:32:03 pm »
Si tu utilises l'API de base de sf::Sprite, tu ne peux pas influer sur l'ordre d'application des transformations, la rotation viendra toujours en dernier. Cela a été fixé volontairement dans un souci de simplification.

Ceci-dit, si tu utilises SFML 2, tu as une API alternative plus bas niveau, qui te permet de spécifier une combinaison de transformations quelconque.

sf::Sprite sprite;
...
sf::Transform transform;
transform.rotate(...);
transform.scale(...);
...
window.draw(sprite, transform);

Je te laisse consulter la documentation de l'API pour plus de détails concernant la classe sf::Transform.
Laurent Gomila - SFML developer

aiatar95

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Problème redimentionnement
« Réponse #4 le: Mars 28, 2013, 01:38:36 pm »
Merci beaucoup

Peut-on appliquer directement le Transform au Sprite, et donc ne pas avoir à le faire à chaque affichage ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème redimentionnement
« Réponse #5 le: Mars 28, 2013, 01:50:47 pm »
Non, c'est quelque chose qui se fait à chaque fois que tu dessines le sprite. D'ailleurs quand tu utilises l'API de haut-niveau (setRotation, setScale) c'est aussi ce qui est fait, sauf que c'est caché. Du coup n'hésite pas à créer ta propre classe autour de tout ça pour rendre l'utilisation finale plus sympa.
Laurent Gomila - SFML developer

aiatar95

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Problème redimentionnement
« Réponse #6 le: Mars 28, 2013, 02:03:40 pm »
Bizarrement, même en utilisant la classe sf::Transform, j'obtiens toujours le même résultat.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème redimentionnement
« Réponse #7 le: Mars 28, 2013, 02:18:24 pm »
L'utiliser c'est une chose, l'utiliser bien c'en est une autre ;)

Il est facile de se tromper sur l'ordre des transformations, n'hésite pas à jouer avec, à permuter, etc.
Laurent Gomila - SFML developer

aiatar95

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Problème redimentionnement
« Réponse #8 le: Mars 28, 2013, 02:22:25 pm »
Oui en effet, il s'agissait d'une erreur de ma part, due au fait que les transformations s’exécutent en commençant par la dernière demandé.

Merci beaucoup à toi Laurent pour toutes ces réponses rapides et précise.

aiatar95

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Problème redimentionnement
« Réponse #9 le: Mars 28, 2013, 05:59:15 pm »
désolé pour le double post mais j'ai encore une question et ne souhaitant pas recréer un sujet je post ici.

J'ai cru comprendre que lors de la rotation de 45° d'un carré par exemple, l'aire du carré était conservé et par conséquent, la place prise par le carré une fois tourné (un losange) était plus grande.

j'ai cherché à calculer la taille du carré contenant ce losange pour pouvoir par la suite en placer plusieurs côte à côte.

je suis donc arrivé au résultat que la moitié d'un côté vallait
sin(45) * côté du carré d'origine

or il s'avère que ce que j'obtiens ne correspond pas tout à fait à ce qui se passe dans sfml.

pourriez vous donc m'indiquez ou se trouve mon erreur.

merci

PS : j'écris depuis un smartphone, donc désolé pour les éventuelles fautes

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Problème redimentionnement
« Réponse #10 le: Avril 28, 2013, 08:19:48 pm »
Si j'ai bien compris ton post, il suffit de considérer que la longueur du nouveau carré est la diagonale du petit carré (ou bien la diagonale du losange), et donc qu'on obtient un nouveau carré de côté a*racine(2).