Sommaire Index Rechercher Liens A Propos
[LinuxFocus Image]
[Navegation Bar]
  Nouvelles   Archives

Qu'est ce qu'OpenGL ?

par Miguel Angel Sepúlveda


[OpenGL logo]
Silicon Graphics
Spécifications OpenGL
Silicon Graphics

Le FAQ OpenGL
3Dfx Interactive

Cet article débute une série dédiée à OpenGL et à son support sous Linux. Il est destiné aux programmeurs qui souhaitent apprendre comment ajouter des graphismes 2D et 3D de hautes performances dans leurs applications.

OpenGL est sans aucun doute l'interface de programmation industrielle prédominante pour le developpement d'application graphique en 2 et 3D. Elle peut etre considérée comme le successeur de la formidable bibliothèque Silicon Graphics IRIS GL qui a rendu si populaire les stations de travail SGI en tant que plateformes de prédilection pour les scientifiques, les ingénieurs et les effets spéciaux. SGI a amené dans OpenGL une grande part de son expérience pour en faire une interface de programmation du futur, facile à utiliser, intuitive, portable et ouverte aux réseaux. On peut aussi remercier SGI d'avoir réalisé l'importance des standards ouverts. Plusieurs fabricants de logiciels et de matériels ont participé à l'élaboration de spécifications d'OpenGL et continuent à la supporter. Grace à cela, les applications OpenGL peuvent facilement etre portées sur n'importe quelle plateforme du marché, depuis les PC windows 95 en passant par notre glorieux système Linux, les stations de haut de gamme UNIX jusqu'aux puissants supers-ordinateurs. Le Bureau Architectural de Revue  supervise les spécifications OpenGL en acceptant ou rejetant des changement et en proposant des tests de conformité.

Par opposition à l'ancienne bibliothèque IRIS GL de SGI, OpenGL est par conception, indépendante de la machine et du sytème d'exploitation. Elle reconnait les réseaux ce qui permet de séparer notre application OpenGL en un serveur et un client qui est chargé d'afficher le graphique. Il existe un protocole de transfert des commandes OpenGL sur le réseau entre serveur et client. Grace à son indépendance vis à vis du système d'exploitation, serveur et client n'ont pas à fonctionner sur le meme type de plateforme. Assez souvent, le serveur est un super-ordinateur qui exécute une simulation complexe, et le client une simple station de travail dédiée à la visualisation graphique. OpenGL permet aux developpeur d'écrire des applications qui peuvent facilement etre réparties sur plusieurs plateformes. 

En dessous d'OpenGL, est situé une bibliothèque de visualisation graphique très performante et optimisée. Beaucoup de cartes graphiques accéllérées et spécialisée en 3D comprennent les primitives OpenGL au niveau matériel. Jusqu'à très récemment, ces cartes graphiques évoluées étaient très chère et disponibles uniquement pour les stations SGI ou UNIX. Les choses changent rapidement et grace au licenses généreuses et au kit de développement de pilotes de Silicon Graphics, nous allons voir de plus en plus de matériel OpenGL pour les utilisateurs de PC. Les utilisateurs Linux peuvent en profiter car une société appelée  3Dfx Interactive fabrique une série de carte graphiques 3D et fournit un support pour Linux au moyen de leur bibliothèque Glide library. Un autre article de cette série, écrit par Phillip Ross (Les cartes graphiques 3Dfx ) décrit en détail les cartes 3Dfx disponibles pour nous. Cela démontre un changement de comportement de la part des fabricants de cartes qui ont compris que le marché de Linux est solide. Les fansde Linux devraient encourager ce type d'initiative. 

Pour obtenir l'indépendance matériele d'OpenGL, les commandes destinées au fenetrage ou à la saisie d'information par l'utilisateur ont été exclues. Cela pourrait etre un sérieux inconvénient pour l'utilisation d'OpenGL, mais comme nous le verrons plus tard (Voir la Programmation GLUT) , il est possible de combiner OpenGL avec d'autres bibliothèques flexibles qui gèreront les fenètres et récupèreront les entrées de l'utilisateur. De plus, OpenGL ne fournit pas de commandes pour décrire des modèles complexes (molécules, avions, maisons,oiseaux,etc..). Dans OpenGL, vous ne trouverez que des primitives géométriques (points, lignes, et polygones).  Le developpeur doit construire son propre modèle à partir de ces primitives. Des bibliothèques dépendantes d'OpenGL fournissent des modèles plus complexes et chaque utilisateur peut construire sa propre bibliothèque à partir de celles là. 

