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

Auteur Sujet: [Résolu] [2.0] Coordonnées d'un point transformées par une sf::View  (Lu 1925 fois)

0 Membres et 1 Invité sur ce sujet

trapster

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Bonjour,

J'ai un programme banal dans lequel je change la vue de ma sf::RenderWindow principale. Lorsque l'utilisateur clique quelque part sur ma fenêtre, je récupère les coordonnées de la souris via sf::Mouse::getPosition(). Sauf que celles-ci ne sont pas affectées par la vue !

C'est à dire que je quelque soit la transformation que j'applique à ma vue, les coordonnées du coin en haut à gauche retournées par sf::Mouse::getPosition() seront toujours les même.

Y-a-t-il un moyen d'appliquer les transformations faites à ma vue aux coordonnées que je récupère ? J'ai essayer de manipuler la matrice de transformation de sf::View sans grand succès..

#include <iostream>
#include <SFML/Graphics.hpp>

int main(int argc, char **argv)
{
    sf::RenderWindow window;

    sf::RectangleShape shape(sf::Vector2f(10, 50));
    shape.setFillColor(sf::Color::Black);

    // Create window
    window.setFramerateLimit(60);
    window.create(sf::VideoMode(1024, 768),
                  "Title",
                  sf::Style::Titlebar | sf::Style::Close,
                  sf::ContextSettings(0, 0, 8));

    sf::View view(window.getDefaultView());
    view.setCenter(0, 0);
    window.setView(view);

    // Rendering loop
    while(window.isOpen()) {

        // Poll event
        sf::Event event;
        while(window.pollEvent(event)) {

            // Want to quit
            if(event.type == sf::Event::Closed) {
                window.close();

            // Get mouse position
            } else if(event.type == sf::Event::MouseButtonPressed) {
                std::cout << view.getTransform().transformPoint((float) sf::Mouse::getPosition(window).x, (float) sf::Mouse::getPosition(window).y).x
                << ", "   << view.getTransform().transformPoint((float) sf::Mouse::getPosition(window).x, (float) sf::Mouse::getPosition(window).y).y
                << std::endl;
            }
        }

        // Render
        window.clear(sf::Color::White);
        window.draw(shape);
        window.display();
    }

    return 0;
}

 

Merci !
« Modifié: Mai 18, 2012, 02:11:51 pm par trapster »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [2.0] Coordonnées d'un point transformées par une sf::View
« Réponse #1 le: Mai 18, 2012, 01:51:19 pm »
window.convertCoords
Laurent Gomila - SFML developer

trapster

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : [2.0] Coordonnées d'un point transformées par une sf::View
« Réponse #2 le: Mai 18, 2012, 02:11:28 pm »
Merci, nickel !  ;D

Je savais qu'il existait une fonction de la sorte mais je savais pas où elle était !