Le projet "Carousel" (en français "Carrousel" avec 2 "r") est inspiré par le menu "Carrousel" de PC-Soft basé sur WPF.
Le premier effet de ce type, a été conçu à l'origine sous forme de plugin flash sur Mac OS.
Le challenge que je voulais relever avec ce projet :
Obtenir un rendu aussi proche que possible de DirectX (WPF) ou d'OpenGL,
en utilisant uniquement du code Win32 FLAT API bas niveau SANS APPEL DIRECT au processeur graphique.
Pour y parvenir je me suis appuyé sur mon composant graphique GDImage,
car celui-ci comportait déjà toutes les primitives nécessaires,
mais il me fallait trouver le bon algorithme mathématique.
Heureusement grâce à Google j'ai trouvé ce que je cherchais,
dans l'excellent article de Keith Peters publié ici :
http://www.bit-101.com/tutorials/3D-rotation.htm l
et qui est à la base de la méthode "DrawCarousel" qui effectue les calculs 3D nécessaires pour la rotation des sprites.
Cette méthode de calcul est rigoureusement la même pour OpenGL ou DirectX, au cas ou quelqu'un voudrait transposer le code.
De nombreuses classes "maison" sont livrées avec le projet :
- GDImage.cs, encapsulation de l'API GDImage.
- SkinEngine.cs, les différentes méthodes utilisées pour créer l'interface graphique.
- SkinButton.cs, contrôle utilisateur pour les boutons skinnés (bitmap à 5 états).
- SkinCaption.cs, contrôle utilisateur pour l'affichage du caption skinné.
- SkinSwitch.cs, contrôle utilisateur pour les cases à cocher skinnées.
- SkinTrackbar.cs, contrôle utilisateur pour les potentiomètres skinnées.
- Win32.cs, encapsulation de l'API Win32 bas niveau.
A noter, que les boutons simulent un effet de halo au survol de la souris
et que la valeur des potientiomètres est affiché dans un tooltip lors du survol ou du déplacement des curseurs.
Le tout est présenté dans une fenêtre skinnée,
basé sur un gabarit inspiré de Vista et Windows Media Player,
comme vous pouvez le voir dans la capture d'écran.
Le projet est compatible avec VISUAL STUDIO 2005 EXPRESS EDITION