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