
OpenGL ARB Présentation
OpenGL est une librairie proposant une interface pour le matériel graphique, permettant de produire des objets 2D ou 3D. C’est une abstraction entre le matériel graphique et les applications.
OpenGL est une API professionnelle de graphisme 2D/3D développée initialement par Silicon Graphics Inc. ( controlée de nos jours par un consortium industriel : ARB-OpenGL Architectural Review Board). Elle réalise une interface entre le matériel graphique installé sur la machine et l’application elle-même. Cela permet de faire abstraction du hardware, vu du coté du programmeur. Cette API est disponible sous divers systèmes d’exploitation tels que DOS, Windows, MacOS, AmigaOS, Linux/UNIX ou OS/2.
Le kit de développement OpenGL est constitué de deux ensembles : GL qui fournit les appels aux 120 fonctions OpenGL et Glu qui est une surcouche OpenGL fournissant des fonctions plus évoluées pour la gestion des caméras ou la création de surfaces Nurbs.
Les schémas ci-dessous représente la manière dont l’interface hardware/application est réalisée au sein de l’API.


On peut remarquer que tous les appels à OpenGL passent par un véritable PipeLine d’exécution, partant de vertices, jusqu’au frame buffer de la carte vidéo. Cette architecture est répercutée au niveau de l’utilisation de la librairie, notamment avec la gestion des matrices organisées autour d’une pile. OpenGL est une machine à état et chaque appel à une primitive de l’API contribue à modifier l’état courant. La quasi totalité des primitives agit soit sur des variables d’état de la machine, soit sur les matrices courantes. La pile sert donc à empiler ces états pour pouvoir les restituer plus tard (glPushMatrix, glPushAttrib).
Les objets 3D manipulés sont constitués d’un ensemble de vertices (sommets) que l’on définit entre deux appels à glBegin et glEnd (placent la machine dans un état prêt pour recevoir cet ensemble de vertex).
Un des objets OpenGL les plus importants et la displaylist qui permet d’encapsuler une séquence d’instruction OpenGL en vue d’être compilée en mémoire pour pouvoir être exécutée par la machine de façon optimale. Ainsi, dans notre programme, nous avons utilisé ces displaylists pour optimiser les performances d’affichage et stocker les vertices et autres (normales, coordonnées de mapping) de chaque objet. Une fois que la liste est créée, elle est figée et ne peut plus être modifiée, elle est à l’intèrieur de la machine et il n’y a plus d’accés possible mise à part la demande d’exécution glCallList(indice). Lors de l’appel de la liste, la matrice courante est appliquée.
En permanence, nous avons accés à deux matrices GL_MODELVIEW_MATRIX qui représente la position du modèle dans le monde, GL_PROJECTION_MATRIX qui est la matrice qui définit la zone de projection du monde en tenant compte des plans de clipping et des paramètres de la caméra. Chaque appel à glRotate, glMultMatrix, glScale ou glTranslate effectue la multiplication entre la matrice courante et la matrice de la transformation générée par l’appel à la fonction. La matrice courante peut être changée par glMatrixMode (permet de sélectionner MODELVIEW ou PROJECTION) ou encore glLoadMatrix. La pile sert alors à sauvegarder l’état de la matrice pour la restituer ultérieurement.
Tous ces appels sont ’assemblés’ (module primitive assembly) et fournis à l’évaluateur qui va effectuer le rendu effectif en tenant compte de tous les paramètres de la machine.