Bibliothèque de génération et de manipulation de formes libsdl2_gfxutils

Posté par  (site web personnel) . Édité par bubar🦥, Benoît Sibaud et palm123. Modéré par patrick_g. Licence CC By‑SA.
16
1
fév.
2016
C et C++

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.

Sommaire

SDL2_gfxutils

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)

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èqe 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 que vous pouvez imaginer.) SDL2_gfxutils fournit diverses fonctions pour divers usages:

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

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 2 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 SDL2.

Aller plus loin

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.