Programmation Graphique - Synthèse d'Images : 2D CPU, 2D GLSL et OpenGL 3.2+

 

 
Pour information : les projets sont à rendre jeudi 22 mai à 7h00 au plus tard et par email. La soutenance se déroule en B103 le même jour à 12h00. Afin d'être inscrits, tous les étudiants ont l'obligation de se présenter aux soutenances même si leur projet n'est pas terminé.
 
Supports & liens
  • Site de la SDL - Simple DirectMedia Layer : Nous utiliserons la SDL-2 comme bibliothèque donnant accès à un contexte OpenGL 3.2 ou plus et aussi comme bibliothèque de gestion des évènements et des interactions utilisateur. Elle pourra, si besoin, être utilisée pour la gestion des threads, des fonts, au chargement de divers formats d'images ou de sons.

  • Site d'OpenGL - Open Graphics Library : OpenGL sera utilisé en version CORE 3.2 et + (voire 3.3 et +). Nous utiliserons la documentation des Reference Pages d'OpenGL 3.3, au moins pour les premiers exemples donnés, nous fournissons les Projets/Makefiles pour un fonctionnement sous Linux (Makefile), Windows (Visual C++ 2010 express, DevC++ 5 ou Makefile sous cygwin/MingW32) et Mac OS X (Makefile).

  • GL4Dummies : nous développons une bibliothèque permettant une gestion uniforme et facile des ressources OpenGL via la SDL2 (une ancienne version utilisant la SDL 1.2 existe mais ne sera plus maintenue par l'auteur). Actuellement, le source de cette bibliothèque est fourni, quand nécessaire, avec le source des exemples de cours.

  • ForVC : contenu spécifique aux utilisateurs de Visual C++ 2010 Express, vous pouvez décompresser le dossier ForVC au même niveau que les exemples de cours afin d'avoir l'ensemble des dépendances nécessaires (includes et libs des libs SDL2 et GL).

Exemples utilisés en cours
Ecran bleu - l'Init de la SDL2 avec OpenGL 3.2 : SIExemple01-1.0.tgz
Shaders statiques - Affichage d'une géométrie simple (un TRIANGLE_STRIP décrivant un rectangle) utilisant un VAO (Vertex Array Object) et un VBO (Vertex Buffer Object) : SIExemple02-1.0.tgz
Shaders dynamiques - avec la bibliothèque GL4D - transfert et traitement en vertex et fragment shader des coordonnées et des couleurs des sommets: SIExemple03-1.0.tgz
SIExemple03 + Chargement et utilisation d'une texture : SIExemple04-1.0.tgz
Codes vus en cours pour respectivement faire un simple flou, appliquer une convolution passée en argument ou un filtre Sobel : simple flou, convolution générique, Sobel
Implémentation du tracé de droite par l'algorithme de Bresenham'65 et comparaison avec un tracé de droite par division flottante : fichier tests_droite.c
Utilisation des primitives droite et cercle vues en cours et appliquées au dessin dans une texture OpenGL. Archive SIExemple08-1.0.tgz
Utilisation de la lib SDL2_Mixer avec SDL2 et OpenGL3.3+ pour visualiser un signal audio SIExemple09-1.0.tgz
SIExemple12-1.0.tgz : Voronoi Dansant en GPU (voir vidéo ci-contre). Aussi, première tentative de Voronoi en GPU faite en cours le 03 avril 2014 : SIExemple03-1.1.tgz
SIExemple13-1.0.tgz : Flou, Sobel, itérations de flous le tout en GPU et utilisant les FBO (Frame Buffer Objets) pour réaliser les itérations. Lors de l'exécution, appuyez sur n pour obtenir l'effet suivant et p pour l'effet précédent.
demoHelper-1.3.0.tgz : Nouvelle version de la bibliothèque avec, comme nouvelle fonctionnalité (depuis la 1.1.0 et la 1.2.0), la gestion automatique et dynamique de multiple écrans en mode CPU, la copie depuis une surface SDL et le placage avec possibilité de rotation (GPU) entre plusieurs écrans. Aussi, ajout d'exemples de chargement d'une image RGBA (et donc prise en compte du blending) depuis SDL et de recopie multiple depuis la surface SDL vers l'écran en mode CPU (pixel par pixel) et aussi en mode GPU.
demoHelper-1.1.0.tgz : Nouvelle version de la bibliothèque ultime qui vous permet de réaliser facilement vos démos en SDL2 / OpenGL et SDL2_Mixer. Cette version apporte des corrections de bugs ( personne n'est parfait ;) ) et une intégration directe et facile des outils de primitives CPU (voir exemple d'animation 03). Pour ceux qui ont commencé l'intégration avec la précédente version il suffit de remplacer les fichier primitives.* et animeManager.* par ceux de la nouvelle version.
Utilisation de la libfftw-3 pour réaliser une transformée de fourier du signal audio et visualiser le spectre correspondant : SIExemple15-1.0.tgz
Animation de mobiles subissant la gravité et ricochant sur les bords de l'écran : SIExemple16-1.0.tgz
Exercices
Exercice 1 (pour le 20 février 2014)
FACILE : Paramétrez votre machine de développement pour compiler et exécuter les 3 premiers exemples de cours et plus particulièrement le dernier. Envoyez une preuve de réussite pour le troisième exemple (SIExemple03-1.0.tgz).
 
Exercice 2 (pour le 27 février 2014)
Ecrire la fonction de convolution vue en cours et réalisant un flou et envoyer le tgz projet correspondant (utilisez SIExemple05-1.1 comme base pour cet exercice).
 
Exercice 3 (pour ... vous)
En partant du code SIExemple10-0.1.tgz implémentez l'algorithme générant un diagramme de Voronoi discret par cercles grossissants (voir vidéo youtube ci-contre).
 
Exercice 4 (pour ... vous)
En partant du code SIExemple09-1.0.tgz et l'exercice précédent, faire un Voronoi dansant (voir vidéo youtube ci-contre).

 

Exemples de Démos

 

Farès Belhadj

 

<-