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

Auteur Sujet: Incohérences origines et rotations  (Lu 1935 fois)

0 Membres et 1 Invité sur ce sujet

dunno

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Incohérences origines et rotations
« le: Juin 28, 2017, 01:26:26 am »
Bonjour, bonsoir, tout d'abord merci de prêter attention à mon problème dont je n'ai aucune idée du pourquoi du comment, je suis vraiment perdu. Je voudrais préciser d'abord que j'utilise la version 2.3.2 de la SFML, par soucis de compatibilité avec mon Code::Blocks.

Alors, pour commencer l'origine. J'essayais de la prendre en main, et en essayant simplement de définir l'origine d'un CircleShape à (700,700) et sa position en (0,0), celui-ci ne devrait-il pas se trouver approximativement au milieu de l'écran, ou du moins à l'écran ? Puisque avec moi, il se trouve non pas à cet endroit mais en (-700,-700) sur le repaire SFML (axe y inversé), il est donc en haut a gauche, je peux le localiser grâce à une sf::View. Donc pour placer l'origine en (700,700) sur le repaire SFML, je dois mettre (-700,-700) d'origine et position (0,0) (ou setPosition(700,700) avec l'origine par défaut, ce qui est normal), et là ça marche, je suppose que ce n'est pas normal...

Cela était mon premier problème, le suivant, est à propos de la rotation par rapport à une origine prédéfini. Je vous mets de suite le code, pour une compréhension rapide


    sf::CircleShape m_shape;
    m_shape.setOrigin(-750,-400); // Valeurs négatives, à cause du premier problème ^^'
    m_shape.setPosition(50,50); // Je l'éloigne un peu de son origine
    m_shape.setPointCount(100);
    m_shape.setFillColor(sf::Color(128,128,128));
    m_shape.setRadius(24);



    while (window.isOpen())
    {
        deltaTime = clock.restart().asSeconds();
        window.clear(sf::Color::Black);
        m_shape.rotate(5.0f * 20.0f * deltaTime); // Simple rotation (speed * velocity * deltaTime)
        window.draw(m_shape);
        window.display();
    }

Chez moi, ce code amène à un CircleShape qui effectue une rotation autour de l'origine de défaut en (0,0), coin haut gauche. Est-ce normal ? Vous obtenez pareil et donc je n'ai pas bien compris quelque chose et mon code doit être changé ? Ou alors vous obtenez quelque chose de différent, et c'est un problème de version SFML... Voilà voilà, merci beaucoup, une réponse serait vraiment appréciée, si vous en avez le temps, merci!

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Incohérences origines et rotations
« Réponse #1 le: Juin 28, 2017, 09:43:23 am »
Citer
J'essayais de la prendre en main, et en essayant simplement de définir l'origine d'un CircleShape à (700,700) et sa position en (0,0), celui-ci ne devrait-il pas se trouver approximativement au milieu de l'écran, ou du moins à l'écran ?
Non. C'est un peu difficile de l'expliquer autrement si tu ne comprends pas comment ça fonctionne. A la limite essaye de jouer avec d'autres origines (coins, centre du cercle), tu verras que le sens du décalage est bon.

Citer
Chez moi, ce code amène à un CircleShape qui effectue une rotation autour de l'origine de défaut en (0,0), coin haut gauche. Est-ce normal ?
Non, ça doit tourner autour de l'origine. Tu es bien certain que ce n'est pas le cas ? Encore une fois, essaye d'autres origines pour essayer de mieux comprendre ce qui se passe.
Laurent Gomila - SFML developer

dunno

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Re: Incohérences origines et rotations
« Réponse #2 le: Juin 29, 2017, 11:06:13 pm »
Très bien, bah je vais apprendre avec la pratique alors! Juste, pour comprendre un peu, quand je définis l'origine d'un sf::Transformable, cela se fait par rapport à l'origine de défaut, le coin haut gauche ? En fait, je ne suis pas sûr de saisir ce que représente réellement l'origine, si je fais
shape.setOrigin(10,20);
Est-ce que c'est équivalent à simplement "bouger" l'origine de défaut en position (10,20) par rapport à l'origine de défaut ? Merci encore une fois et désolé pour les questions de débutants..

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Incohérences origines et rotations
« Réponse #3 le: Juin 30, 2017, 07:45:03 am »
Oui, c'est exactement ça. Par défaut c'est (0, 0), et en appelant setOrigin tu peux la mettre où tu veux (typiquement au centre de l'objet, ou dans un autre coin, ou au milieu en bas).

Toutes les autres transformations (position, rotation, échelle) sont relatives à l'origine -- c'est pour ça que changer l'origine d'un objet a pour effet de le déplacer, c'est maintenant la nouvelle origine qui se trouve à la position donnée à setPosition et non plus le point local (0, 0).
Laurent Gomila - SFML developer