|  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.
 |