Dans notre série d'articles consacrée à OpenGL, nous utiliseront l'interface C car c'est la plus populaire. Toutefois, il faut savoir que des liens existent avec d'autres langages : FORTRAN, C++, Ada et Java.  Plus tard, quand le lecteur sera familiarisé avec l'interface C d'OpenGL,nous parlerons d'Open-inventor, une bibliothèque C++ d'extension d'OpenGL. 

Sans trop entrer dans les détails, voici quelques possibilités d'OpenGL: 

  • Primitives Geometriques Vous permettent de construire des descriptions mathématiques d'objets à partir de  points, lignes, polygones, images et bitmaps. 
  • Codage de couleur  en RGBA (Rouge-Vert-Bleue-Alpha) ou en mode index de couleur. 
  • Visualisation et Modelage permettent d'arranger les objets dans une scène tri-dimensionelle, de bouger les caméras dans l'espace et de choisir le point de vue d'ou sera visualisé la scène. 
  • Projection de Texture apporte du réalisme au modèle en donnant un aspect réaliste au surfaces des polygones.
  • Eclairage des Materiaux  est une partie indispensable de tout infographie 3D. OpenGL fournit les commandes pour calculer la couleur de n'importe quel point à partir des propriétés des matériaux et des sources de lumières dans la pièce.
  • Double Tampon élimine les clignotement dans les animations. Chaque image de l'animation est construite dans une mémoire tampon séparée et affichée quand le tracé est terminé.
  • Anti-repliement reduitles lignes en zig-zag sur les écrans. Elles apparaissent surtout en basse résolution. L'anti-repliement est une technique classique qui consiste à modified la couleur et l'intensité des pixels en bordure de ligne pour attenuer l'effet de zig-zag.
  • Ombrage de Gouraud est une technique qui applique des ombrages réguliers aux objets 3D et donne de subtiles différences de couleurs sur la surface.
  • Tampon-Z mémorise la coordonnée Z d'un objet 3D. Le tampon Z sert à mémoriser la proximité d'un objet par rapport à l'.observateur. Sa fonction est aussi cruciale pour la suppression des parties cachées.
  • Effets Atmospheriques comme le brouillard, la fumée et le voilage rendent les images numériques plus réalistes. Sans ces effets, les images apparaissent parfois trop piquées et top bien définies. Fog est un terme qui décrit un algorithme qui simule la brume, le crachin, la fumée, la pollution ou simplement l'air en ajoutant de la profondeur à l'image. 
  • Mélange Alpha utilise la valeur Alpha (valeur de diffusion du matériau) du code RGBA afin de combiner la couleur d'un fragment en cours de traitement avec celle d'un pixel déjà stocké dans le tampon d'image. Imaginez par exemple devoir tracer une fenetre transparente bleue devant une boite rouge. Le mélange Alpha permet de simuler la transparence de la fenetre de telle sorte que la boite vue à travers la vitre soit violette.
  • Plans masqués  restreint le tracé à certaines portions de l'écran.
  • Listes d'affichage permettent le stockage de commandes de tracé dans une liste pour un affichage ultérieur. Avec une utilisation correcte, les listes d'affichages peuvent améliorer nettement les performances.
  • Evaluateurs Polynomiaux supportent les Splines non uniformes rationelles-B. Cela permet de tracer des courbes régulières avec quelques points ce qui évite d'en stocker de nombreux intermédiaires.
  • Retour,  Selection et Choix sont des possibilités qui permettent aux applications d'autoriser l'utilisateur à selctionner une région de l'écran ou de choisir un objet dessiné à l'écran. Le mode Retour, permet au developpeur d'obtenir les résultats des calculs d'affichage.
  • Primitives d'Affichage  (Octets de l'affichage et rectangles de pixels) 
  • Operations sur les Pixels 
  • Transformations: rotation, echelles, translations, perspectives en 3D, etc. 

Comme nous l'avons mentionné et affin de rendre OpenGL complètement portable, il a été necssaire de sacrifier toutes les commandes qui sont en interface avec le gestionnaire de fenetres. Par exemple, ouvrir, fermer, redimensionner ou changer l'echelle d'une fenetre, lire la position du curseur ou les entrées au clavier etc... Toutes ces actions,dépendent trés fortement du système d'exploitation. A l'origine, la bibliothèque GL avait ses propres commandes de fenetres et pilotes de périphériques mais ils étaient spécifiques à IRIX (le système d'exploitation UNIX de SGI). Il appartient au developpeurs OpenGL de connaitre leurs machines et de prendre en compte la manipulation des fenetres avec des outils spécifiques. 

