Descriptif
Ce cours propose une introduction à la programmation en langage C++ via l'application en informatique graphique 3D.
Le langage C++ est le plus utilisé pour l'écriture de logiciels scientifiques de grande envergure nécessitant une interaction temps-réel. Son utilisation couvrant, par exemple, la majorité des logiciels de moteurs de jeux (Unity, Unreal, Godot, moteurs des jeux AAA), modeleurs image/vidéo et 3D (Maya, Blender, Photoshop, Catia, etc.), calculs parallèle (CUDA), frameworks d'apprentissage et de vision (PyTorch, TensorFlow, OpenCV), d'OS (Windows), ou même de web (Chrome, Firefox, AWS, etc.).
Ce cours propose de se familiariser avec les concepts de programmation C++, en particulier la notion de programmation "bas-niveau" impliquant la connaissance fine de l'utilisation mémoire des variables utilisées par le programme. Le cours propose également une ouverture vers les bonnes pratiques de programmation de logiciels de taille importante (au dela de scripts de quelques centaines de lignes), en particulier la notion de modularité et d'architecture logicielle.
Les applications de l'apprentissage du C++ se font via le cas d'application en informatique graphique 3D temps-réel, via l'utilisation de l'API OpenGL. Le cours propose de découvrir les concepts de base de la "programmation graphique", en particulier le rendu d'images, la modélisation, et l'animation 3D efficace, via l'utilisation du C++ et de la programmation sur GPU via shaders. Les concepts présentés permettent de comprendre les mécanismes sous-jacents aux moteurs de rendus graphiques pour des applications plurisdiciplinaires tel que pour le jeu vidéo, les applications de rélaité virtuelles, la visualisation scientifique, l'imagerie médicale et biologiques, en encore la simulation physique.
Le cours est principalement orienté vers la pratique, avec des exercices et un projets final demandant de réaliser une scène 3D animée en langage C++.
Objectifs pédagogiques
Partie C++
- Connaître les concepts de base de la programmation en C++ (variables, types, structures de contrôle, fonctions, classes, etc.)
- Etre familiarisé avec la programmation de bas niveau et le modèle mémoire.
- Savoir utiliser le modèle de programmation orientée objet et la programmation générique.
- Etre capable de quantifier l'impact des structures de données sur l'efficacité du code. Mise en oeuvre des structures adaptées.
- Connaitre et mettre en oeuvre les bonnes pratique de développement logiciel.
Partie Informatique Graphique
- Connaitre les étapes principales du pipeline de rendu graphique.
- Etre familiarisé avec les concepts de programmation graphique efficace (préparation des données, interfacage CPU/GPU, impact du pipeline de rendu).
- Savoir manipuler le modèle de coordonnées projectives.
- Savoir manipuler et mettre en oeuvre les transformations sur des scènes 3D, ainsi que les modèles de caméra.
- Etre familiarisé avec la programmation parallèle sur GPU via les shaders en GLSL.
- Comprendre et savoir manipuler les concepts d'illumination, de texture, de modélisation et d'animation.
35 heures en présentiel (10 blocs ou créneaux)
50 heures de travail personnel estimé pour l’étudiant.
effectifs minimal / maximal:
1/130Diplôme(s) concerné(s)
Pour les étudiants du diplôme Titre d’Ingénieur diplômé de l’École polytechnique
Vous devez avoir validé l'équation suivante : UE CSC_3X071_EP Ou UE CSC_41011_EP
Niveau requis en informatique : INF371 ou INF411
Format des notes
Numérique sur 20Littérale/grade réduitPour les étudiants du diplôme Titre d’Ingénieur diplômé de l’École polytechnique
Vos modalités d'acquisition :
- Cours en amphi évalué par un examen écrit classant
- TPs suivi d'un projet en binôme évalués par le rendu de projet.
La note du module est la moyenne entre celle de l'examen écrit et la note de projet.
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Le coefficient de l'UE est : 10
La note obtenue rentre dans le calcul de votre GPA.
La note obtenue est classante.
Pour les étudiants du diplôme Programmes d'échange internationaux
Vos modalités d'acquisition :
- Cours en amphi évalué par un examen écrit, qui peut être rédigé en anglais (sujet fourni dans les deux langues).
- TPs suivi d'un projet en binôme évalués par le rendu de projet.
La note du module est la moyenne entre celle de l'examen écrit et la note de projet.
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
La note obtenue rentre dans le calcul de votre GPA.
Pour les étudiants du diplôme Non Diplomant
Vos modalités d'acquisition :
- Cours en amphi évalué par un examen écrit.
- TPs suivi d'un projet en binôme évalués par le rendu de projet.
- Cours en amphi évalué par un examen écrit classant
- TPs suivi d'un projet en binôme évalués par le rendu de projet.
La note du module est la moyenne entre celle de l'examen écrit et la note de projet.
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Programme détaillé
- Concepts du langage C++: types et syntaxe
- Modèle mémoire
- Bonnes pratiques de développement
- Programmation générique et efficace
- Programmation interactive, GUI
- Coordonnées projectives
- Pipeline de rendu graphique
- Programmation GPU, langage de shaders
- Modélisation de surfaces
- Animation de formes 3D
- Simulation physique
- Visualisation scientifique