1/17
1. OpenGL
Cette partie présente une introduction sous forme de tutoriel à OpenGL.
OpenGL permet de mettre en oeuvre de manière très efficace et générique le "pipe-line de rendu graphique". Plus précisément, OpenGL consiste en un ensemble de fonctionnalités permettant de communiquer directement avec la carte graphique (GPU - Graphics Processing Unit), offrant ainsi une approche optimale pour afficher des données 3D en temps-réel.
Dans ces TD, nous allons mettre en oeuvre des appels OpenGL dans un cadre de développement en C++ , qui consistue le duo standard du monde professionnel pour obtenir des performances optimales lors de l’affichage et la manipulation de données graphique.
Rem. L’utilisation d’OpenGL et C++ correspond à un duo complexe dont la mise en oeuvre n’est pas immédiate (langage et fonctionnalités très bas niveau: proche du hardware). Il vous permet par contre, une fois assimilé, de comprendre de manière très précise comment sont mis en place les affichages graphiques 3D temps-réels (moteurs de jeux vidéos, réalité virtuelle, grandes masses de données graphiques, etc.).
Objectif général de la séance
Cette seconde séance de TP a pour objectif de vous présenter l’utilisation de base d’OpenGL
-
Mise en place générale: création d’une fenêtre, envoi de données sur la carte graphique, affichage de primitives, et paramètres génériques des shaders
-
Implémentation des notions graphiques: Maillage triangulé, perspective, illumination, notion de caméra et d’évènement utilisateur.
Cette séance illustre l’utilisation du pipe-line de rendu graphique dans le cas simple d’affichage d’un triangle (ou deux).
Lors de la troisième séance de TP (ainsi que des suivantes), vous disposerez d’une bibliothèque de code dédiée à ce cours permettant de manipuler plus aisément des objets 3D. Cette bibliothèque, dont l’objectif est d’être entièrement compréhensible, fera appel directement aux fonctions de bases d’OpenGL que vous allez voir cette séance (et aux notions de C++ vues lors de la 1ère séance).
Remarques de détails sur OpenGL
-
OpenGL est une description très bas niveau de la communication entre votre code C++ et la carte graphique (ex. pas de caméra, lumière, interaction utilisateur, etc. qui doivent être modélisées et codées entièrement par le développeur - voir suite du tutoriel).
-
Cela rend l’utilisation d’OpenGL complexe \(\Rightarrow\) Il est nécessaire de passer du temps à comprendre le fonctionnement d’OpenGL avant de faire des scènes 3D avancées.
-
D’un autre côté, cela permet également son extrême efficacité (la carte graphique n’exécute que ce qu’on lui demande) et généricité (on peut faire du graphique, mais également du HPC grâce à OpenGL - parfois appelée GPGPU: General Purpose computing on GPU), expliquant ainsi sa large utilisation à la fois dans l’industrie et la recherche.
-
-
Au delà d’OpenGL qui propose des fonctionnalités multiplateformes ouvertes, vous pourrez rencontrer également:
-
Direct3D - équivalent d’OpenGL dédié à Windows uniquement (base graphique de DirectX)
-
Metal - équivalent d’OpenGL dédié à Mac uniquement
-
Vulkan - successeur générique d’OpenGL apparu en 2016 (encore plus bas niveau qu’OpenGL)
-
Notez que les affichages 3D dans les navigateurs utilisent en majorité WebGL qui correspond à un sous-ensemble des fonctions d’OpenGL.
-
OpenGL est parfois décrite comme une "bibliothèque" (de code): Il s’agit d’un abus de langage. OpenGL correspond uniquement à des spécifications normalisées. Ces spécifications sont décrites sous forme d’en-tête de fonctions et variables décrites en langage C.
-
Ces spécifications sont appelées, de manière générique, une API - Application Programming Interface.
-
L’utilisation du C++ permet de s’interfacer directement à ces spécifications [1].
-
L’implémentation de ces fonctions dépend de nombreux paramètres, et en particulier de votre driver graphique, qui dépend lui-même de votre carte graphique et de votre système d’exploitation. L’implémentation de ces fonctions peut correspondre à du code ou à des modifications sur le hardware de votre GPU. OpenGL correspond ainsi à de nombreuses implémentations différentes.
-
OpenGL est standardisé par le consortium Khronos regroupant de nombreux entreprises membres utilisant des données graphiques ou du calcul efficace (AMD, Apple, Google, NVIDIA, Huawei, Intel, Samsung, Sony, Valve, Qualcomm, Adobe, Blizzard, etc.)
-