Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - cantor

Pages: [1]
1
Suggestions de nouvelles fonctionnalités / LineStrip avec épaisseur...
« le: Janvier 12, 2014, 06:43:22 pm »
Bonjour à tous,

Premièrement bravo pour cette superbe librairie!

J'expose mon problème ici, car c'est une fonctionnalité que je ne trouve pas dans l'API (qui existe peut-être, mais où?)

J'utile des tableaux de Vertex pour construire des formes assez compliqués. Ces formes sont stockés dans une classe Transformable et Drawable, ce qui rend ensuite ces formes très pratique à manipuler au niveau du dessus.

En général ces formes sont des LinesStrip, ou plus rarement des Lines. J'utilise ensuite la fonction sf::RenderTarget::draw et tout fonctionne à merveille.

Oui.. sauf que, parfois j'aimerais ré-utiliser ces formes en les dessinant avec une épaisseur de trait. Bas niveau, ça va revenir (j'imagine) à dessiner des TrianglesStrip autour des lignes existantes, sauf que les coordonnées sont incroyablement pénible à calculer....

La plus simple de mes classes ressemble à quelque chose du genre:
class DZ : public Drawable, public Transformable {
public:
        DZ (float W, float H) : rect(Vector2f(W,H)) {
                rect.setOutlineColor(Color::White);
                rect.setFillColor(Color::Black);
                rect.setOutlineThickness (1);
               
                int i=0;
                v[i++].position = Vector2f (50, 25);
                v[i++].position = Vector2f (50, H/2);
                v[i++].position = Vector2f (50-10, H/2-10);
                v[i++].position = Vector2f (50-10, H/2+10);
                v[i++].position = Vector2f (50, H/2);
                v[i++].position = Vector2f (50, H-10);
                v[i++].position = Vector2f (W-50, H-10);
               
                // Ca aussi c'est pénible d'avoir à écrire une boucle quand tout est de la même couleur
                for (i = 0; i < 7; i++) v[i].color=green;
        }
private:
        virtual void draw (RenderTarget &target, RenderStates states) const {
                states.transform *= getTransform();
                target.draw (rect, states);
                target.draw (v, 7, LinesStrip, states);
        }
        RectangleShape rect;
        Vertex v[7];
};
 

Idéalement j'aimerais une fonction RenderTarget::drawLineStrip prennent une épaisseur en argument...


Pages: [1]