Comment faire du graphique en C ?
Copyright : utilisation de ces documents libre pour tout usage personnel.
Utilisation autorisée pour tout usage public non commercial, à
condition de citer son auteur (Patrick TRAU,
IPST, Université Louis Pasteur
Strasbourg, email :
) et de me signaler tout usage intensif. Utilisation commerciale
interdite sans accord écrit de ma part.
justificatif
On me demande souvent comment créer un programme qui ait un résultat graphique. Ceci dans deux
objectifs très différents.
- Soit pour agrémenter l'interface homme-machine, par utilisation
de boutons, d'icônes, de fenêtres en "popup",... Pour cela je ne suis pas du tout un spécialiste,
j'aurais du mal à vous aider (du moins actuellement). Le problème est que cette interface est
intimement liée au système que vous utilisez, et pour cela une solution est d'utiliser les
outils de votre système. Moi
je vous conseillerai bien sûr plutôt d'utiliser des outils multi-plateforme (soit directement au
niveau du langage, je pense ici à java), soit des bibliothèques portées sur différents systèmes,
permettant vraiment beaucoup de choses, mais également plus complexes.
Par exemple, Qt, venant du monde Apple, et fonctionnant sous MS-Windows et X.
- Soit vous devez créer un graphique, et ce même s'il n'est composé que d'objets très simples
(points, segments, arcs,...). C'est, pour nous scientifiques, un besoin fréquent : tracé de courbes,
graphes, schémas, plans, courbes de niveau, ... Je vais ici recenser tous les documents disponibles
sur ce serveur. Ils sont tous en langage C, sauf si précision contraire.
Je vous présente ici un certain nombre de documents que j'ai créés pour mes cours, ou pour
mettre au propre certains tests. Mais aussi des projets réalisés par mes étudiants, quelquefois
directement mis sur le site, d'autres après corrections, certains que j'ai repris complètement.
les bibliothèques existantes
Il existe de nombreuses bibliothèques disponibles. Certaines sont liées à un compilateur, d'autres à un langage, et certaines sont (plus ou moins) portables. J'ai demandé aux étudiants de DESS TSI option Mécanique et Matériaux
d'étudier différentes bibliothèques graphiques existantes (et si possible
multi-plateformes). Voici donc (pour l'instant sans correction) leur
rapport :
- une petite analyse des bibliothèques les plus connues (GTK, OpenGL, Motif, Qt)
par Halassa, promo 2004 (mais j'aurais aimé qu'il aille plus loin qu'un assemblage de quelques
informations trouvées sur le net, en particulier comment installer les exemples qu'il a choisis, et des liens web).
- la plupart des systèmes (sauf Windows) utilisent X11. C'est efficace
mais pas très facile à programmer. J'ai un projet DESS
de 2002, mais je vous conseille plutôt cette biblothèque simplifiée
vraiment simple et bien faite (ce n'est pas un DESS).
- WxWidgets (anciennment WxWindows) par Bollinger et Weill, promo 2005. Elle fonctionne sous Windows et X11. Ils détaillent l'installation, et décortiquent deux petits programmes de base : l'ouverture et la gestion des fenêtres avec boutons, et dessins de base dans une fenêtre. Pour aller plus loin, suivez leurs liens.
- QT par Saulnier et Pflieger, promo 2003. Qt fonctionne sous Linux et Windows, mais est commercial (libre en usage
non commercial sous Unix, possibilité de licence gratuite pour l'enseignement sous Windows).
- XForms, bibliothèque sous X11 (testée uniquement sous Linux, peut-être
qu'avec un client X on peut s'en servir sur windows) par Cheriet et Mergane, promo 2005. Après une description
des fonctions de base, il y a 4 exemples commentés (j'attends leur page web).
- PlotUtils est une bibliothèque de tracé (sans interaction avec
la souris entre autres) : votre programme fait un dessin qui peut être soit envoyé
sur une fenêtre X (on n'a que testé sous Linux) soit dans un fichier (ps par exemple). Par Thibaut Mathern et Mathieu Schreiner, promo 2005.
- un jeu de dames par Scuiller et Chea, promo 2005. Ils utilisent la bibliothèque
Carnegie Mellon Graphics (ils ont utilisé DevC++, mais existe sous linux, et même gcc sous windows).
Le programme est simple et bien commenté (et pas fini, ce qui fait qu'il n'est pas encombré
de détails, mais fonctionne). La bibliothèque a l'air assez simple.
les tracés de base
C'est le minimum dont il faut disposer. Il suffit de savoir passer en mode graphique, puis
comment allumer un pixel. C'est ce qu'on appelle la bibliothèque de base. Tout le reste peut
s'appuyer là dessus.
pour aller plus loin
Les questions qu'on se pose une fois qu'on sait tracer sont de deux ordres : comment faire
des tracés plus complexes (cercles, courbes, remplissages, hachurages, fenêtrage, projections 3D,
surfaces, élimination des faces cachées...) et les
entrées sorties (affichage de texte, lecture du clavier, lecture de la souris.
Sous Linux, pour les entrées-sorties, je peux vous proposer mon introduction
à SVGALIB (pour Linux uniquement). Ce document est particulièrement
simple (il me semble) et progressif, se limitant au minimum en 4 exemples : tracé de base, lecture
de la souris, curseur, affichage de texte. Pour X11, je vous propose ce rapport
de projet DESS TSI-MA.
Pour Turbo C sous DOS, je peux vous proposer une
bibliothèque pour la souris que j'ai écrite en utilisant l'interruption 33h, que vous pouvez
donc adapter à tout langage sous MSDOS. Toujours en utilisant les interruptions du Bios, voici comment
accéder directement à votre
carte VGA (par exemple en Turbo C, mais facilement adaptable aux autres langages, en particulier
l'assembleur, mais seuls les modes de base sont décrits). Vous y trouverez également tous les détails
sur le format des fichiers BMP et PCX. Si vous voullez utiliser toutes les fonctionnalités de graphics.h
de Turbo C, regardez cette excellente présentation
progressive regroupant différents exemples : génération automatique de paysage,
fractales... Enfin, un dernier exemple : une horloge.
Pour les tracés complexes, je présente dans mon cours toute la
théorie nécessaire, progressivement, avec des exemples. Puis j'ai appliqué ces algorithmes
pour créer une bibliothèque graphique puissante (G2D - G3D) que vous pouvez récupérer pour l'utiliser
ou pour voir comment j'ai géré chacun des problèmes (y compris les Entrées-Sorties qui sont bien évidement
incluses). Vous pouvez accéder à :
Vous pouvez évidement utiliser une bibliothèque 3D toute faite, ici une doc en français sur OpenGL.
Pour toute question, envoyez moi un
, ou regardez mes FAQ. S'il vous plait, signalez moi toute erreur !
Depuis le 25/5/2002, vous êtes le
ème lecteur de cette page
P. TRAU, ULP-IPST, mai 02