Grace à Mark J. Kilgard de SGI, il y a une bibliothèque aditionelle qui contourne ce problème. Mark a écrit la bibliothèque GLUT, une bibliothèque utilitaire qui remplace la vieille AUX (ne cherchez pas à savoir ce que c'était !). La bibliothèque GLUT est gratuite. Comme pour OpenGL, on trouve le code source et des exécutable Linux de GLUT. La bibliothèque GLUT est dépendante de la machine et offre des liens commun pour le fenetrage et les pilotes de périphériques. Ainsi, quand une application OpenGL souhaite ouvrir une fenetre pour une animation graphique, il utilise la commande GLUT set et cela prend en charge le gestionnaire de fenetres sous-jacent. Dans un sens, GLUT cache au programmeur les sales détails des systèmes graphiques fenetrés (X11, windose, Motif, etc..) et lui permet de se concentrer sur sa tache - le code OpenGL. Un autre grand avantage de l'utilisation de GLUT est qu'il rend votre code indépendant de la plateforme de programmation. J'ai personnellement ecrit des simulations de protéines et de gels avec GLUT et OpenGL et j'ai été capable de les compiler et de les exécuter sans aucun problème sur Linux-Intel, Linux-Alpha, ou Windows 95. (J'avoue, j'utilise Windows 95 de temps en temps ;-) Je recommande vivement à toute personne intéressée par l'écriture d'applications OpenGL d'utiliser la bibliothèque GLUT comme pilote de fenetres.

Une bonne connaissance de GLUT est aussi importante qu'OpenGL, c'est pourquoi dans notre série LinuxFocus consacrée à OpenGL, nous proposons des articles qui expliquent pas à pas comment utiliser GLUT et manipuler les périphériques confortablement. 

Pour terminer cette rapide introduction, nous ne pouvons oublier de mentionner le "Maitre de l'Univers",Brian Paul, qui avec constance et patience implante une bibliothèque similaire à OpenGK pour Linux et nommée Mesa. Pour l'instant, Mesa ne travail que par logiciel, ce qui signifie que c'est le processeur qui effectue tous les calculs graphiques qui pourraient etre sinon délégués au matériel 3D. Mais Mesa contient des liens internes qui permettent à des pilotes de matériels accellérés d'etre écrits et utilisés. Actuellement, les pilotes existent pour  Mondello, S3 Virge (Win95 seulement), GLINT, et les processeurs Voodoo 3Dfx. Grace au pilote Voodoo (écrit par David Bucciarelli) Mesa peut atteindre les meme performances que de très chères stations SGI. Donc, si vous etes interressé par la 3D performante, achetez une carte 3Dfx. 

Finalement, je ne peux me retenir de vous raconter une anecdote personnelle avec mon PC-Alpha (21164 550MHz 164MRam Linux 2.0.32). 
J'utilise la bibliothèque Mesa pour un programme de simulation de Gel que j'ai écrit. Il n'y a pas de support matériel dans mon système pour la bibliothèque Mesa car, pour l'instant, la bibliothèque Glide n'a pas été diffusée pour les systèmes Alpha (S'IL VOUS PLAIT, FAITES VITE !!!!). 
Quand Phil Ross et moi meme, avons comparé les performances de son Pentium PC + 3Dfx et mon PC Alpha + carte Matrox Millennium, nous avons été un peu surpris de voir que ma simulation de gel tournait aussi régulièrement sur mon PC que sur le sien. La démo OpenGL tourne meme mieux sur mon système (bien sur, celles sans utilisations de textures). En d'autres termes, les manques matériels ont été comblés par la force brutale du processeur Alpha. Pour vous donner une idée du travail accompli dans chacune des images de l'animation de gel, chaque image contenait une stucture de Gel modélisée avec des dizaines de millier de sphères et de cylindres sans compter l'éclairage. Sur le PC, on ne distinguait pas vraiment le gel avec tous ses monomères parce que les calculs se sont révélés trop nombreux pour le pauvre processeur Intel... Par contre, l'Alpha pas de problèmes !. Je brule d'impatience de voir mon PC Alpha avec une carte 3Dfx et un support matériel pour Mesa. 


Traduit parJohn Perr

For more information:
© 1998 Miguel Angel Sepúlveda
Ce site web est maintenu par Miguel A Sepulveda.