Salut les gens,
Aujourd'hui je vous présente les deux librairies sur lesquelles je travaille depuis quelques temps et qui me tiennent à coeur, ma philosophie étant de totalement séparer et différencier l'aspect géométrique d'objets de leur rendu graphique ou de toute autre utilisation potentielle (tel un moteur physique, que je développe grâce à la première soit dit en passant) :
La première nommée Zoost qui permet de créer des objets géométrique le plus simplement du monde et de les faire interagir entre eux (et ce totallement indépendamment de la SFML).
Des segments, jusqu'aux triangles, en passant par les courbes (y compris Bezier) et les polygones concaves, vous n'aurez que l’embarras du choix (et j'en rajouterai bientôt).
Vous pouvez bien sûr creer vos propres formes personnalisée grâce à un système à la fois haut et bas niveau.
La seconde, Zoom, (basée sur SFML 2.0 RC) se concentre sur l'aspect animation et graphismes, permettant grosso modo d'utiliser une géometrie de Zoost et de l'animer comme bon vous semble. Mais ça ne s'arrête pas là car vous pourrez aussi afficher ces géométries et personnaliser le rendu à volonté (taille de chaque point, couleurs des segments, remplissage des formes et j'en passe...). Enfin, est fourni un moteur de lumière basé sur le super travail de Gregouar, qui a été dépoussiéré pour l'occasion. Dans un futur proche et avec son aide, je compte ajouter la gestion du tout nouveau moyen de rendre les ombres 2.5D, ce qui me rend vraiment impatient...
Exemple de création d'un polygone concave et son rendu :Geom geom = Geom::polygon({{0, 0}, {25, 100}, {40, 100}, {40, 0}, {100, 0}, {100, 100}, {120, 100}, {120, 0}, {180, 0}, {180, 100}, {200, 100}, {200, 0}, {260, 0}, {260, 100}, {275, 100}, {300, 0}, {300, 120}, {240, 120}, {240, 20}, {220, 20}, {220, 120}, {160, 120}, {160, 20}, {140, 20}, {140, 120}, {80, 120}, {80, 20}, {60, 20}, {60, 120}, {0, 120}});
geom.setPosition(130, 200);
geom.scale(1.5, 1.5);
Shape shape(geom);
shape.setFaceColor(Color::SpringGreen);
shape.setLiaisonColor(Color::DarkGreen);
shape.setLiaisonWidth(3);
target.draw(shape);
Exemple d'animation d'un objet via une courbe et une cinétique :Curve curve = Curve::bezier({767, 410, 1000, 900, 1000, 30, 500, 30, 1, 30, 50, 560, 169, 410}) + Curve({169, 410, 228, 321, 386, 571, 553, 261, 421, 218, 575, 464, 767, 410});
curve.setOrigin(500, 370);
Kinetic kinetic(curve, 400, 0, true); // 400 est la vitesse de parcours de la courbe, 0 signifie qu'un commence du début (toujours inférieur ou égal à 1) et true qu'on boucle la cinétique.
// Boucle principale :
Vector2d coords = curve.convertToGlobal(kinetic.update(clock.restart())); // Nouveau point de parcours de la courbe.
myShape.setPosition(coords);
Voilà, ces deux librairies sont pas tout à fait complètes, mais amenées à évoluer rapidement (vu que j'en ai besoin dans mes futurs projets). Je vous tiens au courant des évolution et reste à votre écoute pour toute question ou suggestion !
https://github.com/Zinlibs/Zoosthttps://github.com/Zinlibs/ZoomMerci et bon codage !