IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Réécriture de la bibliothèque de génération et manipulation de formes en 2D
SDL2_gfxutils.

Le , par Luke spywoker

0PARTAGES

2  0 
libSDL2_gfxutils

J'annonce de part ce présent message, la réécriture de la bibliothèque de génération et de manipulation de formes libSDL2_gfxutils. Elle est publiée sous GPLv3.



Résumé de la bibliothèque SDL2_gfxutils

- Version actuelle : 2.0.0
- Plateformes cibles : Linux, Windows et normalement tous les compatibles POSIX (non testé)
- Compilateurs : gcc, g++, clang, mingw32, mingw-w64-686, mingw-w64-x86_64.
- Licence : GPLv3
- Auteur : Eddie Brüggemann (mrcyberfighter CHEZ gmail)




Présentation SDL2_gfxutils
SDL2_gfxutils GitHub
Documentation




La petite histoire de SDL2_gfxutils

SDL2_gfxutils est issue d'une collection de fonctions de génération de formes implémentée pour des besoins personnels.

À chaque fois que j'avais une idée de forme dans la tête j'essayais de l'implémenter - pendant plusieurs années...

J'ai commencé par écrire des fonctions Python avec le module pygame qui est basé sur la bibliothèque SDL, étant parti d'une fonction qui calcule la position d'un pixel selon un rayon et un angle.

SDL2_gfxutils a été écrit une première fois sous forme de bibliothèque C complémentaire à SDL2_gfx (dont les fonctions sont utilisées uniquement pour l'affichage) et je me suis sacrément trompé en tronquant les données vers le type requis par SDL2_gfx : int16_t.

Mais SDL2_gfxutils a été entièrement réécrit et amélioré par la même occasion pour nous donner cette nouvelle implémentation, compatible C++.

La nouvelle implémentation de SDL2_gfxutils

Toutes les fonctions génératrices de formes retournent un pointeur sur un type spécifique SDL2_gfxutils (Polygon, Star, ...) compatible avec le type générique Form.

Les pointeurs permettent de manipuler les formes générées pour les transformer par rotation, translation, mise à l'échelle et effet miroir, facilement.

Les pointeurs peuvent bien sur être détruits à volonté et cette mécanique est utilisée massivement dans la génération de forme.

Le type générique Form a changé pour contenir des coordonnées de type float, à la place de int16_t. Le calcul pour les rotations, translations, mise à l'échelle et effet miroir s'exécute correctement maintenant.

Avant les int16_t étaient doublés en interne pour les calculs. D'ailleurs si le cœur vous en dit il suffit de remplacer chaque occurrence du mot float par le mot double dans les fichiers source pour opérer en double précision (cela se fait en 5 minutes avec un éditeur de texte).

Les membres du sous-type Pixel sont de type float maintenant.

  • Certaines fonctions ont été enlevées, devenues inutiles avec la mécanique des pointeurs ;
  • D'autres fonctions ont été ajoutées, pour remplacer les fonctionnalités perdues, avec beaucoup d'avantages, surtout pour l'animation dans la boucle principale d'affichage ;
  • Toutes les fonctions ont été améliorées grâce à la mécanique des pointeurs de libSDL2_gfxutils.


Présentation de libSDL2_gfxutils.

SDL2_gfxutils est une extension de SDL2_gfx pour aider à la création et animation (d'images fantastiques). SDL2_gfxutils fournit diverses fonctions pour divers usages :

+ Des fonctions de génération de formes : du simple polygone en passant par les étoiles fantasques vers les fractales les plus complexes.
+ Des fonctions de transformation et d'animation de haut niveau agissant sur le type générique Form.
+ Des fonctions de génération de lignes et d'arcs.
+ Des fonctions de bas niveau de transformation et d'animation agissant sur un simple Pixel.
+ Des fonctions de gestion et de contrôle de la mémoire.

Il est facile d'adapter SDL2_gfxutils pour être compatible avec d'autres bibliothèques que SDL2_gfx. Il suffit de changer les fonctions d'affichages...

Opérations de transformation de formes

+ Rotation d'une forme (Form) autour de son centre du nombre de degrés voulu ;
+ Mise à l'échelle d'une forme de part un facteur ou une valeur ;
+ Translation d'une forme (Form) des valeurs de x et de y voulues ;
+ Effet miroir par un axe X ou Y selon un point central, soumis a condition (voir documentation).

Il vaut mieux passer des valeurs entières ou de faible précision sinon si l'on boucle cela risque de perturber libsdl2_gfxutil.

Changement de paramètres de formes: les setters

  • Changer le centre de gravité de la forme (Form) avec translation optionnelle des coordonnées ;
  • Changer le rayon de la forme (Form) ce qui équivaut à une mise a l'échelle en mettant la valeur directement (sans passer par un facteur de mise à l'échelle) ;
  • Assigner une nouvelle couleur à une forme (Form) ou ligne (Line).


Récupérer les paramètres d'une forme: les getters

  • Récupérer le pixel (Pixel) central courant de la forme (Form) ;
  • Récupérer la couleur (Color) de la forme (Form) ;
  • Récupérer le rayon de la forme ;
  • Récupérer l'orientation courante de la forme ;
  • Récupérer le membre real_length de la forme (Form) qui correspond au point le plus éloigné du centre (utilisable par exemple pour les collisions formes).


Il n'est pas toujours évident d'associer la notion de rayon à certaines formes.

Affichage des formes

Chaque type de forme (Form) a ses propres fonctions d'affichage (sinon vous pouvez vous servir de celle que vous désirez mais le résultat sera indéfini et vous aurez des surprises.
Pour chaque fonction d'affichage il existe une version anti-crénelage et une version pour assigner l'épaisseur du trait, excepté pour l'affichage en plein.

Longueur et distance entre deux pixels

  • Mesurer la longueur d'une ligne (Line)
  • Récupérer le milieu d'une ligne (Line)


Enfin, cette extension à SDL2_gfx peut, de part sa structure, facilement être adaptée à d'autres bibliothèques que la [[B]SDL2[B]](https://www.libsdl.org/).




Télécharger libSDL2_gfxutils [tarball]


Télécharger libSDL2_gfxutils [mingw32]

Télécharger libSDL2_gfxutils [mingw-w64-i686]

Télécharger libSDL2_gfxutils [mingw-w64-x86_64]


Une erreur dans cette actualité ? Signalez-nous-la !