Sommaire
Page principale
Partie 1 : Présentation du langage et premier essais
1 Un peu d'histoire
2 Pourquoi commencer avec du C++ ?
3 Outils à utiliser pour commencer le cours
3.1 L'éditeur de texte
3.2 La console (enfin le terminal)
3.3 Un programme qui fait les deux
3.4 Un compilateur
3.5 Les environnements de développement (IDE)
4 Présentation du langage
4.1 La syntaxe
4.1.1 Appel d'une fonction
4.1.2 Les choses à faire et à ne pas faire
4.2 Les différents type de variables
4.2.1 Les types standards
4.2.2 Les types standards non signés
4.2.3 Les types énumérés
4.2.4 Les structures
4.2.5 Différences entre les structures en C et en C++
4.2.6 Attention à la copie des structures
4.2.7 Les classes
4.3 Les opérateurs
4.3.1 Les opérateurs arithmétique
4.3.2 Les opérateurs de fainéant
4.3.3 Opérateur d'incrémentation et de décrémentation
4.3.4 Opérateurs de comparaison
4.3.5 Les opérateurs logiques
4.3.6 Les opérateurs logique de fainéant
4.3.7 Opérateur de flux
4.3.8 Encore d'autre opérateurs
4.3.9 Les opérateurs de caste
4.4 Les conditions
4.4.1 Le mot clé if
4.4.2 Le mot clé else
4.4.3 Quand enlever les accolades ?
4.4.4 Les conditions en cascade
4.5 Les boucles
4.5.1 La boucle for
4.5.2 La boucle while
4.5.3 La boucle do-while
4.6 Les tableaux
4.6.1 Vous avez dis allocation ?
4.6.2 Allocation statique
4.6.3 Allocation dynamique en C
4.6.4 Allocation dynamique en C++
4.6.5 Parcourir un tableau
4.7 Introduction aux pointeurs
4.7.1 Pointeur vers une variable
4.7.2 Pointeur pour faire un tableau
4.7.3 Attention à l'initialisation
4.7.4 Intérêt des pointeurs
4.8 Créer des fonctions
4.8.1 Un exemple général
4.8.2 Un petit exemple
4.8.3 Corps de la fonction
4.8.4 Paramètre passés à la fonction
4.8.5 Renvoyer un paramètre avec une fonction
4.8.6 Renvoyer plusieurs paramètres avec une fonction
4.8.7 Prototype de fonctions
4.8.8 Implémentation complète de fonctions
4.8.9 Conseil pour écrire les fonctions
4.9 Les macros
5 Un programme minimal enfin de la pratique
5.1 Écriture du programme
5.1.1 Le programme
5.1.2 La traduction
5.2 Compilation du programme
5.3 Exécution du programme
6 Les librairies standards
6.1 La librairie standard du C
6.1.1 L’incluse de base
6.1.2 Écrire un texte dans la console
6.1.3 Écrire un nombre dans la console
6.1.4 Récupérer une valeur dans la console
6.1.5 Exemple avec un pointeur en C
6.2 La librairie standard du C++
6.2.1 Include de la librairie standard du C++
6.2.2 Écrire dans la console
6.2.3 Donner des variables à son programme
6.2.4 Enlever les std::
6.3 Le type std::string du C++
6.3.1 Un premier exemple
6.3.2 La concaténation
6.3.3 Et si on faisait bugger les strings
6.4 Les std::vector et les std::list
6.4.1 Présentation et différences
6.4.2 Les includes à utiliser
6.4.3 Déclaration
6.4.4 Parcourir une std::list ou un std::vector : les itérateurs
6.4.5 Parcourir une std::list ou un std::vector à l'envers : le reverse_iterator
6.4.6 Récupérer le premier élément
6.4.7 Récupérer le dernier élément
6.4.8 Effacer le premier élément
6.4.9 Effacer le dernier élément
6.4.10 Le mot clé typedef
6.4.11 Un peu de doc
6.5 La documentation
6.5.1 Utiliser la documentation
6.5.2 Rajouter de la documentation
7 Des exemples un peut plus rigolos
7.1 Passer des paramètres à son programme
7.1.1 La norme
7.1.2 Écriture du programme
7.1.3 Compilation du programme
7.1.4 Exécution du programme
7.2 Faire une barre de chargement dans la console
7.2.1 Comment faire ?
7.2.2 Écriture du programme
7.2.3 Compilation du programme
7.2.4 Exécution du programme
7.2.5 Optimisation
7.3 Lire un fichier texte ligne par ligne en C ou en C++
7.3.1 Le fichier à inclure
7.3.2 Comment faire ?
7.3.3 Écriture du programme
7.3.4 Compilation du programme
7.3.5 Exécution du programme
7.4 Lire un fichier texte caractère par caractère
7.4.1 Comment faire ?
7.4.2 Écriture du programme
7.4.3 Compilation du programme
7.4.4 Exécution du programme
7.5 Écrire un fichier texte en C
7.5.1 Comment faire ?
7.5.2 Écriture du programme
7.5.3 Compilation du programme
7.5.4 Exécution du programme
7.6 Écrire un fichier texte en C++
7.6.1 Comment faire ?
7.6.2 Écriture du programme
7.6.3 Compilation du programme
7.6.4 Exécution du programme
7.6.5 Documentation de ofstream
7.7 Pourquoi faut-il tester si un fichier à bien été créé ?
7.8 Mettons de la couleur
7.8.1 Comment faire ?
7.8.2 Un premier essai
7.8.3 Écriture du programme
7.8.4 Compilation du programme
7.8.5 Exécution du programme
8 Quand le compilateur râle
9 Un petit mot sur la compilation
9.1 Options de compilation
10 Passer des macros à son programme
10.1 Comment faire ?
10.2 Les tests à faire
10.3 Les conditions simples
10.4 La macro #else
10.5 Le programme
10.6 Changer l'appel à une fonction avec une macro
Partie 2 : Compilation plus simple avec CMake
1 Introduction à la précompilation
2 Pourquoi utiliser CMake ?
3 Utilisation de base
4 Linker son programme aux libraires dont il dépend
5 Donner des options de compilation
6 Les variables globales de CMake
7 Définir des variables
8 Installer son programme
8.1 Installation de l'exécutable
8.2 Installation des ressources du programme
8.2.1 Les fichiers simples
8.2.2 Les fichiers exécutables (scripts)
8.2.3 Un dossier entier
9 Installer une librairie
9.1 Introduction
9.2 Créer une librairie statique
9.3 Créer une librairie dynamique
9.4 Installer les librairies
10 Comment tester si une librairie en présente sur le système ?
10.1 Tester la présence des headers
10.2 Tester la présence de la librairie compilée
10.3 Tester la présence de la librairie complète
11 Générer un fichier
12 Générer la documentation de son programme
13 Générer le Doxyfile et le index.html de son programme
13.1 Le fichier Doxyfile.cmake
13.2 Le fichier CMakeLists.txt
13.3 Le dossier src
13.3.1 Le fichier main.cpp
13.3.2 Le fichier CMakeLists.txt
13.4 Le dossier doc
13.4.1 Le fichier index.html.cmake
13.4.2 Le fichier CMakeLists.txt
13.5 Utilisation de CMake
13.6 Compilation et installation avec Make
13.7 Allons voir le résultat
14 Documentation sur CMake
Partie 3 : Programmation Orienté Objet (POO pour les intimes)
1 Introduction
2 Un exemple
2.1 Le fichier .h
2.1.1 Gérer les inclusions multiples
2.1.2 Les dépendances de la classe
2.1.3 Définition du type de Shadok
2.1.4 La classe Shadok proprement dite
2.1.5 Les méthodes obligatoires
2.1.6 Le constructeur de copie
2.1.7 La méthode parler
2.1.8 La méthode pomper
2.1.9 Les attributs de la classe Shadok
2.1.10 Les fonctions d'initialisation des variables.
2.2 Le fichier .cpp
2.2.1 La base de l'écriture du .cpp
2.2.2 Le constructeur
2.2.3 Le constructeur de copie
2.2.4 Le destructeur
2.2.5 Les setteurs
2.2.6 La méthode parler
2.2.7 La méthode pomper
2.2.8 Résumons le situation
2.3 Une première utilisation
2.3.1 Écriture d'un fichier main.cpp
2.3.2 La compilation avec g++
2.3.3 La compilation avec CMake
2.3.4 Modification du programme : test de la copie
2.4 Redéfinir les opérateurs sur la classe
2.5 Opérateurs propres à la classe
2.5.1 Redéfinition de l'opérateur =
2.5.2 Écrire une fonction de copie
2.6 Opérateur ami de la classe
2.6.1 Redéfinition de l'opérateur d'égalité ==
2.6.2 Redéfinition de l'opérateur d'inégalité !=
2.6.3 Redéfinition de l'opérateur de flux sortant
2.6.4 Redéfinition de l'opérateur de flux entrant
2.6.5 Récapitulation des modifications
2.7 La surcharge des fonctions
2.7.1 Surcharger le constructeur
2.8 La surcharge des opérateurs
2.8.1 Surcharger l'opérateur de la classe <<
2.9 Récapitulons ce que l'on vient de faire
2.9.1 Le fichier complet shadok.h
2.9.2 Le fichier complet shadok.cpp
2.10 Testons le résultat
2.11 Les paramètres par défaut
2.11.1 Prototype de fonctions avec des paramètres par défaut
2.11.2 Les paramètres par défaut du constructeur
2.12 Récapitulons les modifications
2.12.1 Le fichier shadok.h
2.12.2 Le fichier shadok.cpp
3 L'héritage entre les classes
3.1 Introduction
3.2 Un exemple pratique
3.2.1 Ce que nous allons faire
3.2.2 La classe Crustace
3.2.3 La classe Crevette
3.2.4 Écriture d'un fichier main.cpp pour faire des testes
3.2.5 Écriture du CMakeLists.txt
3.2.6 Une première utilisation
3.2.7 Le mot clé virtual pour le destructeur
3.2.8 La classe Langouste
3.2.9 Le nouveau fichier CMakeLists.txt
3.2.10 Le nouveau fichier main.cpp
3.2.11 La re-compilation
4 Les fonctions virtuelles
4.1 Un premier test
4.2 Appel des fonctions parler sur des pointeurs de Crustace
4.3 Utilisation du mot clé virtual
4.3.1 Modification du fichier crustace.h
4.3.2 Modification du fichier crevette.h
4.3.3 Modification du fichier langouste.h
4.3.4 Testons le résultat
4.4 Intérêt d'utiliser des fonctions virtuelles
5 Les fonctions virtuelles pures et les classes virtuelles pures
6 Une classe complète : Vecteur
6.1 Ce que nous attendons d'un Vecteur
6.2 Le fichier vecteur.h
6.2.1 Les includes de base
6.2.2 Les constructeurs
6.2.3 Le destructeur
6.2.4 Les fonctions de sauvegarde
6.2.5 Les fonctions d'initialisation par chaînes
6.2.6 L'opérateur = du Vecteur
6.2.7 Les opérateurs de fainéant de la classe Vecteur
6.2.8 L'opérateur - du Vecteur
6.2.9 Différentes fonctions pour retourner la norme d'un Vecteur
6.2.10 Renvoyer les valeurs absolues des composantes
6.2.11 Renvoyer les composantes (x, y et z)
6.2.12 Renvoyer un vecteur sur x, y ou z
6.2.13 Renvoyer un vecteur sur xy, yz ou xz
6.2.14 Renvoyer le vecteur unitaire du Vecteur
6.2.15 Initialiser toutes les composantes (x, y, z)
6.2.16 Initialiser les composantes x, y et z séparément
6.2.17 Ajouter des valeurs aux composantes x, y et z
6.2.18 Initialiser le Vecteur avec des angles de rotation
6.2.19 Récupérer l'angle théta
6.2.20 Rotation et réflexion d'un Vecteur
6.2.21 Les opérateurs amis d'un Vecteur
6.2.22 Initialiser un Vecteur avec une chaîne de caractères
6.2.23 La fonction d'initilaisation du Vecteur
6.2.24 Le fichier vecteur.h en entier
6.3 Le fichier vecteur.cpp
6.3.1 L'include de base
6.3.2 Les constructeurs
6.3.3 Le destructeur
6.3.4 Les fonctions de sauvegarde
6.3.5 Les fonctions d'initialisation par chaînes
6.3.6 L'opérateur = du Vecteur
6.3.7 Les opérateurs de fainéant de la classe Vecteur
6.3.8 L'opérateur - du Vecteur
6.3.9 Différentes fonctions pour retourner la norme d'un Vecteur
6.3.10 Renvoyer les valeurs absolues des composantes
6.3.11 Renvoyer un vecteur sur x, y ou z
6.3.12 Renvoyer un vecteur sur xy, yz ou xz
6.3.13 Renvoyer le vecteur unitaire du Vecteur
6.3.14 Initialiser toutes les composantes (x, y, z)
6.3.15 Initialiser les composantes x, y et z séparément
6.3.16 Ajouter des valeurs aux composantes x, y et z
6.3.17 Initialiser le Vecteur avec des angles de rotation
6.3.18 Récupérer l'angle théta
6.3.19 Rotation et réflexion d'un Vecteur
6.3.20 Les opérateurs amis d'un Vecteur
6.3.21 Initialiser un Vecteur avec une chaîne de caractères
6.3.22 La fonction d'initilaisation du Vecteur
6.3.23 Le fichier vecteur.h en entier
6.4 Le fichier main.cpp
6.5 Le fichier CMakeLists.txt
6.6 La compilation
6.7 Les tests
6.8 Récapitulatif du projet
6.9 il reste encore un minuscule petit détail
Partie 4 : De l'affichage en 2D avec SDL
1 Introduction
2 La fenêtre avec SDL
3 Un peu de précision côté graphisme
3.1 Créer une SDL_Surface*
3.2 Positionner cette nouvelle surface
3.3 Charger des images avec SDL_image et SDL_gfx
3.4 SDL_image
3.5 SDL_gfx
3.6 Vite un exemple
3.7 Icon de l'application
3.8 Rendre une couleur transparente
3.9 Transparence d'une image
3.10 Écrire du texte avec SDL_ttf
4 Les événements
4.1 Le clavier
4.2 La souris
5 Exemple de programmation objet
5.1 Cahier des charges de la classe SDL_Application
5.1.1 Utilisation des sdt::map
5.1.2 Gestion du temps avec SDL_GetTicks
5.1.3 Écriture de sdl_application.h
5.1.4 Écriture de sdl_application.cpp
5.2 Utilisation de la classe SDL_Application
5.2.1 Écrire apptest.h
5.2.2 Écrire apptest.cpp
5.2.3 Écrire le main.cpp
5.2.4 Écrire le CMakeLists.txt
5.2.5 Gérer ses images avec une bibliothèque
Partie 5 : De la 3D avec OpenGl 2.3
1 Présentation d'OpenGl
2 Installation
3 Le programme de base
4 Les bases de OpenGl
5 Faire de la 3D
6 Les différentes formes OpenGl
6.1 La sphère
6.2 Le cylindre creux
6.3 Le cône
6.4 L'anneau partiel
6.5 L'anneau complet
6.6 Le Disque complet
6.7 Le cube
7 Rotations et translations
7.1 La translation du repère
7.2 La rotation du repère
8 Exemple de programmation objet
8.1 La classe Vecteur
8.1.1 Le fichier vecteur.h
8.1.2 Le fichier vecteur.cpp
8.2 Créer une classe Camera
8.2.1 Cahier des charges
8.2.2 Écrire camera.h
8.2.3 Écrire camera.cpp
8.3 Rédaction d'une classe SdlOpenglApp (pour qu'elle face toutes les initialisations toute seule)
8.3.1 Cahier des charges
8.3.2 Un petit plus avant de commencer
8.3.3 Écrire sdlopengl_app.h
8.3.4 Écrire sdlopengl_app.cpp
8.4 Écrire la classe qui va hérité de SdlOpenglApp : AppTest
8.4.1 Écrire apptest.h
8.4.2 Écrire apptest.cpp
8.5 Écrire le main.cpp
8.6 Écrire le CMakeLists.txt
8.7 La compilation
8.8 Les premiers résultats
8.9 Plaquer des textures
8.9.1 Un premier essai
8.9.2 Améliorons la situation
8.9.3 Plaquer des textures sur des surfaces carrée ou triangulaire
8.9.4 Répétition de textures
9 Optimiser l'affichage : les glLists
9.1 Introduction
9.2 Utilisation
9.3 Faisons un petit exemple
9.3.1 Modification du programme avec les textures
9.3.2 Compilation
9.3.3 Exécution
Partie 6 : Les librairies et les variables globales
1 Les librairies
1.1 Introduction
1.2 Les librairies statiques
1.3 Les librairies dynamiques
2 Les variables globales
3 Récuperer le contenu d'une variable globale
Partie 7 : Encore plus fort avec OpenGl 3.1
1 Introduction
2 Installation de OpenGl 3.1
3 Installation de SDL 1.3
4 Razzia sur les fonctions lentes
5 Étude du principe de la 3D (des maths)
6 Les matrices
6.1 Matrices de projection
6.2 Matrices de rotations
6.3 Matrices de translation
6.4 Matrices d'échelle
7 Écriture d'une classe Matrice
7.1 Écriture du fichier Matrice4.h
7.1.1 Le fichier de base
7.1.2 Écriture de la classe Matrice4 dans le fichier Matrice4.h
7.1.3 Les fonctions mathématiques qui vont vous rappeler OpenGl 2
7.1.4 Le push et le pop de Matrice4
7.1.5 Une fonction pour récupérer la valeur de la matrice
7.1.6 Les opérateurs sur la Matrice4
7.1.7 Les opérateurs amis de la Matrice4
7.1.8 Les fonctions d'initialisation, de copie et de création, privées de la classe Matrice4
7.1.9 Les attributs de la classe Matrice4
7.1.10 Définition d'une matrice nulle et d'une matrice identité
7.1.11 Le fichier Matrice4.h final
7.2 Écriture du fichier Matrice4.cpp
7.2.1 Include de base, matrice nulle et identité
7.2.2 Produit vectoriel et normalisation de vecteur
7.2.3 Constructeurs et destructeurs de Matrice4
7.2.4 Les fonctions d'initialisation de Matrice4
7.2.5 Les fonctions propre aux matrices
7.2.6 Le push, le pop et le dépile
7.2.7 Retourner la valeur de la Matrice4
7.2.8 Les opérateurs de la Matrice4
7.2.9 Les opérateurs amis de la Matrice4
7.2.10 Initialisation, création et copie de la Matrice4
7.2.11 Le fichier Matrice4.cpp en entier
8 Les tableaux de vertices
9 Les shaders
9.1 Introduction
9.2 Présentation du langage GLSL
9.2.1 Une forte ressemblance avec le C et le C++
9.2.2 Les différents types de variables
9.2.3 Les variables globales
9.3 Le type uniform
9.4 Passer des types simples
9.4.1 Passer des tableaux de vecteurs
9.5 void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
9.6 Les attributs
9.7 Fonctionnement des Shaders
9.8 Le Vertex Shader
9.8.1 Version du shader
9.8.2 Entrées du shader
9.8.3 Sorties du shader
9.8.4 Les matrices : projection et modelview
9.8.5 La fonction main du shader
9.8.6 Le vertex shader en entier
9.9 Le Pixel Shader
9.9.1 Version du shader
9.9.2 Entrée du shader
9.9.3 Sortie du shader
9.9.4 Fonction main du shader
9.9.5 Résumé du shader
9.10 Petit résumé des Shaders
10 Les programmes pour GPU
10.1 Introduction
10.2 Créer l'identifiant du programme GPU
10.3 Initialiser les shaders
10.4 Attacher les shaders à son programme GPU
10.5 Lier son programme GPU aux shaders
10.6 Communiquer avec son programme GPU
10.6.1 Récupérer l'identifiant d'une variable
10.6.2 Passer des variables à son programme
11 Écrivons une classe SimpleCameraGl3
11.1 Le fichier SimpleCameraGl3.h
11.1.1 Le fichier de base
11.1.2 Constructeurs et destructeur de la classe SimpleCameraGl3
11.1.3 La fonction qui dit à la caméra où regarder
11.1.4 Les fonctions d'initialisation de la caméra
11.1.5 Les fonctions pour faire bouger la caméra
11.1.6 Fonctions pour faire tourner la caméra
11.1.7 Modifier la valeur d'un angle
11.1.8 Les fonctions qui renvoient les attributs de la classe SimpleCaméra
11.1.9 Faisons un mode à la première personne
11.1.10 L'opérateur =
11.1.11 Les fonctions privées de la SimpleCameraGl3
11.1.12 Les attributs privés de la classe SimpleCameraGl3
11.1.13 Le fichier SimpleCameraGl3.h en entier
11.2 Le fichier SimpleCameraGl3.cpp
11.2.1 Le début du fichier SimpleCameraGl3.cpp
11.2.2 Les constructeurs et le destructeur
11.2.3 La fonction qui dit où il faut regarder
11.2.4 Les setteurs de la SimpleCameraGl3
11.2.5 Les fonctions pour déplacer la caméra
11.2.6 Les fonctions pour faire tourner la caméra
11.2.7 Les fonctions pour changer les angles de la caméra
11.2.8 Les getteurs de la caméra
11.2.9 La fonction pour le mode à la première personne
11.2.10 L’opérateur = de la SimpleCameraGl3
11.2.11 Les fonctions privées de la classe SimpleCameraGl3
11.2.12 Le fichier SimpleCameraGl3.cpp en entier
11.3 Les fichiers SimpleCameraGl3.h et SimpleCameraGl3.cpp
12 Écrivons une classe PAppSdlOpenGl3
12.1 Le fichier PAppSdlOpenGl3.h
12.1.1 Le fichier de base
12.1.2 Définitions des variables utiles à la classe
12.1.3 Déclaration de la classe, constructeur et destructeur
12.1.4 La méthode qui va exécuter l'application
12.1.5 Testons l'initialisation, le ratio et les fps
12.1.6 Initialiser la matrice de projection de l'application
12.1.7 La fonction qui dit à la classe de ne pas démarrer
12.1.8 Fonctions virtuelles et virtuelles pures
12.1.9 Ajouter des évènements clavier à tester
12.1.10 Un événement s'est-il réalisé ?
12.1.11 Une fonction pour effacer les actions qui ne doivent pas se répéter
12.1.12 Une fonction pour arrêter l'application
12.1.13 Quelques attributs protégés
12.1.14 Les fonctions privées de la classe PAppSdlOpenGl3
12.1.15 Les variables privées de PAppSdlOpenGl3
12.1.16 Le fichier PAppSdlOpenGl3.h complet
12.2 Le fichier PAppSdlOpenGl3.cpp
12.2.1 Un include et une constante
12.2.2 Constructeur et destructeur
12.2.3 La fonction executer
12.2.4 Une fonction virtuelle
12.2.5 Ajouter des événements à tester
12.2.6 Effacer les événements qui ne se répètent pas
12.2.7 La fonction qui arrête l'application
12.2.8 Test de l'initialisation, ratio et fps
12.2.9 Initialisation de la matrice de projection de la classe PAppSdlOpenGl3
12.2.10 La fonction qui va nous sauver en cas de problème
12.2.11 La fonction qui initialise la classe PAppSdlOpenGl3
12.2.12 Récupérer les événements
12.2.13 Le fichier PAppSdlOpenGl3.cpp en entier
12.2.14 Les fichiers PAppSdlOpenGl3.h et PAppSdlOpenGl3.cpp
13 Un exemple d'utilisation simple
13.1 Préparation du projet
13.2 La classe PAppTestSdlGl3
13.2.1 Le fichier PAppTestSdlGl3.h
13.2.2 Le fichier PAppTestSdlGl3.cpp
13.3 Le fichier main.cpp
13.4 Les fichiers CMakeLists.txt
13.5 Compilation du projet
13.6 Exécution du programme
14 Un exemple avec des textures
14.1 Préparation du projet
14.2 Écrire les nouveaux shaders
14.2.1 Le vertex shader
14.2.2 Le fragment shader
14.3 La classe PAppTestSdlGl3
14.3.1 Le fichier PAppTestSdlGl3.h
14.3.2 Le fichier PAppTestSdlGl3.cpp
14.4 Le fichier main.cpp
14.5 Le fichier CMakeLists.txt du dossier src
14.6 Le fichier CMakeLists.txt à la racine du projet
14.7 Compilation du programme
14.8 L’exécution du programme
15 Optimisons tout cela
15.1 Faisons les matrices de projection en C
15.1.1 Les vecteurs à 4 dimension en C
15.1.2 Les matrices à 4 dimension en C
15.1.3 Les matrices de projection OpenGl en C
15.2 Adapter la classe PAppSdlOpenGl3
15.2.1 Modification du fichier PAppSdlOpenGl3.h
15.2.2 Modification du fichier PAppSdlOpenGl3.cpp
15.2.3 Résumé des modifications des fichiers PAppSdlOpenGl3.h et PAppSdlOpenGl3.cpp
16 Le Mipmapping
16.1 Introduction
16.2 Appel des fonctions
16.3 Les modifications à faire à l'initialisation
16.4 Un exemple avec la nouvelle classe PAppSdlOpenGl3
16.4.1 Les petits changements
16.4.2 La compilation
16.4.3 L’exécution du programme
17 Initialiser une forme OpenGl avec un fichier .obj
17.1 Introduction
17.2 Création d'un type pour gérer les objets OpenGl
17.3 Initialisation avec un fichier obj
17.4 Faisons un exemple
Chapitre 1 : Les vertex buffer object
1 Définition
2 Utilité
3 Présentation des fonctions d'utilisation des VBO
3.1 Créer un VBO
3.2 Verrouillage et déverrouillage d'un VBO
3.3 Allocation des données dans la carte graphique
3.4 Transfert des données
3.5 Tester si un VBO à déjà été chargé
3.6 Désallouer un VBO
3.7 Afficher un VBO
3.8 Mise à jour des données
Chapitre 2 : Les Vertex Array Objects
1 Introduction
2 Création d'un VAO
3 Verrouiller un VAO
4 Initialiser les VAO
5 Tester si un VAO est déjà initialisé
6 Destruction d'un VAO
7 Exemple de fonction d'affichage
Chapitre 3 : Les Frame Buffer Objets
1 Définitions
1.1 Les différents types de buffers
1.2 Les Frame Buffers
2 Fonctionnement
2.1 Le Color Buffer
2.2 Le Depth et le Stencil Buffer
2.3 En résumé
3 Un peu de pratique
3.1 Le Color Buffer
3.1.1 Les tâches
3.1.2 Le header
3.1.3 Les anciens constructeurs
3.1.4 Un nouveau constructeur
3.1.5 La méthode chargerTextureVide()
3.1.6 Le problème de la copie de texture
3.1.7 Les attributs
3.1.8 Le chargement
3.1.9 L'opérateur =
3.2 Les Render Buffers
3.2.1 Les tâches
3.3 La classe FrameBuffer
3.3.1 Le header
3.3.2 Les constructeurs et le destructeur
3.3.3 La méthode creerRenderBuffer()
3.3.4 Configuration
3.4 Le Frame Buffer
3.4.1 La méthode charger()
3.4.2 La génération d'identifiant
3.5 Le Color Buffer
3.6 Le Depth et le Stencil Buffer
3.7 Association (Attachment)
3.8 Vérification de la construction
3.8.1 Petit rajout
3.8.2 Le destructeur
3.8.3 Quelques getters
4 Utilisation
4.1 Quelques explications
4.2 Les passes
4.3 La résolution d'un FBO
4.4 Les matrices
5 Première utilisation
5.1 Création du FBO
5.2 Les matrices
5.3 La première passe
Partie 8 : Introduction à Blender
Chapitre 1 : L'interface
Chapitre 2 : Les modes de Blender
Chapitre 3 : Les différents points de vue
1 Le positionnement automatique de la caméra
2 L'orientation de la caméra
3 Passage de la vue 2D à la vue 3D
Chapitre 4 : Sélection, déplacement, échelle et rotation
1 Sélection
1.1 Sélection simple
1.2 Sélection multiple
1.3 Sélection multiple de fainéant
1.4 Sélection d'un groupe de vertices (en mode édition, edit mod)
1.5 Sélection de tout les vertices, lignes ou faces d'un mesh (en mode édition, edit mod)
2 Déplacement
2.1 Contraindre le déplacement sur un axe
2.2 Augmenter la précision
3 Échelle (Scale)
3.1 Contraindre l'échelle sur un axe
3.2 Augmenter la précision
4 Rotation
4.1 Contraindre l'échelle sur un axe
4.2 Augmenter la précision
Chapitre 5 : Le curseur 3D
Chapitre 6 : Autres raccourcis
Chapitre 7 : L'UV mapping
Chapitre 8 : Faire de l'herbe réaliste
1 Préparer le terrain
2 La caméra
3 Les particules
4 Les matériaux
5 Éclairage
Chapitre 9 : Créer une île
1 Activer le générateur de terrains
2 Générer le terrain
3 Positionner le Soleil et la caméra
4 La texture de notre île
4.1 La texture du sable
4.2 La texture de la terre
4.3 Texture de la roche
4.4 Mélanger les textures
5 Faire du Bump mapping
5.1 Exporter l'image de l’île
5.2 Importer cette image dans Blender
6 Exporter un fichier .obj
7 Ajouter un océan
7.1 Ajoutez un simple plan
7.2 Appliquez un modifier
7.3 Ajouter une texture
7.4 Ajouter une texture
7.5 Améliorer la texture
8 Donner l'impression que l’île est grande
9 Ajouter de la rugosité
10 Ajouter des rochers
10.1 Ajouter un Cube
10.2 Ajouter des Modifiers
10.3 Le matériaux du Rocher
10.4 La texture du Rocher
10.5 Changer la forme du Rocher
10.6 Dupliquer le Rocher
10.7 Mettre les rochers sur l’île
10.7.1 Contrôler où on met les rockers
10.7.2 Orientation et Taille des rochers
Chapitre 10 : Les scripts python avec Blender
Chapitre 11 : Importer la lib qu'il faut
Chapitre 12 : Récupérer un objet en particulier
1 Récupérer l'objet avec son nom
2 Récupérer les objets sélectionnés
Chapitre 13 : Le type Mesh
1 Les variables utiles
2 Tester si l'objet a une texture en UV mapping
Chapitre 14 : Écrire dans un fichier un Cube
1 Commençons par le nom
2 Exportation des vertices et des faces
Chapitre 15 : Agir sur la scène
1 Ajouter un objet
1.1 Ajouter une pyramide dans Blender
1.2 Ajouter des formes prédéfinies
1.3 Ajouter des formes texturées
Chapitre 16 : Les variables de contexte
1 Savoir dans quel mode on est
Chapitre 17 : Modifier l'API de Blender avec Python
1 Introduction
2 Accès aux données
2.1 Accéder aux blocs de données
2.2 Les collections
2.3 Accès aux attributs
2.4 Création et suppression de données
2.5 Propriétés propres
3 La variable Context
4 Les opérateurs
4.1 L'opérateur Poll()
5 Intégration
5.1 Un exemple d'opérateur
5.2 Ajouter un panel
6 Les types
6.1 Les types natifs
6.2 Types internes
6.3 Types pour les maths
7 Animation
Partie 9 : Faire des applications de bureautique avec Qt
1 Introduction
1.1 Présentation de Qt
1.2 Nouveautés qu'apporte Qt au C++
1.3 Qt et CMake
1.4 Installation de Qt
2 Un Programme de base
2.1 Le fichier main.cpp
2.2 Le fichier CMakeLists.txt
2.3 La compilation
2.4 Le résultat
3 Faire sa fenêtre à la main
3.1 Le principe de base
3.2 La classe de base
3.2.1 Le fichier FenetreTest.h
3.2.2 Le fichier FenetreTest.cpp
3.3 Le fichier main.cpp
3.4 Le fichier CMakeLists.txt
3.5 Compilation du programme
3.6 Exécution du programme
3.7 Ajoutons un menu
3.7.1 Le principe
3.7.2 La modification du fichier FenetreTest.h
3.7.3 La modification du fichier FenetreTest.cpp
3.7.4 Compilons le tout
4 Faisons un éditeur de texte
4.1 Un petit point sur l'encodage du texte
4.2 Le fichier TextEditor.h
4.3 Le fichier TextEditor.cpp
4.4 Le fichier main.cpp
4.5 Le fichier CMakeLists.txt
4.6 La compilation du programme
4.7 L'exécution du programme
5 Amélioration de l'éditeur de texte
5.1 Les défauts notre éditeur de texte
5.2 Amélioration de la présentation
5.3 La structure d'une QMainWindow
5.4 Utilisation de la barre d'outil
5.4.1 Les chemins vers les icons du programme
5.4.2 L'action nouveau... que nous avons oublié
5.4.3 Ajout des icons aux QAction
5.4.4 Ajout des boutons dans la barre d'outil
5.4.5 Compilation du programme
5.4.6 Exécution du programme
5.5 Ajout d'un icon à l'éditeur de texte
5.6 Ajout d'un titre à l'application
5.7 Utilisation de la barre de status
5.8 Changement du style du texte
6 Faisons un générateur de classe
7 Faisons un navigateur
8 Utilisation de QtDesigner (truc de fainéant)
9 QtDesigner ne fait pas tout, exemple où il est inutile
Partie 10 : Utilisation de Qt avec OpenGl
1 Introduction
2 La classe QGLWidget
3 Héritage de QGLWidget
3.1 Création de la fenêtre
3.2 Création de la caméra
4 Utilisation de tout ça dans une application
Partie 11 : Aller encore plus loin avec Qt (Phonon)
1 Introduction
2 Et si on faisait un lecteur audio ?
3 Et un lecteur vidéo ?
Partie 12 : Documenter son programme avec Doxygen
Partie 13 : Sauvegarder son programme avec GIT
Chapitre 1 : Les commandes de base
Chapitre 2 : Sauvegarder les modifications apportés au projet
Chapitre 3 : Créer une sauvegarde mirroir
Chapitre 4 : Clôner son projet
Chapitre 5 : Synchronisation des différentes sauvegardes
Chapitre 6 : État du dépôt
Chapitre 7 : Gestion des fichiers
1 Gestion des commits
Chapitre 8 : Commandes d'annulation
Chapitre 9 : Utilisation avancée
1 Gestion des branches
2 Récupération des changements
Chapitre 10 : Exemples d'utilisations
1 Utilisation à deux
1.1 Création du dépos
1.2 Le clonage du dépos d'Alice
1.3 Le clonage du dépos vers Bob
1.4 Mise au point sur les chemins vers les dépos
1.5 Bob change quelque chose
1.6 Alice change quelque chose
1.7 Alice et Bob changent simultanément quelque chose
1.7.1 Les modifications d'Alice
1.7.2 Les modifications de Bob
1.7.3 Les push sur Repository
1.7.4 Historique des modifications
Partie 14 : Vous avez dit coloration syntaxique ?
1 Présentation de QScintilla
2 Un exemple
Partie 15 : Optimisation : technique et outils
1 Introduction
2 Outils comme Valgrind
2.1 Installation
2.2 Utilisation
2.3 Que fait Valgrind ?
2.4 Tout devient clair
2.5 Exemple d'utilisation de Valgrind
3 Techniques de base de l'optimisation
3.1 Les fonctions lentes
4 Un exemple
4.1 Les inlines
4.1.1 Qu'est-ce qu'un inline
4.1.2 Ne pas sombrer dans l’excès
5 Un exemple concret, la multiplication de matrices
5.1 Calculer le temps que va mettre notre fonction
5.1.1 Le fichier calcul.h
5.1.2 Le fichier calcul.c
5.1.3 Le fichier main.c
5.1.4 Le fichier CMakeLists.txt
5.2 L'algorithme que l'on apprend en math
5.3 Le premier résultat
5.3.1 Inversion de boucle
5.3.2 Utilisation de mathématiques rapide
5.3.3 Déroulage de boucle
5.3.4 Déroulage de boucles et mathématiques rapides
5.3.5 Vectorisation
5.3.6 Influence sur la taille de la matrice
5.3.7 Une dernière modification
6 Techniques avancées et retour au C (enfin retour)
6.1 Lenteur des std::list
6.2 Lenteur des std::vector
6.3 Faire des tableaux statiques
6.3.1 Problème des tableaux à plusieurs dimensions
6.3.2 Utiliser des tableaux à une dimension
6.3.3 Utilisation d'un tableau à une dimension comme un tableau à 2 dimensions
Partie 16 : Programmation objet avancée les Templates
Chapitre 1 : Introduction
Chapitre 2 : Écrire une fonction Template
Chapitre 3 : Réécrivons les std::list
1 Ce que doit faire notre classe
2 La classe PElement
2.1 Le fichier PElement.h
2.2 Le fichier PElement_impl.h
3 La classe PIterator
3.1 Le fichier PIterator.h
3.2 Le fichier PIterator_impl.h
4 La classe PList
4.1 Le fichier PList.h
4.2 Le fichier PList_impl.h
5 Le fichier main.cpp
6 Les fichiers CMakeLists.txt
7 La compilation
8 Exécution du programme
Chapitre 4 : La puissance des expressions templates
1 Introduction
2 La transformation du programme
3 Le principe des expressions templates
4 Une première approche
4.1 Les opérateurs unaires
4.2 Les opérateurs binaires
4.3 Simplification de la surcharge des opérateurs
4.4 Surcharge des opérateurs indépendants de PVector
4.5 Surcharge des opérateurs dépendants de PVector
4.6 La fonction main
4.7 Le fichier main.cpp complet
4.8 Compilation et exécution du programme
4.9 Explication du fonctionnement
4.10 Réécrivons tout cela un peu mieux
4.10.1 La partie facile
4.10.2 La partie plus difficile
4.10.3 Le fichier PBaseExpressionTemplateIterator.h complet
4.10.4 Le nouveau fichier main.cpp complet
4.10.5 Compilation et exécution du programme
5 Une approche avec des classes
5.1 La structure expression
5.2 Les opérateurs
5.2.1 L'opérateur d'addition
5.2.2 L'opérateur de soustraction
5.2.3 L'opérateur de négation
5.2.4 L'opérateur de multiplication
5.2.5 L'opérateur de division
5.3 La classe qui décrit le Vecteur
5.4 Le fichier main.cpp
5.5 Compilation et exécution du programme
6 Comparaison Expressions Templates
6.1 Test de la méthode avec des itérateurs
6.2 Test de la méthode avec des crochets
6.3 Le fichier CMakeLists.txt
6.4 Compilation et exécution
Partie 17 : Un peu de réseau, les sockets UNIX
1 Introduction
2 Une histoire de protocole
3 Envoyer des données
4 Recevoir des données
5 Faisons un chat avec les Sockets-UNIX
5.1 La librairie
5.1.1 Fonction qui dégomme tout les processus morts
5.1.2 La fonction qui récupère l'adresse du serveur pour le client
5.1.3 La fonction qui créée la socket du serveur
5.1.4 La fonction qui créée la socket du client
5.1.5 Mettons toutes les fonctions dans la librairie
5.1.6 Le fichier CMakeLists.txt
5.2 Le fichier qui définit le port pour communiquer
5.3 Le server
5.3.1 Le main.cpp du server
5.3.2 le fichier CMakeLists.txt du server
5.4 Le client
5.4.1 Le main.cpp du client
5.4.2 Le fichier CMakeLists.txt du client
5.5 Le fichier CMakeLists.txt de la racine du projet
5.6 La compilation
5.7 Exécution du programme
Partie 18 : Programmation sur cartes graphiques avec CUDA
Chapitre 1 : Installation de CUDA
Chapitre 2 : GPGPU
Chapitre 3 : CUDA
1 Pilote
2 Runtime
3 Bibliothèques
Chapitre 4 : Un peu de vocabulaire
Chapitre 5 : CPU et GPU
1 Survol de quelques différences
2 Précision des calculs
3 GPU
3.1 Mémoires
3.1.1 Mémoire globale
3.1.2 Mémoire locale
3.1.3 Mémoire constante
3.1.4 Mémoire des textures
3.1.5 Mémoire partagée
3.1.6 Registres
3.1.7 Mémoire système
3.2 Shaders
3.2.1 Plus de précisions
3.2.2 Limites
4 CPU
4.1 Mémoire cache
4.2 Pipelines d'instructions
4.3 Exécution superscalaire
Chapitre 6 : Les mains dans le cambouis
1 Les kernels
2 Qualificateurs de kernels
2.1 __global__
2.2 __device__
2.3 __host__
3 Configuration de l'exécution
3.1 Dg
3.2 Db
3.3 Ns
3.4 S
4 Qualificateurs de variables
4.1 __device__
4.2 __constant__
4.3 __shared__
4.4 Généralités
5 Compilation
Chapitre 7 : Le modèle de programmation
1 Parallélisme des données
2 Structure du programme
3 Allocation et dés-allocation de pointeur et copie de données
3.1 Allocation de pointeur
3.2 Dés-allocation de pointeur
3.3 Copie de données
4 Parlons de choses matérielles
5 Addition de vecteurs
5.1 Écriture du kernel
5.2 Fonction qui initialise un vecteur
5.3 Fonction qui affiche un vecteur
5.4 Fonction qui garantie qu'il n'y a pas eu de problème
6 L'exemple : la multiplication de matrices carrées
6.1 Le fichier calcul_cuda.h
6.2 Le fichier calcul_cuda.cu
6.3 Le fichier main.c
6.4 Le fichier CMakeLists.txt
6.5 La compilation
6.6 L'exécution du programme
7 Calcul d'une réduction somme
7.1 Le fichier reduce.cu
7.1.1 Les includes
7.1.2 Fonction qui initialise un vecteur
7.1.3 Fonction qui affiche un vecteur
7.1.4 Fonction qui fait le calcul sur CPU
7.1.5 Fonction qui vérifie le calcul
7.1.6 Fonction qui garantie qu'il n'y a pas eu de problème
7.1.7 La fonction main
7.2 Le fichier reduce.cu final
7.3 Le fichier CMakeLists.txt
7.4 Compilation et exécution
8 Séparer les opérations à effectuer
Partie 19 : On a pas tout dit sur les fonctions
Chapitre 1 : Pointeur vers une fonction
Chapitre 2 : Définir un type de fonction
Chapitre 3 : Tableau de fonctions
1 Créer un tableau de fonction statique
1.1 Avec un typedef
1.2 Sans typedef
2 Créer un tableau de fonctions dynamiques
Chapitre 4 : Faisons quelques exemples
1 Utilisons un tableau statique en C
2 Utilisons un tableau statique en C d'une autre façon
3 Allouer un tableau de fonctions dynamique en C
Chapitre 5 : Une petite mise en garde
Partie 20 : Charger une librairie dynamiquement dans son programme
Chapitre 1 : Introduction
Chapitre 2 : Présentation des fonctions de dl
1 La fonction dlopen
Chapitre 3 : Des exemples
1 L'exemple simple de la doc
1.1 Écriture du fichier main.c
1.2 La compilation avec gcc
1.3 La compilation avec CMake
1.4 Conclusion
2 Générer des nombres avec une fonction
2.1 Le programme en morceau
2.1.1 La lib dynamique
2.1.2 Le main du programme
2.1.3 L'exécution du programme
2.2 Le programme plus évolué
2.2.1 Les nouvelles définitions au début du fichier main.cpp
2.2.2 La fonction qui écrit le plugin
2.2.3 La fonction qui compile le plugin
2.2.4 La fonction qui demande l'expression à l'utilisateur
2.2.5 La fonction main
2.2.6 Le nouveau fichier main.cpp
2.2.7 Écriture du CMakeLists.txt
2.2.8 Compilation du programme
2.2.9 Exécution du programme
2.3 Amélioration du programme