Comment peut-on dessiner un objet qui ne grossit pas quand on zoome ?J'ai récemment créé une classe qui permet de dessiner une flèche à l'écran qui peut alors représenter un vecteur (vecteur vitesse ou accélération dans mon cas). Cette flèche est constituée de deux parties : son "corps" ( ----- ), et sa "tête" ( > ).
Lorsque je suis à un niveau de zoom normal, tout va bien et la tête de la flèche est de la bonne taille. Mais dès que je zoom dessus en utilisant sf::View par exemple, la tête de la flèche grossit, ce qui est parfaitement normal. Mais ce n'est pas ce que je veux. Ce que je veux, c'est que la tête de la flèche soit toujours de la même taille, peut importe le zoom. Car quand je zoom 10X la tète de la flèche devient énorme, ce qui est assez gênant à l'écran
.
Voici le code qui permet la flèche d'être rendue à l'écran :
void Arrow::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
sf::Transform transform;
transform.translate(mPos.x, mPos.y).rotate(mAngle).translate(-mArrow[0].position.x, 0);
states.transform *= transform;
target.draw(&mArrow[0], 6, sf::Lines, states);
}
Dans cette fonction je dessine pour l'instant toute la flèche d'un coup (stockée dans un tableau de sf::Vertex). Ce que je voudrais donc à terme, c'est dessiner le corps et la tête de la flèche séparément à une différente échelle. Et pour cela, il faudrait pouvoir faire quelque chose comme "states.transform.scale". J'ai beaucoup recherché, et ce n'est malheureusement pas possible, alors dites-moi comment résoudre ce problème.
Merci d'avance de vos réponses !