fascicule i – partie i
Transcription
fascicule i – partie i
GEOMETRIES ET COMMUNICATION GRAPHIQUE TOME III INFOGRAPHIE FASCICULE I – PARTIE I LES CONCEPTS DE BASE DE L’INFOGRAPHIE Images de Synthèse, Bases de Données Graphiques, Hardware Graphique, Logiciels DAO 2ème EDITION ( Année académique 2006-2007 ) Prof. Dr. ir. Y. DURAND Faculté Polytechnique de Mons Académie Universitaire Wallonie - Bruxelles Ouvrage exclusivement réservé aux Etudiants de 1ère Bachelier de la Faculté Polytechnique de Mons Vente interdite en librairie Tous droits de traduction, adaptation et reproduction strictement soumis à l’autorisation écrite de l’Auteur Ce document a été établi sur Portable TOSHIBA Satellite 2800-600 de N° de série T 71837950GS287-0 et imprimé sur Imprimante Thermique à jet d’encre Hewlett Packard Deskjet 850C de N° de série SG63E3S1X6. Les dessins ont été réalisés au moyen de DesignCAD 3000, Release du 29.01.01 , Licence N° H20408481048. Les textes ont été rédigés sous Microsoft WORD 2000 TABLE DES MATIERES DU TOME III – FASCICULE I – PARTIE I 0. PREFACE 1. DEFINITION GENERALE D’UN LOGICIEL D’APPLICATION DEDICACE A LA CREATION D’IMAGES DE SYNTHESE 1.1 LE CONCEPT DE « BASE DE DONNEES GRAPHIQUES » 1.2. LES DONNEES NUMERIQUES DE LA BASE DE DONNEES DECRIVANT DE FAÇON PROPREMENT DITE L’IMAGE 1.3. LES PRINCIPES TECHNOLOGIQUES DE BASE DES ECRANS RASTER-SCAN CRT 1.3.1. NOTIONS DE BASE 1.3.2. LES PIXELS ET LA RESOLUTION D’UN ECRAN CRT 1.4. LES IMAGES ACHROMATIQUES ET LES IMAGES « COULEUR » 1.5. LES CARTES VIDEO 1.5.1. LA TRANSMISSION DES INFORMATIONS AU MONITEUR PAR LA CARTE VIDEO 1.5.2. LA MEMOIRE DE LA CARTE VIDEO 1.5.3. LE PROCESSEUR GRAPHIQUE DE LA CARTE VIDEO 1.5.4. LES INTERFACES DE PROGRAMMATION GRAPHIQUE ( DirectX , OpenGL, PHIGS, GKS ) 1.5.5. ARCHITECTURE DE L’ INTERFACE DE PROGRAMMATION GRAPHIQUE Microsoft Direct 3D 2. LES 2 CATEGORIES DE PROGICIELS D’APPLICATION CONDUISANT A LA CONSTITUTION D’UNE BASE DE DONNEES GRAPHIQUES EN CREATION D’IMAGES DE SYNTHESE 2.1. INTRODUCTION : SITUER LES OBJECTIFS DE CE COURS DANS LE CONTEXTE GENERAL DES APPLICATIONS INFOGRAPHIQUES 2.2. GENERALITES A PROPOS DES 2 CATEGORIES DE PROGICIELS D’APPLICATION CONDUISANT A LA CONSTITUTION D’UNE BASE DE DONNEES GRAPHIQUES EN CREATION D’IMAGES DE SYNTHESE 2.3. INTRODUCTION GENERALE AU MODE « PROGRAMMATION » 2.4. INTRODUCTION GENERALE AU MODE « DESSIN INTERACTIF 3. LE MODE DE DESSIN DAO INTERACTIF : INTRODUCTION DETAILLEE 3.1. L’INTERET DU MODE « DESSIN INTERACTIF » 3.2. LES OUTILS CLASSIQUES DE POINTAGE EN MODE « DESSIN INTERACTIF » 3.2. LE MODELE LOGIQUE D’UN ENSEMBLE DAO INTERACTIF : LES RETROACTIONS 3.4. LES LIENS ENTRE PROGICIELS DAO INTERACTIFS ET LES BIBLIOTHEQUES GRAPHIQUES DE TYPE Phigs, OpenGL, … 3.5. LA DIFFERENCE FONDAMENTALE ENTRE UN DESSIN VECTORIEL ET UNE IMAGE BITMAP 3.6. VECTORISER AUTOMATIQUEMENT UNE IMAGE BITMAP SOUS DESIGNCAD PREFACE L’Infographie ( en Anglais, « Computer Graphics » ) est, pour le vocabulaire français, un néologisme créé en 1974 par le rapprochement des mots « Informatique » et « Graphique » par la Société Benson ( Constructeur de tables traçantes « à plumes » de grand format et de très haute qualité, à l’époque concurrent dans ce secteur notamment des Sociétés Calcomp et Hewlett Packard ) pour désigner la branche de l’informatique qui a pour objet la production et/ou le traitement d’images. Jusqu’à la décennie 1980-1990, l’infographie était un domaine hyper-spécialisé, d’une part parce que le matériel dédicacé était extrêmement coûteux ( une table traçante des années 1980 coûtait approximativement 10 fois ce qu’elle coûte aujourd’hui ; les écrans graphiques étaient très coûteux, du type « vectoriel » et non « matriciel » comme actuellement et étaient réservés à des bureaux d’étude et de recherche très spécialisés ) et d’autre part parce que les programmes graphiques d’application étaient très peu nombreux et très onéreux. En fait, le développement et la « démocratisation » de l’Infographie n’ont trouvé leur point de départ que vers 1985 dans l’introduction des premiers micro-ordinateurs Apple puis IBM PS/2, notamment parce que les concepteurs des premiers « Apple » avaient eu l’intuition géniale que l’usage d’une interface graphique interactive ( menus déroulants, icônes, pointés par souris ) pour la gestion de l’Operating System notamment était la voie à privilégier pour permettre à tout utilisateur « lambda » d’accéder en « mode conversationnel » aux services de l’informatique. Plus spécialement encore, cette expansion de l’infographie et de l’infographie interactive a été rendue possible par l’introduction, sur les machines précitées, des écrans ponctuels à balayage de trame ( Raster Scan Display ), directement dérivés de la technologie des écrans TV et, par conséquent de prix réduit par rapport aux écrans spécialisés « vectoriels » ( Random Scan Display ) précédemment utilisés pour le tracé graphique sur stations de travail dédicacées, la différence entre les 2 types étant que les « ponctuels » travaillent avec le point comme primitive de base, tandis que les « vectoriels » admettent le segment de base comme primitive de base pour le tracé : toute l’infographie contemporaine repose ainsi sur le concept associé aux écrans « ponctuels » du graphique à matrice de points, concept qui reste toujours aujourd’hui d’actualité, même avec les écrans plats les plus récents de type LCD à matrice active. Comprendre cette technologie permet de comprendre les bases de l’infographie : vous constaterez ainsi que ce cours débute par l’explication de ce concept incontournable. Le domaine de l’infographie, tel qu’il s’est développé et se développe encore exponentiellement aujourd’hui, étend son champ d’action dans 2 voies concurrentes : la création des images de synthèse d’une part, l’acquisition et le traitement des images naturelles d’autre part. Ce cours est plus particulièrement orienté « création d’images de synthèse ». Les fascicules de ce cours, après une introduction générale applicable tant aux images de synthèse qu’aux images naturelles numérisées, s’intéresseront plus particulièrement à un volet particulier de l’infographie interactive : les progiciels DAO ( Dessin Assisté par Ordinateur ), très importants pour tout ingénieur puisqu’aujourd’hui,tous les Bureaux d’Etudes en sont équipés. Ces progiciels de Bureaux d’Etudes, pour être général, ne sont pas seulement de DAO, mais plutôt le plus souvent de CAO ( en Anglais : « Computer Aided Design » ou CAD ) : un progiciel CAO ( Conception Assistée par Ordinateur ) est un package intégré d’outils informatiques permettant aux concepteurs d’un produit manufacturé de définir et mettre au point ce produit ainsi qu’en contrôler les aptitudes . De tels progiciels CAO contiennent en général plusieurs modules compatibles entre eux : - un module de dessin DAO 2D / 3D - un ou des modules de calcul ( calcul par Eléments Finis de la résistance des pièces aux sollicitations statiques, thermiques ou dynamiques qui leur sont imposées ) - un ou des modules de gestion de bases de données relationnelles ( permettant p.ex. d’associer aux pièces composant un ensemble des attributs, de matière p.ex., permettant aussi la mise en œuvre de processus d’échanges d’informations digitalisées entre les divers acteurs de la création et de la fabrication du produit ) - une Bibliothèque d’objets pré-dessinés et paramétrables, répondant à des prescriptions normalisées de morphologie ( p.ex. des vis, boulons, écrous, rondelles, paliers, . . . en mécanique, des schémas de transistors, résistances, capacités, thyristors, . . . en électronique, . . . ) - une Bibliothèque Graphique, ensemble de routines pré-programmées appelables au sein de programmes réalisés en C++ p.ex. en vue de permettre à l’Utilisateur d’établir luimême un programme de dessin de pièces particulières ( p.ex. une pièce dont ne face serait un paraboloïde hyperbolique ) La présence du module de la 3ème catégorie précitée dans le package pouvant être compris comme une volonté d’intégration dans la chaîne des processus industriels qui concernent directement les procédés de fabrication eux-mêmes, comme par exemple la mise en place d’une base de données utiles pour cette fabrication, il est alors d’usage d’étendre la dénomination de tels progiciels, plus complets encore que ceux du ressort de la « simple » CAO, à la dénomination CFAO ( Conception et Fabrication Assistées par Ordinateur – en Anglais Computer Aided Design and Manufacturing ) pouvant aller p.ex. jusqu’à la préparation de bases de données pour la Commande Numérique de Machines-Outils ( CNMO – en Anglais : « Numerical Control for Machine Tools » ) Actuellement, on trouve des progiciels CAO ou CFAO dans pratiquement tous les secteurs d’activités industrielles, comme les CAO-Mécanique, les CAO-Bâtiment et Travaux Publics, les CAO-Electronique,… Le « noyau » de tous ces progiciels reste cependant le module DAO qui va définir la base fondamentale de données géométriques qui sera utilisée dans les opérations ultérieures de post-traitement CAO ou CFAO : un programme d’Eléments Finis p.ex. repose sur le concept de discrétisation d’un volume en petites « briques » élémentaires liées les unes aux autres, la transmission et la diffusion des efforts élémentaires s’opérant de brique à brique ; il est clair que cette subdivision reposera sur la définition préliminaire DAO du volume de l’objet concerné par l’analyse de la répartition des contraintes et déformations internes induites par les efforts externes ( ou éventuellement internes s’il s’agit de sollicitations thermiques ) appliqués à l’objet. Il existe ainsi des impliquée : - modules DAO de 3 niveaux de complexité, selon le type d’application technique le plus simple concerne la DAO 2D : comme le symbole l’indique, seules des primitives géométriques du monde à 2 dimensions y sont traitées : ce type de progiciel peut trouver son utilité en tant que module unique, utilisable de façon autonome dès lors que l’objectif resterait simplement de substituer à la « planche à dessin » traditionnelle un outil informatique interactif rendant le tracé plus aisé et plus précis pour la réalisation de plans classiques ( de type « Monge » ). Il n’empêche que ce type de DAO 2D « de base » peut cependant être intégré à un outil CAO parce que, p.ex., les calculs par éléments finis peuvent se satisfaire, dans de nombreux cas, d’une analyse d’une « tranche » infiniment mince de l’objet, c.à.d. d’une analyse en 2D. - plus complexe déjà est la DAO 3D Surfacique : cette forme de DAO traite, de fait, les primitives du monde 3D mais en écartant du package des formes construites les volumes solides proprement dits, même si, du seul point de vue de leur représentation-image , de tels volumes peuvent malgré tout y être modélisés par leurs surfaces- limites, mais aucune propriété associée au concept de volume solide n’y est cependant alors considérée. Considérons p.ex. un volume cylindrique exclusivement modélisé par le biais de ses surfaceslimites et supposons qu’il soit traversé par un autre volume cylindrique défini également par ses surfaces-limites : l’opération booléenne d’intersection avec enlèvement de matière ne saurait en aucun cas s’opérer pour définir automatiquement la surface d’intersection . - A contrario, la DAO 3D Volumique présente la caractéristique de pouvoir traiter des solides volumiques proprement dits, c.à.d. pleins et continus, en les définissant encore p.ex. par le biais de leurs surfaces-limites, mais dans ce cas, soit la surface-limite ( cas d’une sphère ou d’un tore p.ex. ) doit être indispensablement refermée, soit les surfaces-limites ( chacune de type « ouvert » ) doivent être strictement connexes en leurs frontières ( cas d’un cylindre de longueur finie ou d’un cône p.ex. ) ; en outre, après avoir ainsi défini de telles surfaces-limites, une procédure est à engager pour transformer l’entité surfacique en une entité solide proprement dite. En tel cas de DAO 3D Volumique, les opérations booléennes sur les solides sont alors parfaitement possibles, comme le montre l’exemple suivant de l’intersection d’un cône et d’un cylindre réalisé en faisant usage du progiciel « DesignCAD » que vous utiliserez au laboratoire et qui est un « vrai » modeleur 3D Volumique : 2 surfaces de clôture sont automatiquement générées pour limiter les 2 parties solides du cône résultant de l’opération booléenne de soustraction d’une partie de ce cône par un autre solide ( le cylindre ) : Voici un autre exemple où une commande booléenne va maintenir les 2 solides, chacun subissant cependant l’ablation de la partie volumique commune aux 2 objets solides : Cette partie du Cours de Géométries et Communication Graphique dédicacé aux 1ères notions d’Infographie sera structuré de la façon suivante : 1. Ce 1er fascicule sera consacré à une introduction générale à l’Infographie et à ses concepts directeurs ; 2. Le 2ème fascicule posera les bases fondamentales de l’usage pratique d’un logiciel DAO interactif ; 3. Le 3ème fascicule expliquera ce que sont les procédures dites « d’édition et de transformation des primitives » qui constituent véritablement l’outil grâce auquel le Dessin Assisté par Ordinateur trouve toute son efficience ; 4. Le 4ème fascicule s’intéressera à la programmation graphique et, plus particulièrement, à l’algorithmique de l’Infographie. 1. DEFINITION GENERALE D’UN LOGICIEL D’APPLICATION DEDICACE A LA CREATION D’IMAGES DE SYNTHESE 1.1. LE CONCEPT DE « BASE DE DONNEES GRAPHIQUES » Un logiciel d’application pour la création d’images de synthèse est un programme établi - pour gérer la constitution et les modifications d’une BASE DE DONNÉES régulant, en sortie, l’affichage d’images sur un périphérique graphique ( un écran p.ex. ) - et pour interpréter, en entrée, toute action de l’utilisateur ( un « pointer / cliquer » de souris sur commande de menu p.ex. ) visant à cette constitution ou à ces modifications. Vous avez probablement déjà constaté que « Microsoft Windows » contient, en standard, des fichiers d’images préenregistrées dont vous pouvez répertorier les fichiers, c.à.d. les bases de données, par les commandes : « Démarrer / Documents » ( ou en examinant la liste des fichiers de ce type inclus dans le fichier « Windows » via appel à l’ «Explorateur Windows » ) : DETAIL : Observez les extensions des noms de certains fichiers, autrement dit les codes d’identification qui permettent d’en reconnaître le type à la simple lecture : « .bmp » ou « .GIF » sont ainsi des codes d’identification de Fichiers Images. Ces abréviations signifient respectivement : “ Windows BitMaP ” et “ Compuserve Graphics Interchange Format ”. Il s’agit là de 2 formats distincts de Fichiers Images ou, autrement dit, de Fichiers Graphiques, c.à.d. de fichiers contenant la base de données permettant la juste reproduction à l’écran d’une image numérisée ou, autrement dit, « digitalisée ». Et en effet, par un Pointer / Cliquer ( B.G.S. ) sur l’icône de « Nuages.bmp » ou sur l’icône de« HLPSTEP2.GIF », vous verrez successivement apparaître sur votre écran graphique « Windows » les images suivantes : Nous avons parlé, pour de telles images, d’une « Base de données digitale » : c’est bien sous cette forme numérique que les « images » sont stockées en Mémoire du PC et transitent dans les composants du PC avant d’être converties sous forme analogique pour l’affichage « écran ». L’intérêt d’une telle numérisation est qu’elle conserve de façon stable l’intégrité et la qualité des données, pour autant que les fichiers comportent des éléments de contrôle adéquats ( codes de correction d’erreurs ). Ce principe général de numérisation de signaux analogiques ( image photo, image vidéo, son, … ) est d’ailleurs devenu une règle générale pour tous les objets du Multimédia, imposant en parallèle le développement d’une normalisation dont l’objectif est d’assurer la portabilité et la pérennité des fichiers ( d’une plate-forme à l’autre, en garantissant le maintien d’exploitation au travers du temps ). Les intérêts des Producteurs et Fabricants ne sont d’ailleurs pas toujours en symbiose avec ceux des Utilisateurs à propos de cette portabilité et c’est la raison pour laquelle il reste fort important pour tout Ingénieur-Système responsable d’un parc informatique dans une Entreprise qui doit échanger des fichiers en Input et en Output avec le monde extérieur de s’informer prioritairement du degré de portabilité des fichiers traités par cette entreprise et donc de suivre de très près l’évolution des normes et standards afin d’éviter – dans toute la mesure du possible – l’utilisation de fichiers générés avec des codages « propriétaires », c.à.d. des codages instruits par des Producteurs ou Fabricants voulant assurer, par ces codages spécifiques, des situations de monopole si ces Producteurs ou Fabricants ne prévoient pas la disposition simultanée de procédures de conversion vers d’autres formats pour garantir l’interopérabilité. Dans le monde D.A.O., un exemple-type de codage « propriétaire » concerne le logiciel AutoCAD développé par la Société Autodesk dont les fichiers sont de formats « .dxf » et « .dwg », formats « propriétaires » créés à l’origine par Autodesk pour répondre de façon optimisée aux structures propres d’AutoCAD mais qui, en raison du grand nombre de licences exploitées, sont devenus des Standards de fait conduisant d’autres Sociétés concurrentes – comme Upperspace Corporation, le Producteur du progiciel D.A.O. « DesignCAD » que vous serez amenés à utiliser pendant les laboratoires – à développer des accords sectoriels afin de mettre en place l’interopérabilité des fichiers générés par les divers logiciels concurrents qu’elles commercialisent. Ainsi, p.ex., Upperspace Corp. est l’un des Membres fondateurs du Groupe « Alliance Open DWG » dont l’objectif prioritaire est de garantir l’interopérabilité des fichiers générés par les logiciels des différents Membres en offrant aux utilisateurs la garantie d’échanges sans altérations de fichiers graphiques via fonctions d’importation et d’exportation selon le standard DWG qu’ils ont adopté comme standard commun, même si ce standard n’est pas à proprement parler normalisé comme l’est le format SPIFF ( Still Picture Interchange File Format ) pour les images fixes 2D ou le format VRLM ( Virtual Reality Modeling Language ) pour les images 3D en rendu réaliste, statiques ou animées, qui, tous deux, sont définis par des Normes Internationales ISO ( International Standards Organization ) et sont donc dans le domaine public. Les fichiers natifs « DesignCAD » restent donc, comme ceux générés par AutoCAD, établis en 1ère ligne selon un format propriétaire spécifique, en l’espèce le format propriétaire « .dc ». Supposons alors qu’une entreprise X utilise DesignCAD mais fasse appel à un sous-traitant qui utilise AutoCAD : il faudra qu’elle transmette ses fichiers à ce sous-traitant non pas sous le format « .dc » mais bien sous le format « .dwg », exploitable par le logiciel AutoCAD du sous-traitant. Réciproquement, les fichiers «.dwg » produits par ce sous-traitant devront pouvoir être traités par l’entreprise X sous le format « .dc ». L’interopérabilité est assurée par Upperspace Corp., au titre de sa participation à l’Alliance OpenDWG, en offrant à l’utilisateur de son logiciel « DesignCAD » les fonctions appropriées de conversion des fichiers « .dc » vers « .dwg » pour l’exportation d’abord et les fonctions appropriées de conversion des fichiers « .dwg » vers « .dc » en importation d’autre part. Il est clair que, pour accroître encore l’interopérabilité de DesignCAD, d’autres types de conversions vers et depuis d’autres formats très utilisés en D.A.O. sont également offertes par Upperspace Corp.,comme le montrent directement les Boîtes de dialogue « DesignCAD » illustrées ci-après : En exportation : format DesignCAD « .dc » vers formats AutoCAD « .DWG » et « .DXF » Une seconde Boîte de dialogue permettra de préciser la version utile d’AutoCAD : L’examen de la liste déroulante « Type » montre en quels autres formats aussi un fichier DesignCAD « .dc » peut être converti pour l’exportation : « IGES » : « Initial Graphics Exchange Spécifications » , format très couramment utilisé en C.A.O. ( tous les logiciels de CAO Mécanique comme Catia, Cadkey, SolidWorks, … le reconnaissent ) « RIB » : « RenderMan Interface » , format utilisé pour les traitements d’images avec rendu réaliste au moyen de l’interface « RenderMan » développée par Pixar Corporation « VRLM » : “ Virtual Reality Modeling Language ” spécifique aux images 3D Internet “ WMF “ : “ Windows MetaFile” format utilisé par de multiples applications “Windows” En importation : formats AutoCAD « .dwg » et « .dxf » vers format DesignCAD « .dc » Le format complémentaire « XYZ » n’est pas un format de fichier graphique mais il est particulièrement intéressant pour des ingénieurs qui sont souvent amenés à transcrire sous forme graphique des résultats de calculs opérés avec un compilateur tiers qui génère, en sortie, des tableaux de valeurs exclusivement sous une forme standard ASCII ( American Standard Code for Information Interchange ). De tels fichiers peuvent aussi être constitués « manuellement » avec un éditeur de texte ASCII comme le Bloc-Notes de Windows . Si les valeurs consignées sous forme de tableaux de résultats des calculs peuvent être interprétées comme des doublets ou des triplets de coordonnées ( X,Y ) ou ( X,Y,Z ) , l’importation par DesignCAD reportera sur l’écran graphique soit les points identifiés par un « Marqueur » ( PolyMarker de type : Point épais, croix, croix avec cercle, cercle, …) aux emplacements définis par les coordonnées ( dans l’espace 2D ou 3D ), soit joindra ces points par de petits segments, soit joindra ces points par une courbe « lissée » de type « Spline cubique », en fonction de l’option choisie dans une Boîte de dialogue : Le grand intérêt pratique est que, dès ce tracé opéré dans la fenêtre de dessin interactif DesignCAD, il est possible de réaliser un habillage circonstancié du graphique en bénéficiant de tous les outils de dessin interactif inclus dans DesignCAD pour réaliser p.ex. les axes et leurs graduations, les légendes, les couleurs, … Pour un progiciel graphique « vectoriel », il est aussi de grande importance de pouvoir importer des fichiers « bitmap » de type « photographies », notamment en format « .jpg » [ format normalisé par le Comité de normalisation ISO « JPEG » ( Joint Photographic Experts Group ) ]. DesignCAD, p.ex., offre cette fonctionnalité d’importation d’images non vectorielles par appel à la fonction « Charger Fichier Image » dont voici la Boîte de dialogue qui apparaît sur l’écran dès après appel de la fonction dans le menu « Fichier » : La liste déroulante complète dont le détail agrandi est donné ci-après montre le nombre important de formats qu’il est ainsi possible d’importer : Il faut d’ailleurs remarquer de façon plus générale encore que, le nombre de formats circulant dans le domaine du Multimédia, de la DAO / CAO et de la PAO étant pléthorique, des logiciels spécialisés de conversion existent sur le marché ( ex .: ACDSee version 5.0 – www. acdsystems.com ; Irfanview , cf. plus loin ; JPEG Wizard – www.jpegwizard.com ; FireWork- www.telecharger.com ; les classiques de traitement d’images comme ADOBE Photoshop, … ). Une fois l’importation opérée, l’image apparaît sur l’écran graphique DesignCAD et il est alors possible, non pas de « retravailler » l’image photographique comme le font des logiciels spécialisés dits « de retouche d’images », comme Adobe Photoshop p.ex., mais bien d’y superposer un dessin vectoriel, par exemple pour définir les contours de l’objet photographié. Ce type d’opération peut se révéler très utile p.ex. pour un expert qui doit transcrire, sur un dessin annoté, le tracé des fissures qui affectent une maçonnerie ou pour un architecte qui doit établir un croquis de façade à partir d’une photographie. L’exemple qui suit concerne une telle application : le tracé que nous avons opéré ici à titre d’exemple est très sommaire et devrait bien entendu, pour une application « professionnelle », être nettement plus soigné. Sur la copie d’écran, on trouvera, de gauche à droite : - l’image photographique « brute », telle qu’elle se présente après importation ; - une copie de cette image, réalisée par la fonction « copie » de DesignCAD, sur laquelle le tracé vectoriel des contours a ensuite été réalisé en traits épais de couleur claire ; - une copie translatée de ce tracé vectoriel. Il reste aussi possible, grâce à des logiciels spécialisés, d’opérer la vectorisation automatique des images. DesignCAD offre cependant cette possibilité en « standard » et voici p.ex. le résultat de la vectorisation d’une photographie N/B : Nous venons de montrer qu’il existait ainsi un grand nombre de formats d’images : toutes les opérations d’échanges et de conversions entre formats se font évidemment via les fichiers numérisés correspondant aux images traitées. A l’aide des ressources de « dump » ( affichage de code organisé en séquences de lignes ) du « Microsoft Visual Studio », nous pouvons ainsi vous montrer le début du fichier numérique correspondant p.ex. à l’image « Nuages.bmp » : . Si vous n’avez pas accès au Microsoft Visual Studio ( distribué en même temps que le Kit de développement Microsoft C++ ), vous pouvez obtenir le même résultat au moyen d’un logiciel Freeware très intéressant , « Irfanview », que vous pouvez télécharger ( www.irfanview.com ) . Ce programme, créé par le Développeur autrichien Irfan Skiljan ( Vienna, University of Technology ), permet également de lire le fichier image sous forme numérique, exactement comme avec le Microsoft Visual Studio : dans la barre principale de menu, cliquez sur « File » ( ou « Fichier » en version FR ) puis sur « Open in HEX Viewer » et sélectionnez l’image à ouvrir : le résultat sera strictement identique à ce qui est montré cidessus. Il s’agit en fait d’un fichier en « Hexadécimal » : de tels fichiers réclament, pour être lus et interprétés, de solides connaissances très spécialisées, nécessitant en particulier de connaître les clés permettant leur analyse. Il existe ainsi 2 « Bibles » U.S. de référence pour les développeurs de programmes infographiques, consignant et expliquant comment lire et comprendre tous les formats de fichiers utilisés ou ayant été utilisés, parce que ces formats sont très nombreux et diversifiés, chacun répondant à des spécifications bien précises. Ces Ouvrages sont : - Encyclopedia of Graphics File Format de J.MURRAY & W.VAN RYPER ( Ed. O’Reilly) - Graphics File Formats Reference & Guide de W.BROWN & B.SHEPHERD ( Ed. Manning Publications Co.) Il n’entre pas dans le cadre de ce cours d’étudier le détail de ces formats, mais néanmoins, il reste utile de savoir qu’ils existent, comment ils sont constitués dans les grandes lignes et ce qui les distingue. Voyons ainsi d’un peu plus près le fichier décrit précédemment et examinons p.ex. le début de la seconde ligne : - « 00 00 80 02 » est à convertir en nombre décimal : 1er octet : « 20 » en hexadécimal donne, en décimal : ( 2 x 162 ) + ( 0 x 161 ) = 512 2ème octet : « 08 » en hexadécimal donne, en décimal : ( 0 x 162 ) + ( 8 x 161 ) = 128 3ème octet : « 00 » en hexadécimal donne, en décimal : ( 0 x 162 ) + ( 0 x 161 ) = 0 ------------------------------------------------------------------------------------------------------TOTAL = 640 Ceci donne la largeur de l’image : 640 Pixels - « 00 00 E0 01 » est à convertir en nombre décimal : 1er octet : « 10 » en hexadécimal donne, en décimal : ( 1 x 162 ) + ( 0 x 161 ) = 256 2ème octet : « 0E » en hexadécimal donne, en décimal : ( 0 x 162 ) + ( E x 161 ) = 224 3ème octet : « 00 » en hexadécimal donne, en décimal : ( 0 x 162 ) + ( 0 x 161 ) = 0 ------------------------------------------------------------------------------------------------------TOTAL = 480 Ceci donne la hauteur de l’image : 480 Pixels - etc … Quel qu’en soit le format, un tel Fichier Image comporte en général 3 parties : - un en-tête de fichier ; - les données décrivant de façon proprement dite l’image à afficher ; - un ensemble de « métadonnées » (pour les formats les plus récents seulement ). L’En-tête de fichier est une espèce de « mode d’emploi » du contenu ( les données proprement dites ) donnant tout un ensemble d’indications générales relatives au type de codage, à la compression, au nombre de pixels par ligne et par colonne( cf. le début de ligne décodé ), au nombre de bits par pixel,… Ces renseignements assurent aussi la portabilité du fichier. Les Données décrivant de façon proprement dite l’image sont organisées et structurées en correspondance avec les règles qui sont conventionnellement définies et imposées par les prescrits d’entête, p.ex. en ce qui est de la « compression d’image » . Ces 2 premiers blocs - Bloc d’en-tête et Bloc « données décrivant de façon proprement dite l’image » – se retrouvent uniformément dans tous les types de formats, même les plus anciens ( format BMP notamment, remontant au tout début du développement des applications graphiques sur PC ). Par contre, Les Métadonnées qui constituent aujourd’hui le 3ème bloc de tout fichier graphique établi selon les standards actuels sont une partie plus récente de ce type de fichier : elles répondent notamment au besoin qui s’est fait jour depuis l’instauration d’Internet d’une « traçabilité » des fichiers - images, par exemple, pour des questions de propriété intellectuelle et artistique. Ces questions présentent aujourd’hui une importance de plus en plus préoccupante dès lors que la copie des fichiers informatiques se pratique sans difficultés et que le « piratage » de logiciels est un fléau très répandu. Certaines Sociétés productrices de progiciels D.A.O. poursuivent d’ailleurs systématiquement en justice les utilisateurs de versions « piratées », utilisateurs qui donc travaillent avec le logiciel sans en avoir payé la licence d’exploitation. Le choix que nous avons opéré du logiciel « DesignCAD » pour l’apprentissage de l’infographie est d’ailleurs en rapport direct avec ce problème de piratage : ce logiciel, de qualité cependant toute professionnelle, est tellement « bon marché » qu’il peut facilement être acquis selon une licence tout à fait régulière par tout jeune ingénieur qui déciderait d’installer son propre Bureau d’Etudes sans investissements trop lourds. Ces Métadonnées ont fait l’objet d’une classification hiérarchique recommandée par un groupe de travail international constitué de plus de 200 experts ( Groupe EBU/SMPTE ) pour suivre les directives de l’OMPI ( Organisation Mondiale de la Propriété intellectuelle ) : - Classe 0 : en-tête de flot de données, permettant de savoir comment les données sont organisées ; - Classe 1 : métadonnées essentielles, permettant de décoder adéquatement le contenu principal de l’objet multimédia ; - Classe 2 : accès au contenu, destinées à faciliter l’accès au contenu ou, au contraire, à le restreindre, dans le cas de conditions d’accès contre rétribution p.ex. ; - Classe 3 : métadonnées paramétriques, décrivant les paramètres ayant présidé à l’élaboration de l’image, p.ex. des réglages de caméra ; - Classe 4 : métadonnées de composition, décrivant les enchaînements d’objets multimédia entre eux, p.ex. un son / une image ; métadonnées d’héritage et de composition, décrivant d’éventuels « liens de parenté » entre objets ; - Classe 5 : métadonnées relationnelles, précisant des synchronisations et en particulier métadonnées temporelles ; - Classe 6 : métadonnées géospatiales, décrivant p.ex. le positionnement d’une prise de vue [ cf. la technologie actuelle du GPS ( Global Positioning System ) ] ; - Classe 7 : métadonnées descriptives, données de catalogue destinées aux moteurs de recherche des bases de données documentaires ( auteur, titre, localisation, mots-clés, type d’objet [ photo, peinture, …] ) ; - Classe 8 : métadonnées autres , tout ce qui n’est pas décrit dans les précédentes mais qui seraient nécessaire pour des cas particuliers ; - Classe 9 : métadonnées définies par l’utilisateur, porte ouverte à la créativité du concepteur d’une application. Pour vous montrer que les fichiers images contiennent bien de tels renseignements, ouvrons dans « IrfanView » l’image « Yosemite.jpg » fournie en standard dans le répertoire « / mes Documents / mes Images » de Windows (Me) après avoir agrandi la fenêtre « IrfanView » de façon qu’elle remplisse tout l’écran : En cliquant (B.G.S. ) sur l’icône « i » ( cf. flèche ) une Boîte d’information relative à cette image va apparaître sur l’écran dont voici la teneur : Cette Boîte d’information contient un certain nombre de données explicitées « en clair » pour l’utilisateur « lambda » : le logiciel IrfanView est allé rechercher ces données dans l’en-tête et dans les métadonnées du fichier-image « Yosemite.jpg ». Dans la suite de ce cours, nous allons nous attacher plus particulièrement à comprendre ce que sont les données décrivant de façon proprement dite l’image et pourquoi il est nécessaire de les encoder selon les structurations particulières dont les en-têtes et certaines des métadonnées font état, en particulier pour ce qui est de la compression de ces données. Dans la Boîte d’information anglo-saxonne ci-avant, l’unité relative à la taille du fichier est le « Byte », groupe de 8 chiffres binaires « 0 » ou « 1 », dits aussi « Bits ». Un « Byte » se traduit en français par « octet » : il s’agit de la plus petite unité adressable en mémoire. Par exemple, l’octet « 11010100 » qui se convertit en base 10 en « 212 » et en Hexadécimal en «D4 » : 212 = ( 1 x 27 ) + ( 1 x 26 ) + ( 0 x 25 ) + ( 1 x 24 ) + ( 0 x 23 ) + (1 x 22 ) + ( 0 x 21 ) + ( 0 x 20 ) ( 1101 ) = 8 + 4 + 0 + 1 = 13 = D ….. ( 0100 ) = 0 + 4 + 0 + 0 = 4. [ Nombre décimal : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Equivalent Hexadécimal : 0 1 2 3 4 5 6 7 8 9 A B C D E F G ] Les multiples de Bytes ou d’octets sont les suivants : 1 KB = “1 Kilo-Byte ” = 1 Ko = “1 Kilo-octet ” = 1024 octets = 210 octets 1 MB = “1 Méga-Byte ” = 1 Mo = “1 Méga-octet ” = 1024 KB = 1024 Ko = 220 octets 1 GB = “1 Giga-Byte ” = 1Go = “1 Giga-octet ” = 1024 MB = 1024 Mo = 230 octets 1 TB = “1 Tétra-Byte” = 1To = “1 Tétra-octet” = 1024 GB = 1024 Go = 240 octets 1 PB = “1 Péta-Byte” = 1Po = “1 Péta-octet” = 1024 TB = 1024 To = 250 octets Pour vous permettre de vous rendre compte de la signification concrète de ces chiffres, voici quelques correspondances utiles en termes de ce qui peut être stocké dans un segment de mémoire de « X- octets » : 1 octet = 1 nombre de 0 à 256 ou 1 caractère 2 octets = un nombre de 256 à 64000 1Ko = +/- une page de texte de 25 lignes à 60 caractères 1Mo = +/- 1000 pages de texte ; 6 secondes de son en qualité CD 1.4 Mo = une image couleurs à 16.000.000 de couleurs en 800 x 600 pixels ( non compressé ) 1Go = +/- un million de pages de texte ; 1h30 de son en qualité CD, 50 secondes de vidéo 1To = 62 jours de son qualité CD, 14h00 de vidéo 1Po = 170 années de son de qualité CD, 19 mois de vidéo. L’exemple de Base de Données examiné précédemment dans ce texte concernait une image qui n’est pas constituée de traits comme celle établie en faisant usage d’un progiciel DAO comme DesignCAD qui établit des dessins de type « vectoriel », c.à.d. où les pixels sont générés automatiquement par le progiciel en faisant appel à des routines « géométriques » préétablies où l’utilisateur n’a plus qu’à préciser la valeur de certains paramètres pour que le tracé s’exécute automatiquement. Ainsi, si l’utilisateur souhaite dessiner un cercle, il lui suffit de pointer / cliquer sur l’icône « cercle »dans un menu résidant dans la fenêtre graphique DesignCAD puis de préciser les ccordonnées de son centre et la valeur du rayon pour que le cercle se dessine . Voici une copie « écran » de la fenêtre graphique de DesignCAD où vous pouvez observer la présence de nombreux menus avec icônes. Après avoir pointé / cliqué sur l’icône de dessin d’un cercle, l’utilisateur sera amené à préciser numériquement, par frappe du pavé numérique de son clavier, les coordonnées du centre de ce cercle dans une Boîte de dialogue comme celle qui apparaît sur la copie d’écran ci-dessous et de même, toujours via autre Boîte de dialogue, l’utilisateur devra introduire une valeur numérique pour le rayon : le cercle se dessinera sans autres interventions de l’utilisateur : Pointer / Cliquer sur l’icône « cercle » D’apparence, le trait est continu, comme si on l’avait tracé au compas sur une feuille. Toutefois, en y regardant bien, des crénelages semblent apparaître. Procédons à un agrandissement important ( v. p. suivante ). Cet agrandissement confirme sans aucune ambiguïté cette fois ce phénomène de crénelage. Comment l’expliquer ? En fait, ce que le programme réalise, c’est une approche discrétisée du cercle par des points, des pixels d’écran en fait, parce que l’affichage sur l’écran s’opère pixel par pixel . La Fig. ci-dessous schématise, à très grande échelle, le détail entouré d’un rectangle de la copie déjà agrandie d’écran ci-dessus : ECRAN PHYSIQUE PIXEL ALLUME PIXEL ETEINT C’est exactement comme cela aussi que se présente l’image photo « Nuage.bmp » dont voici un très grand agrandissement d’un très petit détail : Ainsi, bien que les modes de construction des 2 images soient radicalement différents, le résultat final au niveau de ce qui apparaît « physiquement » sur l’écran est toujours semblable : un assemblage de pixels dont certains sont noirs, d’autres blancs, ce qui correspond sur l’écran à des pixels allumés ou éteints ( il faudra nuancer ultérieurement ce concept « allumé / éteint » parce qu ‘en fait, les pixels peuvent être plus ou moins allumés selon toute une large gamme de luminosités ; nous y reviendrons plus tard mais cela ne change pas fondamentalement le principe de ce que nous expliquons ici ). Corrélativement, il faut s’attendre à ce que les Bases de Données régissant les états « allumé » ou « éteint » des pixels constituant l’écran physique selon une trame régulière soient constituées elles aussi de façon assez similaire. En fait, ces bases de données auront en effet de grandes similitudes si l’image du cercle dessiné sous DesignCAD est enregistrée comme fichier « image » ( Fichier de type « .bmp » ) : c’est une façon de faire mais c’est perdre alors le bénéfice du caractère vectoriel du dessin DesignCAD qui peut aussi être enregistré sous la forme d’un ensemble d’informations consignant non plus le résultat du dessin comme une vaste matrice de pixels, mais bien comme le codage des informations géométriques relatives à la constitution des diverses entités géométriques constituant le dessin ( p.ex. un code indiquant qu’une entité est un cercle, quelles sont les coordonnées de son centre et quelle est la valeur du rayon et non quels sont les pixels allumés ou éteints qui constituent l’image approchée du cercle), ce qui présente l’avantage de permettre, lors d’une réouverture du fichier, de pouvoir faire réapparaître ces caractéristiques géométriques de l’entité et éventuellement de les modifier à nouveau, chose qui n’est absolument pas possible si le cercle a été enregistré comme un simple ensemble de pixels c.à.d. sous la forme d’un fichier image « Bitmap »: les caractéristiques géométriques de l’entité sont alors totalement perdues et il n’est plus possible de faire alors réapparaître ces caractéristiques et de les modifier. Pour mettre en évidence ce qui vient d’être expliqué, je vous montre, pour le tracé du cercle par DesignCAD, 2 extraits des Bases de Données ( en Hexadécimal ) qui correspondent : - pour la 1ère, à l’enregistrement du fichier image comme une matrice de pixels ( format « .bmp » ) - pour la seconde, à l’enregistrement du fichier « vectoriel » contenant les informations géométriques ( format « .dc » ) Dans ce fichier « .bmp », on ne trouve qu’une très longue liste de « FF » qui correspondent au fond blanc de l’image sur lequel les pixels du cercle apparaissent en noir auxquels correspondent, noyés au sein de la grande masse de « FF », d’occasionnels « 00 » : il faut interpréter cette liste en la lisant de gauche à droite et de haut en bas : cela revient à parcourir, les unes après les autres, les rangées horizontales de pixels qui, toutes ensemble, constituent les lignes de la matrice rectangulaire des pixels « écran ». Et de fait, si l’on scanne l’écran, dans chaque rangée horizontale de pixels, on ne trouvera que 2 pixels noirs pour le cercle, les autres, correspondant au fond blanc de l’image, restant blancs et ceux-ci étant évidemment beaucoup plus nombreux que les 2 pixels noirs. Le fichier enregistré sous format « .dc » comportera des renseignements beaucoup plus variés: une entité comme un cercle comporte en effet beaucoup de renseignements complémentaires à ceux d’ordre strictement géométriques comme p.ex. le type de trait ( continu ou pointillés, … ), la couleur du trait, l’épaisseur du trait,… soit ce qui est désigné par les « attributs » de l’entité : Mais ce n’est pas parce que les renseignements consignés dans ce fichier vectoriel sont plus riches, plus porteurs d’informations que ceux contenus dans le fichier rudimentaire « .bmp » que ce fichier vectoriel occupera pour autant davantage d’espace en mémoire : c’est en fait tout le contraire parce que le fichier vectoriel condense bien plus l’information à propos de l’entité en ne retenant que ses caractéristiques géométriques et ses caractéristiques « Attributs » sans se préoccuper d’une pénible description de l’image point par point, y compris d’ailleurs les points blancs de fond d’écran qui ne présentent en fait aucun intérêt pour l’entité qui y a été dessinée. Ainsi, procédez à l’expérience suivante : dessinez avec DesignCAD un ensemble de rectangles que vous hachurerez d’un pochage intégral ( cf.p. suivante ) de telle sorte que l’image remplisse quasi tout l’écran : cette fois, un très grand nombre de pixels de l’écran sont autres que des pixels blancs de fond d’écran et sont donc en principe à décrire dans le fichier d’enregistrement, ce qui fait que l’on pourrait s’attendre à ce que le fichier enregistré sous forme vectorielle occupe cette fois quasi autant de place en mémoire que le fichier enregistré sous forme « image », de type « .bmp » donc. Or, à l’expérience ( examen après leur enregistrement sous les 2 formats précités des 2 types de fichiers par l’explorateur de Windows en y faisant apparaître les tailles des 2 fichiers ) , les tailles sont les suivantes : - Fichier de type « .bmp » : - Fichier de type vectoriel « .dc » : 1.120.118 octets 62.464 octets Remarquons au passage – et nous y reviendrons ultérieurement – que le fichier « image » pourrait aussi être enregistré sous un format autre que le « .bmp » , soit sous un format « .jpg » qui est un format dit « compressé » mais qui fait courir le risque d’une perte d’information « image » par rapport au fichier brut de type « .bmp ». Sous ce format compressé, la taille mémoire serait réduit à 25.252 octets. Voici donc, comme annoncé en page précédent, la copie d’écran du dessin des rectangles pochés généré sous DesignCAD et qui a été enregistré sous les 3 formats précités : Dans le fichier DesignCAD « .dc », le hachurage des rectangles est enregistré sous une forme synthétique, exactement au même titre qu’un cercle est synthétisé par un petit nombre de renseignements d’ordre géométrique : ces « synthèses » correspondent en fait à un ensemble de valeurs de paramètres intervenant dans la définition algorithmique de l’entité : nous étudierons cela plus loin dans cet ouvrage lorsque nous aborderons le § consacré aux algorithmes de création d’images géométriques. De même, nous avons évoqué le concept de « compression d’images » : nous étudierons également cet autre concept plus loin. 1.2. LES DONNEES NUMERIQUES DE LA BASE DE DONNEES DECRIVANT DE FAÇON PROPREMENT DITE L’IMAGE L’explication concernera un fichier d’image constitué pour afficher cette image sur un écran classique « Raster-Scan CRT » de PC : - « CRT » = « Cathodic Ray Tube » ; - « Raster-Scan » = « utilisant une technologie consistant à produire en zone arrière du moniteur de visualisation un faisceau fin d’électrons puis à le guider vers la face interne de l’écran pour lui faire parcourir (c.à.d. « Scanner ») , ligne par ligne, la matrice ( « Raster » = « matrice » ) rectangulaire des pixels « écran », c.à.d. les micro-zones contiguës couvrant la face interne de l’écran et pouvant émettre un spot lumineux lorsqu’elles sont frappées par le faisceau d’électrons, spots perceptibles alors par l’utilisateur qui observe l’écran et ainsi former une image globale constituée d’un ensemble de points, « éteints » en zones foncées et « allumés avec plus ou moins d’intensité » dans les zones plus claires. En fait, sous sa forme la plus simple, c.à.d. pour un écran monochrome, le noyau principal d’un fichier graphique destiné à l’affichage d’une image sur de tels écrans consigne, sous une forme numérique et selon les conventions de codage et de structuration dont il a été question au §1.1, une matrice, dite « Bitmap », décrivant cet état actif ou passif à imposer pour chacun des « pixels » (Picture Elements ) ou « dots » ( « dot » = « Point » ) d’un écran CRT , c.à.d. l’état où ce pixel émet ou non un signal lumineux perceptible par l’utilisateur : un tel type de moniteur est donc à considérer comme travaillant par « Tout ou Rien » au niveau de l’affichage de chacun de ses pixels. Sous cette forme très simple, considérons donc un écran monochrome ( pour notre exemple élémentaire : écran affichant seulement 16 pixels par lignes et 12 pixels par colonne, en faisant remarquer immédiatement que les écrans classiques réels présentent des affichages à nombre de pixels beaucoup plus importants, 1024 pixels par ligne et 768 pixels par colonne p.ex. ) où l’état des pixels ne peut être qu’« allumé » ou « éteint », sans nuances de gris et sans nuances de couleur. Voici alors la constitution d’une Bitmap où le codage, élémentaire, consiste à introduire, dans une matrice numérique, des nombres écrits en « base 2 », c.à.d. en « binaire », en correspondance avec chacun des pixels et selon la même organisation structurelle. Comme, en binaire, les chiffres – appelés « bits » - se réduisent aux seuls « 0 » et « 1 », le codage le plus « intuitivement logique » consiste à attribuer le « 0 » comme code pour un pixel qui doit rester « éteint » et le « 1 » pour un pixel qui doit être « allumé » : ECRAN PHYSIQUE PIXEL ALLUME BITMAP 00 00 0 00 00 0 00 00 0 00 00 0 00 00 0 00 00 1 00 00 1 00 00 1 00 00 1 00 00 1 00 00 0 00 00 0 PIXEL ETEINT 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 PIXEL ALLUME 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PIXEL ETEINT Bien entendu, plutôt que d’avoir affaire à un écran à fond noir où le caractère « H » apparaît blanc, comme sur la Fig. ci-dessus, l’inverse pourrait être tout aussi bien réalisé, c.à.d. un fond blanc où le caractère apparaît en noir, auquel cas le codage 0 / 1 des pixels serait tout simplement inversé aussi. Le codage sera évidemment beaucoup plus complexe pour des images travaillant avec des moniteurs « couleurs » : chacun des pixels doit alors être décrit de façon plus étendue que par un seul bit par pixel parce que l’intensité d’émission lumineuse doit alors être modulée entre les 2 états « tout ou rien ». De tels codages impliquent alors un descriptif à 8, 16, 24 ou 32 bits par pixel selon le nombre de couleurs simultanément affichables à l’écran ( p.ex., 8 bits par pixel correspondent à une palette de 256 couleurs et 24 bits par pixel correspondent alors à 16 millions de couleurs affichables ). Les « Propriétés » de l’image « Yosemite.jpg » telles que le logiciel IrfanView les a mises en évidence ( cf. quelques pages auparavant ) correspondent ainsi à une image de 1024 x 768 pixels codés en 8 bits / pixel : il s’agit en fait d’une image en « dégradé de gris », forme équivalente à un affichage « 256 couleurs », la palette des couleurs classiques étant remplacée par une palette de gris. Par opposition, une image « Noir et Blanc » codée en 1 bit / pixel ne saurait donner lieu à une palette de dégradés de gris. Pour mettre en évidence la différence entre une image en « dégradé de gris » ( 8 bits / pixel ) et l’imagecorrespondante en strict « Noir et Blanc » ( 1 bit / pixel ), la petite manipulation suivante du fichier« Yosemite.jpg » est fort intéressante : - Dans le programme de dessin « Paint » de Windows ( Démarrer / Programmes / Accessoires / Paint ), ouvrir le fichier «Yosemite.jpg » : l’image va apparaître en « dégradé de gris » dans la fenêtre de travail « Paint » ; - Enregistrer le fichier sous le nouveau nom « Yosemite Noir et Blanc.bmp » en précisant dans la Boîte de dialogue « Enregistrer sous » que le codage doit être à 1 bit / pixel ( c.à.d. en format monochrome Noir et Blanc) : Détail agrandi de la Boîte de dialogue : Dès l’enregistrement validé en ce format monochrome « 1 bit / pixel », l’image change d’aspect et ne présente plus aucun dégradé de gris mais uniquement, en fort contraste, du Noir et du Blanc: Un détail agrandi permet une meilleure comparaison : Image en dégradé de gris Image Noir et Blanc : un seuil a été imposé pour sélectionner dans la palette des gris de l’image d’origine le niveau à partir duquel le pixel doit être considéré « éteint » ( Noir ) ou « allumé » ( Blanc ) dans la nouvelle image monochrome . Pour de telles images codées à ( n bits / pixel ; n > 1 ), la représentation digitale ne correspond plus alors à une simple Bitmap : le terme consacré est plutôt alors : « Pixmap » ( Pixel Map ). La taille « mémoire » des fichiers « Pixmap » est évidemment 8,16,24 ou 32 fois plus importante que celle d’un fichier « Bitmap » concernant le même nombre de pixels « écran ». Pour un écran « 800 x 600 pixels », le fichier « Bitmap » occupera ( théoriquement ) 480.000 bits, soit 60.000 octets ( un octet = un groupe de 8 bits ), soit aussi 58,59 Ko ( Ko = Kilo-octet = 1.024 octets) . Pour le même écran, le fichier « Pixmap » occupera ( théoriquement ), en 24 bits / pixel p.ex., 11.520.000 bits, soit 1.440.000 octets, soit 1.406 Ko, soit 1,37 Mo ( Mo = Mégaoctet = 1.024 Ko ). Par un codage plus complexe, la structuration de la Pixmap peut cependant être modifiée pour occuper moins d’espace « mémoire » : le format est alors dit « compressé » : un § ultérieur expliquera en quoi consiste une « compression de fichier image ». Pour vous permettre de bien comprendre la correspondance entre Bitmap numérique et pixels « écran », plaçons-nous dans la situation suivante : une image est enregistrée selon une bitmap de 1024 x 768 termes ( il existe donc dans cette Bitmap, un nombre N0 de « 0 » et un nombre N1 de « 1 » tels que N0 + N1 = 1024 x 768 = 786.432 termes ). Supposons que cette image soit affichée sur un écran de 1024 x 768 pixels. Elle va y apparaître « plein écran » : c’est pratiquement le cas de l’image « Yosémite Noir et Blanc.bmp » observable dans la copie d’écran de IrfanView où elle a été importée : on constate d’ailleurs que le descriptif général du codage apparaissant en bas de l’écran graphique « IrfanView » confirme le codage de l’image « Yosemite Noir et Blanc.bmp » en 1024 x 768 termes à 1 bit / pixel : Supposons alors que, pour en observer un détail, cette image soit agrandie p.ex. 8 fois, tout en maintenant les mêmes limites physiques de la fenêtre d’affichage, c.à.d. le même nombre de pixels physiques adressables ( en fait, rigoureusement, la fenêtre d’affichage ne contient pas tout à fait 1024 x 768 pixels parce qu’il existe des menus prédéfinis et des dessins de bordure de fenêtre qui consomment une certaine fraction de ces 1024 x 768 pixels de l’écran complet : nous considérerons cependant, pour la simplicité de l’exposé, que tout se passe comme si la fenêtre d’affichage de la photo comprenait bien 1024 x 768 pixels). Il est clair que dans cette fenêtre physique « écran » et à la suite de l’agrandissement, l’image entière ne saurait plus « tenir » mais que seul un huitième de cette image pourra encore être affichée. Le nombre de pixels physiques « écran » adressables reste cependant toujours identique, 1024 x 768. Par contre, la partie d’image qui va apparaître dans cette fenêtre « écran » suite à l’agrandissement ne va plus concerner que ( 1024 / 8 = 128 ) x ( 768 / 8 = 96 ) termes de la Bitmap, soit 12.288 éléments qu’il faut alors bien répartir entre les 786.432 pixels, sans distordre la forme générale du détail agrandi de l’image. Le principe de l’agrandissement est alors d’attribuer l’information concernant chaque terme de la huitième partie de Bitmap non plus à un seul pixel d’écran, mais bien à ( 8 x 8 = 64 ) pixels d’écran groupés en carré, chacun des pixels « physiques » de tel carré recevant la même information d’affichage et information correspondant à l’un des termes appartenant à cette huitième partie de bitmap. En effet, la procédure d’agrandissement doit évidemment « se contenter » des informations consignées dans la partie de bitmap correspondant à la portion d’image qui va remplir l’écran après agrandissement et ne pourra pas « inventer » de nouvelles informations pour les besoins de cette portion d’image. Procédez ainsi à ce type d’agrandissement pour l’image « Yosemite Noir et Blanc.bmp » dans « IrfanView » en cliquant ( B.G.S. ) successivement sur l’icône de zoom ( la petite loupe avec un « + » ) : à chaque clic, des carrés contigus de plus en plus grands forment l’image. Chacun de ces carrés est en fait formé d’un nombre de plus en plus grand de pixels physiques « écran » au fur et à mesure que le zoom progresse. La partie de l’image apparaissant dans les agrandissements est relative au feuillage de l’arbre situé au bord du plan d’eau , à gauche sur la photo, et dont l’arrière-plan est formé de hauts résineux sombres. Pour que les carrés apparaissent de façon distincte, il faut procéder à de très grands agrandissements, de l’ordre de 200 % au moins : les pixels physiques présentent en effet un diamètre très limité, de l’ordre de 2.5 dixièmes de millimètres : il faut donc constituer des carrés d’un bon nombre de pixels pour qu’ils deviennent bien apparents. Vous pourrez d’ailleurs constater que si vous procédez à un agrandissement de 1000 % ( 990 % en fait, soit le maximum admis par IrfanView ), soit +/- 10 fois, les carrés qui vont apparaître sur l’écran présenteront bien une longueur de côté de l’ordre de 2.5 millimètres … faites l’expérience et mesurez ! Les 2 agrandissements de la page suivante concernent l’image monochrome Noir et Blanc. La mise en évidence de l’attribution des caractéristiques d’un terme de la Bitmap à un nombre de pixels physiques « écran » groupés en carrés est encore plus manifeste si l’on procède à l’agrandissement de l’image « Yosemite.jpg » caractérisée par le dégradé de gris : les carrés de pixels font vraiment bien apparaître l’attribution d’un même niveau de grisé pour tous les pixels constituant un carré et niveau de gris qui correspond à celui du pixel de la Pixmap originale dont le carré est la représentation agrandie : 2 agrandissements de l’image en dégadé de gris sont ainsi montrés après les 2 qui concernent l’image monchrome. AGRANDISSEMENTS DE L’IMAGE MONOCHROME : Agrandissement 300 % Agrandissement 500 % AGRANDISSEMENTS DE L’IMAGE EN DEGRADE DE GRIS Agrandissement 400 % Agrandissement 800 % Dans le même objectif pédagogique de vous faire « toucher du doigt » ce que sont les pixels d’un écran, voici une autre application qui vous est tout à fait accessible sur votre propre PC, simplement en utilisant le petit programme d’édition de Bitmaps : « Windows Paint » ( on y accède sur l’écran graphique classique « Windows » par : Démarrer / Programmes / Accessoires / Paint ). Dans la fenêtre qui remplit l’écran, on distingue une vaste zone grise qui est la partie d’écran réservée au tracé et des zones latérales Bas / Haut / Gauche / Droite prédéfinies et contenant des menus, des icônes, … Pour réaliser un tracé dans « Paint », il faut d’abord définir une zone active « de travail » dans la partie grisée de l’écran en spécifiant sa largeur et sa hauteur en pixels dans la Boîte de dialogue « Attributs »,appelable par Clic ( B.G.S. ) sur la commande « Image » puis sur « Attributs » dans le menu déroulant associé à la commande « Image », p.ex. un rectangle de 200 x 150 pixels : Cette zone de travail apparaît comme un rectangle blanc occupant une partie seulement de l’espace disponible ( le plan gris ) pour une largeur de 200 pixels et une hauteur de 150 pixels: 200 x 150 Pixels 4262 octets Modifions alors progressivement la taille de la zone de travail, toujours par appel à la Boîte de dialogue « Attributs » en accroissant progressivement sa largeur et sa hauteur ( en pixels ) : 400 x 300 Pixels 800 x 600 Pixels 15662 octets 60062 octets En enregistrant successivement chacune de ces images de rectangle blanc sous le format monochrome Noir et Blanc ( 1 bit / pixel ) puis en appelant ( Clic sur commande « Image » puis Clic sur « Attributs » dans le menu déroulant ) la Boîte d’affichage « Attributs », les dimensions des fichiers numériques « Bitmap » associés à ces rectangles seront lisibles. Ces fichiers Bitmap codent l’état « blanc », c.à.d. « allumé » ( Code « 1 » ) des pixels contenus dans ces rectangles On peut ainsi constater les espaces « mémoire » suivants tels qu’ils sont occupés sur le disque dur ( taille toujours un peu supérieure à la taille « réelle » du fichier proprement dit ) par les Bitmaps de valeurs numériques codées pour les 3 cas : - Rectangle 200 x 150 pixels : 4.262 octets Rectangle 400 x 300 pixels : 15.662 octets Rectangle 800 x 600 pixels : 60.062 octets. Comme le codage est en 1 bit / pixel non compressé, les blocs de données décrivant de façon proprement dite les parties utiles des images ( les rectangles blancs ) au sein de ces fichiers occupent : - Rectangle 200 x 150 pixels : 30.000 bits, soit ( 30.000 / 8 ) = 3.750 octets Rectangle 400 x 300 pixels : 120.000 bits, soit ( 120.000 / 8 ) = 15.000 octets Rectangle 800 x 600 pixels : 480.000 bits, soit ( 480.000 / 8 ) = 60.000 octets. Pour être bien convaincu que le codage dans la Bitmap représente bien 1 bit / pixel, que les pixels soient « éteints » ( Noir ) ou « allumés » ( Blanc ), des tracés avec remplissages sont alors opérés pour le cas du rectangle de 400 x 300 pixels, image enregistrée à nouveau en « monochrome » à 1 bit / pixel. La Boîte de dialogue « Attributs » permet de contrôler que la taille du fichier Bitmap est restée strictement la même, c.à.d. 15.662 octets et ce, bien que l’image ait été sensiblement modifiée quant à son contenu, mais non quant au nombre de pixels physiques « écran » concernés par ce contenu, ni non plus quant à leur codage en 1 bit / pixel : Comparons alors les fichiers Bitmap correspondant d’une part au rectangle blanc et d’autre part au rectangle blanc avec les dessins d’ellipses et de rectangle remplis de noir : CAS DU RECTANGLE BLANC En hexadécimal, ( FF ) correspond à l’octet ( 1111 1111 ), soit 8 bits « 1 » correspondant à l’état « allumé » de 8 pixels. Chaque groupe ( 00 00 ) limite une nouvelle ligne de pixels du rectangle blanc sur l’écran. Chaque ligne de pixels ( entre 2 groupes de « 00 00 » ) contient ainsi 50 (FF) successifs, soit 50 x 8 bits de valeur « 1 », ce qui correspond bien aux 400 pixels de chacune des lignes du rectangle « Blanc », c.à.d. formé de pixels « éclairés ». La toute 1ère colonne ( à gauche des « : » ) indique les adresses « mémoire » de ce codage. Cette zone « mémoire » de la Bitmap est montrée ici parce qu’elle correspond à la zone ou un rectangle noir est dessiné à l’intérieur du rectangle blanc pour le second dessin dont la Bitmap est analysée en page suivante. Pour cette autre Bitmap, il faut donc s’attendre à ce que des groupes de bits « 1 », allumés dans le 1er dessin du rectangle blanc deviennent des groupes de bits « 0 » là où les pixels sont éteints pour former le rectangle noir inclus dans le rectangle blanc. CAS DU RECTANGLE BLANC AVEC ELLIPSES ET RECTANGLE REMPLIS DE NOIR Chacune des lignes horizontales traversant le rectangle noir contient ceci ( à examiner entre 2 groupes de « 00 00 » ) : - 5 octets ( FF ) et un octet ( FE ), c.à.d. 5 octets ( 1111 1111 ) et un octet ( 1111 1110 ), soit 47 pixels blancs « allumés » et 1 pixel noir « éteint » ; - 25 octets ( 00 ), c.à.d. 25 octets ( 0000 0000 ) , soit 200 pixels noirs « éteints » ; - 19 octets ( FF ) , c.à.d. 19 octets ( 1111 1111 ), soit 152 pixels blancs « allumés ». Autrement dit, chaque ligne horizontale traversant le rectangle noir contient, de gauche à droite : 47 pixels blancs, puis 201 pixels noirs, puis 152 pixels blancs, soit en tout 400 pixels. Il est particulièrement intéressant de contrôler ces valeurs en important le rectangle comme « image Bitmap » dans DesignCAD et d’y procéder aux mesures des longueurs horizontales entre bord gauche du rectangle blanc et bord gauche du rectangle noir ( on doit retrouver la longueur « 47 » ) puis entre bord gauche et bord droit du rectangle noir ( on doit retrouverla longueur « 201 » ) puis entre bords droits du rectangle noir et du rectangle blanc ( on doit retrouver la longueur « 152 » ). Bien entendu, pour appliquer valablement la cotation dynamique de DesignCAD entre points, il faut d’abord y imposer qu’entre bords du grand rectangle blanc, la longueur est de 400 unités graphiques. Voici le résultat de cette cotation dynamique réalisée après importation de l’image Bitmap dans DesignCAD : Cette cotation dynamique par DesignCAD confirme donc ce que l’analyse de la bitmap numérique permettait d’interpréter en matière de nombre de pixels. Une précision utile : le dessin original réalisé avec « Windows Paint » est vraiment du type « à main levée » et dès lors, c’est « au hasard » que le positionnement et le dimensionnement du rectangle noir a été opéré, ce qui motive la distribution très quelconque des 400 pixels horizontaux en valeurs non multiples de 10 ou de 5 pixels p.ex.. Toujours dans ce programme Windows « Paint », nous allons montrer l’opération inverse de l’agrandissement étudié précédemment ( en prenant comme exemple l’image « Yosemite.bmp » ) : cette fois, nous partons d’un fond blanc correspondant à un rectangle blanc p.ex. de 800 x 600 pixels. La 1ère opération est d’agrandir ce rectangle au maximum : dans le barre d’outils de « Paint », cliquer sur « Affichage » puis, dans les menus en cascade, cliquer sur « zoom » puis sur « personnaliser ». Dans la Boîte de dialogue « zoom personnalisé », choisir l’agrandissement « 800 % » puis « OK ». Cliquer une seconde fois sur « Affichage » puis « zoom » puis « Afficher la grille » : une grille en grisé apparaît sur l’écran, ainsi qu’un curseur. Chacun des petits carrés délimités par le quadrillage contient évidemment un certain nombre de pixels « écran » ( 64 = 8 x 8, en correspondance avec l’agrandissement « 800 % » = « 8 fois » ) mais est l’image agrandie d’un seul pixel du rectangle initial à 800 x 600 pixels : chacun des 64 pixels d’un carré va alors recevoir, lors du « Pointer / Cliquer » sur ce carré, un codage unique, soit « Noir ». En cliquant ainsi à l’intérieur de l’un de ces petits carrés, on voit ce carré se noircir entièrement et il est ainsi possible de dessiner avec toute « précision », « pixel agrandi » par « pixel agrandi », une figure quelconque : Le retour à la taille initiale 100 % par : « Affichage / Zoom / Personnaliser / 100 % » montre la même figure, en taille plus réduite, et où, cette fois, chacun des pixels est à « sa taille normale écran » et présente le même codage « Noir » que les 64 pixels du carré correspondant de l’image agrandie à 800 % : A présent que les principes de base de la constitution des fichiers graphiques sont acquis, essayons decomprendre, plus technologiquement, ce que sont les écrans Raster-Scan CRT et comment leurs pixels sont activés par faisceaux d’électrons : ce sera l’objet du § 1.3. 1.3. LES PRINCIPES TECHNOLOGIQUES DE BASE DES ECRANS RASTER-SCAN CRT 1.3.1. NOTIONS DE BASE Qu’ils soient « Noir et Blanc » ou « Couleurs », leur technologie de base est celle du « Tube à vide à rayons cathodiques » qui s’est d’abord développée notamment pour les moniteurs TV classiques, les écrans de contrôle ( de radars,… ) ainsi que pour les oscilloscopes et dont le principe général de construction est expliqué ci-après pour un TRC monochrome . L’inventeur (1897 ) de son « ancêtre », le « Tube de Braun » est le Prof. Karl Ferdinand BRAUN qui enseigna la physique théorique à Malbourg, Tübingen et Strasbourg et reçu le Prix Nobel de Physique en 1909 à la fois pour cette invention et pour ses recherches théoriques sur les systèmes de transmission de Guglielmo MARCONI ( Télégraphie Sans Fil ), celui-ci étant d’ailleurs le co-Titulaire du Prix Nobel précité. SCHEMA DE PRINCIPE D'UN TUBE A RAYONS CATHODIQUES Dans l’ampoule de verre ( 0 ) où le vide a été assuré ( une rupture due à un choc accidentel provoque d’ailleurs une « implosion » du tube, comme cela arrive parfois pour les T.V. domestiques reposant sur les mêmes principes constructifs ) , un canon à électrons ( 1 ) émet un flux d’électrons qu’un dispositif de focalisation ( ( 2 ), ( 3 ), ( 4 ) ) réduit à un faisceau très fin ( 7 ). Ce faisceau subit ensuite l’action de 2 dispositifs déviateurs ( ( 5 ), ( 6 ) ) agissant selon 2 directions orthogonales qui dévient de façon contrôlée la trajectoire du faisceau de façon à lui permettre de frapper, en tout emplacement quelconque ( X, Y ) de l’écran la couche luminescente ( 8 ) recouvrant la face interne de l’écran et y provoquer, par luminescence cathodique, l’apparition d’un spot visible alors par l’observateur externe de l’écran. - Le canon à électrons ( 1 ) produit le faisceau par émission thermo-ionique : l’élément chauffant peut être un filament en spirale métallique bifilaire, placé à l’intérieur d’une cathode de nickel en forme de « gobelet », le filament étant isolé de la cathode par de la céramique. Une couche émettrice (oxydes de baryum, de strontium et de calcium ) est placée sur la cathode et produit par échauffement un nuage d’électrons. - 3 électrodes ( 2 ), ( 3 ), ( 4 ) agissent ensuite en cascade sur le nuage d’électrons : 1°. La 1ère, de « modulation », appelée souvent « grille », agit sur l’intensité du faisceau, c.à.d. en fait sur la quantité d’électrons constituant le faisceau ( ordre de grandeur de la différence de potentiel / cathode : quelques dizaines de Volts ) . Cette intensité modulera à son tour proportionnellement celle de l’émission de lumière émise par le point frappé par le faisceau sur la couche luminescente d’écran : celle-ci est en effet proportionnelle au nombre d’électrons qui la bombardent. Cette électrode de contrôle est pilotée par un dispositif amplificateur, lui-même commandé par le circuit d’output du PC transmettant les indications utiles en matière d’intensité souhaitée pour chaque emplacement des spots « écran ». Cette partie du dispositif est donc de première importance pour l’affichage graphique : le contrôle de la tension de grille contrôle l’intensité de lumière du spot à l’écran et permet donc en particulier, pour les moniteurs « couleur », des dégradés de couleurs. 2°. La 2ème, d’ « accélération », assure aux électrons la grande vitesse nécessaire pour que leur frappe sur la couche luminescente ait l’énergie suffisante au développement du phénomène souhaité d’excitation luminescente sur la couche interne de l’écran.(ordre de grandeur de la différence de potentiel / cathode : quelques centaines de Volts ). 3°. La 3ème, de « focalisation », réduit le diamètre faisceau à l’ordre de quelques dixièmes de millimètre.( ordre de grandeur de la différence de potentiel / cathode : 10.000 à 20.000 Volts ). - 2 ensembles ( 5 ) et ( 6 ) de déviation du faisceau, travaillant l’un selon l’axe X, l’autre l’axe Y ( en supposant que l’écran rectangulaire soit référencé selon un axe horizontal X et selon un axe vertical Y ), ont pour rôle d’infléchir le faisceau sortant, selon la direction Z, de l’ensemble (1) à (4) pour qu’il puisse atteindre n’importe quel point de l’écran. Ces 2 ensembles ( 5 ) et ( 6 ) de déviation ont pour principe de développer un champ variable, que ce champ soit de type électrostatique ( 2 plaques conductrices parallèles soumises à une différence de potentiel, comme illustré sur le croquis ) électromagnétique ( 2 bobinages en opposition placés alors à l’extérieur du tube à vide et travaillant par induction ). Dans le premier type constructif, la déviation du faisceau est proportionnelle à la tension appliquée entre plaques, tandis que dans le second, elle est proportionnelle au courant appliqué aux bobines. Dans les 2 cas, cette déviation du faisceau s’obtient ainsi en lui faisant traverser un champ quasi uniforme ( du point de vue géométrique ) mais variable ( du point de vue de son intensité ). Dans le 1er cas, la déviation en millimètres sur l’écran qui correspond à une variation de tension d’un Volt est appelée Sensibilité de déviation en tension du tube cathodique. Dans le second cas, la déviation en millimètres sur l’écran qui correspond à une variation de courant d’un mA est appelée Sensibilité de déviation en courant du tube cathodique. Pour les écrans « Raster-Scan CRT », ces déviations sont imposées selon un cycle immuable qui conduit le faisceau à « balayer » l’écran ligne par ligne ( horizontale ) et une fois toutes les lignes balayées pour un cycle, ce même cycle est réitéré et ainsi de suite …Chacune des lignes est composée de pixels formant une « trame » régulière sur l’écran : on parle donc aussi d’écrans à « balayage de trame » comme traduction française de « Raster-Scan ». ECRAN RASTER-SCAN CRT : Principe du BALAYAGE DE TRAME Comme le montre le schéma de principe ci-dessus, un cycle complet se décompose en : o Nh parcours de lignes ( Nh = nombre de lignes horizontales composant la trame ) opérés de gauche à droite sur chaque ligne ; o ( Nh – 1 ) « retours de trace » pour passer d’une ligne horizontale à la suivante, de l’extrémité droite de la 1ère à l’extrémité gauche de la suivante ; o 1 retour diagonal de trace depuis l’extrémité droite de la dernière ligne vers l’extrémité gauche de la 1ère. Les signaux du contrôleur vidéo commandant le moniteur et traduisant de façon analogique les informations digitales « Bitmap » vont d’une part obliger le faisceau d’électrons à des déviations régulées pour parcourir l’écran de façon monotone régulière en suivant toujours strictement les séquences de parcours expliquées ci-dessus et d’autre part, agir sur la tension de grille régulant, pour chaque pixel visé par le faisceau, son intensité en fonction des indications consignées dans la Bitmap. Nous avons vu l’exemple du fichier Bitmap monochrome relatif au rectangle blanc de 400 x 300 pixels: il est entièrement composé ( à l’exception de l’en-tête) de 300 séquences répétitives de 400 valeurs binaires « 1 » ( consignées chacune sous le format hexadécimal de 50 séquences « FF » ) indiquant que la tension de grille maximum est à imposer pour chacun des 400 pixels de chaque ligne. Ces séquences relatives à chacune des lignes sont systématiquement séparées par des séquences hexadécimales « 00 00 » : ces dernières correspondent à la tension de grille cette fois nulle qu’il faut imposer au canon à électrons pour qu’il n’y ait pas d’électrons émis pendant les retours de trace : La fréquence selon laquelle le balayage complet de l’écran est opéré se mesure en « hertz » ( Hz ), c.à.d. le nombre de cycles de balayage de tout l’écran opérés en une seconde. Cette fréquence est appelée « Fréquence de synchronisation verticale », le terme « synchronisation » correspondant au fait que la carte graphique pilotant le moniteur lui adresse un signal, un « Top de synchronisation », marquant le début et la fin d’un cycle. De façon équivalente à la « Fréquence de trame », on parle aussi de «Fréquence de rafraîchissement » ( « Refresh Rate » ) d’un écran : chaque fois qu’un pixel (luminophore) est frappé par le faisceau lors d’un cycle de parcours de l’écran, ce pixel émet très brièvement de la lumière et il est donc nécessaire pour qu’une image puisse être observée par l’utilisateur que cette émission de lumière soit répétée avec une grande fréquence pour que sa propre persistance rétinienne intègre les spots émis à courts intervalles réguliers en une seule image de longue durée, d’où cette nécessité d’un balayage répétitif à haute fréquence qui « rafraîchit » et entretient l’émission lumineuse des pixels à courts intervalles réguliers : plus précisément encore, comme l’excitation est brève mais répétée, il se produit un phénomène d’accumulation qui augmente rapidement le niveaucrête de luminance pour le porter au niveau d’entretien. Même pour des écrans travaillant en haute résolution, c.à.d. à très grand nombre de pixels, le matériel doit être susceptible d’un rafraîchissement suffisant pour éviter un phénomène très gênant de « scintillement », c.à.d. un effet de battement du signal lumineux qui serait associé à une fréquence de balayage trop faible et à des intervalles de temps trop longs entre spots successifs ( U.S. : « Scintillement » = « Flicker » ). La fréquence de rafraîchissement minimum au-delà duquel l’impression visuelle de scintillement disparaît pour tout utilisateur ne présentant pas une pathologie visuelle est appelé la « Fréquence Critique de fusion » ou « FCF » ( en anglais « Critical Fusion Frequency » ou « « CFF » ), le terme « fusion » correspondant au concept d’intégration d’images brèves répétées en une image d’apparence continue et stable. Cette Fréquence critique de fusion dépend de la « luminance » du spot ( unité de mesure : la Candela / m2 ) mais encore reste toutefois variable d’un individu à l’autre ( persistance rétinienne ) dans une fourchette de l’ordre de 20 Hz et si l’on veut assurer, statistiquement, que 99% des utilisateurs courants ne perçoivent pas de scintillement, le moniteur doit, idéalement, travailler avec un taux de rafraîchissement de 80 à 100 Hz et 60 hz reste un strict minimum. Le prix d’un écran va donc dépendre en grande partie de son aptitude à supporter un taux de rafraîchissement élevé même pour des résolutions élevées : lorsque vous achetez des écrans pour votre entreprise, il faut donc que vous veilliez à cette caractéristique technique essentielle, sachant que très généralement, les constructeurs ne garantissent une fréquence élevée que pour la résolution « recommandée » de chaque type de moniteur, mais que si ce moniteur est piloté pour réaliser une résolution plus élevée que la « recommandée », la fréquence de rafraîchissement est plus faible. Dans la gamme PHILIPS, il n’existe actuellement qu’un seul type de moniteur CRT chez ce constructeur ( le « 22’’ Brillance 202P40 » ) qui assure à la fois une fréquence de rafraîchissement de 104 Hz en résolution recommandée ( 1600 x 1200 ) pixels et 80 Hz en résolution maximale possible de ( 2048 x 1536 ) pixels ; tous les autres moniteurs courants chez PHILIPS redescendent à 60 Hz en résolution maximale ( sauf 2 autres modèles qui n’atteignent cependant que 74 et 75 Hz ). En général, il est recommandable de régler les moniteurs à une fréquence de rafraîchissement ne descendant pas sous les 70 Hz, sachant par ailleurs que les moniteurs « multifréquences » s’adaptent automatiquement aux fréquences des adaptateurs vidéo. Voici, à titre d’exemples, une liste ( non exhaustive ) de standards de rafraîchissements auxquels s’adaptent les moniteurs Multisynchrones : 60, 70, 72, 74, 80, 85, 91, 100, 104 Hz. Via Windows, il est ainsi possible d’opérer le réglage utile selon la procédure software suivante : « Poste de Travail / Panneau de configuration / Affichage / Propriétés d’affichage / Paramètres / Avancé / Carte … et régler dans la Boîte de dialogue le Taux de rafraîchissement ». La Fréquence critique de fusion n’a par ailleurs aucun rapport avec le risque de destruction de l’écran par brûlage des cristaux qui en recouvrent la face interne : tous les cristaux luminescents ont en effet une durée de vie limitée, fonction de l’intensité du faisceau et de la durée d’exposition à ce faisceau. Pour éviter de « brûler » les cristaux, il importe donc que les programmes de gestion des écrans CRT tiennent compte de ce risque. Vous avez ainsi p.ex. pu constater que la gestion d’écran propre à Microsoft Windows prévoit un mode de passage automatique en « écran de veille » en cas de non réception d’une action d’entrée endéans un délai que l’utilisateur peut d’ailleurs fixer justement pour éviter qu’une image statique trop longtemps affichée ne brûle l’écran ( Procédure : Poste de travail / Panneau de configuration / Affichage / Propriétés de l’affichage / Ecran de veille / Attente … ?…minutes ). De même qu’un « Top de synchronisation » doit marquer la fin d’une « page écran », de même faut-il qu’un Top signale le début et la fin de chaque ligne horizontale lors du cycle de parcours de l’ensemble des lignes horizontales de cette « page » : on définit ainsi une « fréquence de synchronisation horizontale » qui correspond donc en fait au nombre de lignes horizontales rafraîchies par seconde . Les ordres de grandeur de cette fréquence horizontale doivent donc correspondre au produit de la fréquence de rafraîchissement par le nombre de lignes affichées sur l’écran . P.ex., soit un affichage 800 x 600 pixels ( et donc 600 lignes ) rafraîchit à 70 Hz : la fréquence de synchronisation horizontale est de l’ordre de : 600 x 70 Hz = 42.000 Hz = 42 KHz . Soit un autre affichage à 1600 x 1200 pixels ( et donc 1200 lignes ) rafraîchi à 91 Hz : la fréquence de synchronisation horizontale est de l’ordre de : 1200 x 91 Hz = 109.200 Hz = 109 KHz . Donc, de façon générale, ces fréquences de synchronisation horizontales s’expriment en KHz , dépendent de la définition de l’affichage ( le nombre de lignes horizontales de l’écran ) et sont comprises dans une fourchette ( avec les performances , fin 2002 ) de l’ordre de 30 à 130 KHz ( « KHz » = « Kilo-Hertz ). - La couche luminescente recouvrant la face interne de l’écran est constituée de cristaux ( communément appelés « luminophores » ou « phosphores » mais il peut s’agir p.ex. d’orthosilicates de zinc, sulfites de zinc, cadmium et calcium contenant des traces de cuivre, de manganèse, d’argent, … ) présentant la propriété d’émettre de la lumière dans le spectre visible lorsqu’ils sont frappés par le faisceau d’électrons libres. Cette émission « immédiate » lors de la frappe par le faisceau d’électrons est appelée « fluorescence », mais il existe toujours une rémanence de l’émission lumineuse après l’impact par le faisceau, rémanence appelée « phosphorescence », tandis que la durée de cette rémanence est appelée « persistance ». Ce phénomène s’explique de la façon suivante : les électrons incidents sont animés d’une grande énergie cinétique lorsqu’ils frappent un luminophore de la couche émissive recouvrant la face interne de l’écran ; cette énergie se transfère, lors de l’impact, en partie en énergie d’échauffement et en partie en élevant les niveaux quantiques des électrons des atomes du luminophore : lors du retour des électrons des atomes ainsi excités aux niveaux quantiques primitifs, une émission photonique se produit. Il existe toutefois, parmi les niveaux quantiques auxquels les atomes sont portés, des niveaux de plus ou moins grande stabilité des électrons. La fluorescence – émission la plus immédiate de lumière – correspond au retour à l’état non excité des électrons portés aux niveaux les plus instables. La phosphorescence – émission différée de lumière – correspond au cas des électrons portés aux états quantiques les plus stables. La persistance est définie comme le temps s’écoulant entre impact du luminophore par le faisceau d’électrons incidents et instant où la phosphorescence atteint un seuil inférieur d’émission lumineuse correspondant à 10% de la lumière initialement émise. Si la fluorescence est un phénomène de très brève durée ( une fraction de microseconde) la persistance, due à la phosphorescence, est de nettement plus grande ampleur ( de l’ordre de 10 à 60 micro-secondes ) : l’image se forme donc bien davantage grâce à la propriété de phosphorescence des luminophores que par le biais de leur luminescence. L’usage de luminophores à très longue persistance n’est pas indiqué pour des écrans graphiques, a fortiori si des séquences animées s’y inscrivent : des phénomènes de traînéesdes images s’y produiraient alors. A contrario, pour les écrans « radar » une grande persistance est recherchée : des luminophores offrant des persistances allant jusqu’à l’ordre de 10 secondes y sont couramment utilisés ( images à faible fréquence de récurrence ). 1.3.2. LES PIXELS ET LA RESOLUTION D’UN ECRAN CRT Ces concepts sont à étudier différemment selon que l’écran est du type « monochrome » ou « couleurs » : bien que les écrans « monochrome » soient aujourd’hui supplantés par les écrans de type « couleurs » en raison de la considérable diminution de prix de ces derniers, il reste toujours intéressant d’étudier les monochromes parce que, pédagogiquement, ils sont plus simples que les « couleurs » et permettent donc d’induire beaucoup de concepts en matière de résolution avant de les généraliser aux écrans « couleurs ». Très intuitivement et globalement, la résolution d’un écran est relative au nombre de pixels qui peuvent y être affichés et le pixel est lui-même imaginé comme une tache lumineuse ronde bien délimitée et centrée sur une position ( x, y ) de la trame, ce qui n’est en fait qu’une modélisation théorique de la réalité technologique où, selon le type de moniteur, les pixels voisins peuvent se superposer partiellement ou au contraire être séparés par un espace qui peut d’ailleurs être lui-même différent dans le sens horizontal ou vertical : jusqu’à présent dans ce cours, un pixel a été considéré comme une micro-entité indépendante de ses voisines, comme si chacun des pixels était une micro-lampe de taille parfaitement définie bien distincte de ses voisines. Nous verrons cependant dans la suite que la résolution d’un écran n’est pas tout à fait ce qu’annoncé cidessus, qui doit plutôt s’appeler « définition d’écran » De même, si cette façon d’envisager les pixels est assez proche de la réalité pour les écrans plats à matrice active où chaque point de l’écran est commandé par un transistor dédicacé et où les pixels sont plutôt de type « carrés non superposés », tout autre est le cas des écrans CRT où la taille du pixel est notamment tributaire d’une part du diamètre du faisceau d’électrons bombardant la couche continue cristalline luminescente recouvrant la face arrière du verre d’écran et d’autre part de la taille des cristaux constituant cette couche. Comme le faisceau d’électrons incidents est focalisé par des dispositifs à symétrie de révolution, la forme générale du faisceau est cylindrique à section circulaire. Toutefois, les dispositifs de focalisation ne réalisent jamais une répartition isotrope de la densité d’électrons dans cette section : la répartition de densité est d’allure gaussienne. Lorsque ce faisceau d’électrons frappe la couche luminescente à l’arrière du verre d’écran, un spot lumineux est émis, mais l’intensité de lumière adopte, autour du point central d’impact, une même distribution gaussienne directement corrélée avec celle de la densité d’électrons Verre d'Ecran Revêtement luminescent Distance à l'Axe du faisceau d'électrons Densité d'électrons Intensité de la Lumière émise FAISCEAU D'ELECTRONS Les répartitions gaussiennes corrélées de densité d'électrons et d'intensité de lumière émise Autrement dit, comme le spot se caractérise par une lumière intense en son centre mais qui s’estompe progressivement vers les bords, la définition de sa dimension caractéristique ne peut qu’être conventionnelle : l’usage s’est imposé de considérer son diamètre comme celui où l’intensité de lumière atteint les 50 % de l’intensité maximale centrale : Verre d'Ecran Revêtement luminescent 50% 50% Intensité de la Lumière émise 1 PIXEL Axe du Faisceau d'Electrons Répartition Gaussienne de la Lumière émise Définition conventionnelle de la taille de Pixel Pour les écrans monochromes graphiques à Très Haute Résolution, l’ordre de grandeur du diamètre de pixel ou de la « Taille de Pixel » ( « Dot Size » ou « Spot Size » ) est : 0,125 mm ( 5 millièmes de pouce ). On définit alors l’ « Adressabilité » d’un écran comme le nombre de pixels qui peuvent y être générés par unité de longueur par le faisceau d’électrons et toute son électronique de commande : plus particulièrement, cette notion d’adressabilité est liée à l’aptitude du système à pouvoir « allumer » ou « éteindre » un nombre n de pixels distincts ( c.à.d. dont les pics d’intensité de lumière émise sont distincts, même si les taches de lumière se « recouvrent » partiellement en leurs zones de moindre intensité ) lors du balayage sur une longueur d’un pouce d’une ligne horizontale. Ce concept d’adressabilité est également lié au concept classique d’ « adressage » des données dans les mémoires de l’ordinateur : chacun des bits décrivant, dans une Bitmap monochrome, l’état allumé ou éteint d’un pixel possède en effet une « adresse » bien spécifique, en corrélation avec la structure d’enregistrement de ces données. La « Distance entre Pixels » ( U.S. : « Interdot Distance » ) correspond à la distance entre pics de lumière : cette distance est évidemment l’inverse de l’adressabilité. Cette distance peut être un peu plus petite que le diamètre du pixel, afin de permettre une certaine « fusion » visuelle entre 2 dots adjacents et ce, pour que les formes générées puissent être « adoucies ». Evidemment aussi, plus la fusion est importante, moins le « détail » de l’image est visuellement perceptible : l’ajustement de la distance entre pixels en fonction de la taille du pixel est ainsi une question de compromis. La définition de la « Résolution » d’un écran fait appel à vos souvenirs du cours de Physique « Optique » : il s’agit en effet d’un concept étroitement lié à celui du « Pouvoir Séparateur » de l’œil, appelé aussi « Pouvoir Résolvant » : deux points lumineux peuvent être distingués par l’œil si leurs images se forment sur 2 cellules distinctes de la rétine. Le Pouvoir Séparateur se mesure par l’angle AOB minimum selon lequel l’œil « O » est susceptible d’encore pouvoir distinguer 2 points « A » et « B » : A 1 minute d'arc O B Pouvoir séparateur de l'oeil A la distance usuelle d’observation d’un écran d’ordinateur, soit 65 cm, la distance entre A et B est de l’ordre de 2 dixièmes de mm ( 0.1891 mm ). Ainsi, en écartant 2 pixels de diamètre 0.125 mm de cette valeur minimun 0.189 mm, un recouvrement des pixels n’existerait que pour leurs zones à moins de 50 % d’intensité lumineuse, pour autant que leurs courbes de Gauss de répartition d’intensité soient suffisamment « étalées ». Ce contexte « physiologique » de la définition du Pouvoir Résolvant implique alors, corrélativement, que la « Résolution » d’un écran se mesure expérimentalement comme étant la limite supérieure du nombre de lignes alternativement noires et blanches tracés par pouce de longueur ( verticale ou horizontale : les résolutions peuvent différer dans les 2 directions ) sur écran qu’un observateur à 65 cm de l’écran est encore susceptible de distinguer : les CRT monochromes graphiques qui ont existé sur le marché affichaient ainsi couramment des résolutions de l’ordre de 120 lignes par pouce, c.à.d. que les rangées de pics correspondant aux pixels de lignes étaient écartés ( distance inter-ligne ou, de façon équivalente, « interdots » ), de 0.21 mm. Expérimentalement, on utilise une grille de lignes parallèles dont l’interdistance entre lignes est modulée via tension ( pour le cas des plaques ) ou via courant ( cas des bobinages ) du dispositif de déflexion du faisceau d’électrons et on relève à partir de quel nombre de lignes, sur une largeur mesurée, ces lignes se fondent en un grisé uniforme : il a été montré que cette fusion apparaissait lorsque l’interdistance entre 2 lignes noires valait le diamètre pour lequel l’intensité du spot vaut 60 % de l’intensité maximum de pic d’un pixel. Cette résolution est en fait typiquement une caractéristique « Hardware » de l’écran : les réseaux de lignes sont en effet générés indépendamment d’une induction « Software » par Bitmap . Vous pourrez simuler cette expérience avec DesignCAD : supposons que vous travaillez avec un écran à 1024 x 768 pixels : vous estimerez d’abord – éventuellement en vous aidant d’une latte - quelle proportion de largeur occupe la partie utile de l’écran graphique par rapport aux parties occupées par les icônes de menu. Pour l’exemple traité ici, la largeur de plage utile est de l’ordre de 80 % de la largeur totale . Précisez alors : « Cotation / Unité entre 2 Points / Poser 2 points +/- sur la même horizontale aux extrémités Gauche et Droite de la zone utile de dessin / Indiquer comme nombre d’unités « écran » correspondant à la distance entre les 2 points : « 800 ». Tracez ensuite une verticale de haut en bas. Tracez alors quelques parallèles à gauche et à droite à distance imposée : « 2 ». La simulation consiste à se rapprocher et à s’éloigner de l’écran : pour un certain éloignement, vous observerez de façon très caractéristique le phénomène de fusion des lignes en un rectangle grisé où les lignes deviennent indiscernables ( v. p. suivante ). Simulation en DesignCAD de la grille de mesure ( Shrinking Raster ) de résolution d’écran Si la résolution verticale ( mesurée avec un réseau de lignes horizontales ) est principalement fonction du diamètre du pixel, la résolution horizontale ( mesurée avec un réseau de lignes verticales ), par contre, est non seulement tributaire de cette taille de pixel, mais encore de l’aptitude de l’électronique de commande de tension de grille aux « Off / On » du faisceau d’électrons un nombre n / 2 de fois « On » et n / 2 de fois « Off » pour « allumer » un pixel puis «éteindre » le pixel suivant immédiatement sur la ligne horizontale composée de n pixels parcourue par le faisceau en un temps donné pour y générer les pixels alternativement Blancs et Noirs composant les lignes du réseau vertical de mesure. Cette aptitude à générer les « Off / On » avec une vitesse suffisante est en relation avec la « Bande Passante » ( U.S. : « Bandwidth » ou «Video Dot Rate » ) du moniteur, comme expliqué ci-après : Soit un moniteur où le rafraîchissement est de 60 Hz et soit un écran à 103 lignes ( hor. ) de 103 pixels : - 106 pixels sont donc parcourus 60 fois par seconde par le faisceau - 6 x 107 pixels sont donc parcourus par seconde - le temps de parcours par pixel vaut donc ( 10-7 / 6 ) = 0.167 x 10-7 = 17 x 10-9 seconde = 17 nano-seconde - le calcul ci-dessus ne tient compte du retour de faisceau ni entre lignes ni en diagonale en fin de chaque cycle de parcours d’écran, retours qui consomment en fait une fraction non négligeable du temps et qui réduisent ainsi le temps de parcours dédicacé à chaque pixel : le temps de parcours par pixel est en fait réduit à l’ordre de 11 nano-seconde - le temps nécessaire pour un « On / Off » est donc de 22 nano-seconde - la fréquence des « On / Off » vaut donc ( 1 / ( 22 x 10-9 )) = 45 x 106 Hz = 45 Méga-Hertz = 45 MHz - cette fréquence minimale théorique doit encore être accrue en pratique pour « affiner » l’impact du faisceau sur chaque pixel et donner lieu à des spots de lumière dont la répartition gaussienne est plutôt en pic qu’étalée et qu’ainsi , les bords des pixels apparaissent plus nets, ce qui est essentiel pour un moniteur graphique à haute résolution : dans cet objectif, la fréquence des « Off / On » est au moins doublée par rapport au chiffre précédent et cette fréquence est alors ce qu’on appelle la Bande Passante du moniteur, dont l’ordre de grandeur pour les moniteurs à haute résolution N.B. est de l’ordre courant de 100 MHz. La Bande passante est donc en fait une grandeur caractéristique de la qualité du tube et caractérise les performances en fréquence du dispositif de modulation de l’intensité du faisceau d’électrons. En pratique, on peut évaluer la Bande passante minimum admissible en multipliant le nombre de pixels affichables dans la définition maximum de l’écran par la fréquence de rafraîchissement pour cette définition et en accroissant la valeur obtenue de 20 % : p.ex., pour un moniteur de définition maximum 1920 x 1440 pixels pour laquelle la fréquence de rafraîchissement est de 74 Hz, l’évaluation de la bande passante minimum admissible conduit à la valeur 205 MHz . Pour le moniteur PHILIPS « Brillance 109P40 » de 19’’( prix fin 2002 : +/- 300 Euros ) présentant cette définition et cette fréquence de rafraîchissement, le Constructeur annonce une bande passante de 261 MHz. Pour son modèle « Brillance 109B40 » un peu moins coûteux ( +/- 200 Euros ) de même définition maximum mais de fréquence de rafraîchissement moindre pour cette définition, la Bande passante annoncée par le constructeur n’est plus que de 203 MHz. Pour un écran « couleurs », la surface interne de l’écran est constituée d’une mosaïque de zones élémentaires contiguës appelées « luminophores » susceptibles d’émettre chacune une lumière de l’une des 3 couleurs fondamentales R, G, B ( Red, Green, Blue ) lorsqu’elles sont frappées par l’un des 3 faisceaux d’électrons émis par les 3 canons à électrons équipant les moniteurs couleur CRT. Des études physiologiques sur la vision colorée ont en effet démontré que l’œil répondait aux stimuli avec des maxima de sensibilité distincts se situant dans le Rouge, le Vert et le Bleu et qu’une couleur queconque peut être constituée par un mélange de ces 3 couleurs. Chaque triplet de luminophores est ainsi souvent disposé triangulairement et constitue un pixel ; la Fig. ciaprès schématise le modèle couramment mis en oeuvre pour les écrans de moniteurs vidéos informatiques ( l’invention en 1949 de ce type de tube est dû à la firme U.S. R.C.A. « Radio Corporation of America » , l’inventeur étant l’ingénieur David SARNOFF ; cette invention concernait, au départ, les premières télévisions « couleurs » ) : B G R G B R G B R G B R B G B G R G R B R G B B G B G R G R R G B R G B R G R R G B R A noter que, des précautions particulières restant toutefois à prendre pour que chaque faisceau n’atteigne que les luminophores de l’une des 3 couleurs R, G ou B, la solution technologique consiste à disposer, à faible distance de l’écran, une plaque métallique perforée de petits trous, appelée « Masque » ( « Shadow Mask CRT » ), à raison d’un trou par triplet de luminophores et vers lesquels convergent les faisceaux issus des 3 canons. Ces trous sont rigoureusement disposés à la fois par rapport aux triplets de luminophores et aux canons à électrons pour garantir une focalisation telle que les luminophores d’un type de couleur R, G ou B ne soient excités que par le faisceau provenant du tube à électrons correspondant, commandé en amont par contrôleur vidéo pour donner lieu à cette couleur lorsque ses électrons frappent le luminophore susceptible de générer cette couleur : Blue Green Red 3 Faisceaux d'électrons 3 CANONS A ELECTRONS R G B MASQUE ECRAN PRINCIPE DU MONITEUR COULEUR CRT A MASQUE En jouant avec l’intensité de chacune des 3 couleurs primaires R, G, B et compte tenu que les luminophores constituant un triplet sont contigus et à très faible distance l’un de l’autre, l’œil ne les discrimine pas et intègre les 3 éléments en un seul, le pixel, comme s’il s’agissait d’un seul et unique point, dont la nuance de couleur résultera du mélange des 3 couleurs d’intensités diverses correspondant aux 3 luminophores du pixel, mélange susceptible de donner lieu à une large palette de couleurs perceptibles par l’œil. Aux perforations de ce masque correspondent les triplets disposés en « delta » sur la face interne de l’écran et donc les pixels affichés. La grandeur qui caractérise le masque est ce qu’on appelle le « Pas de Masque » dit aussi « Pas de Perforation du Masque » ( U.S. : « Pitch » ) : cette grandeur correspond à la distance séparant les centres des perforations du masque métallique disposé contre et derrière l’écran proprement dit et donc aussi, corrélativement, la distance séparant 2 points ( 2 triplets ) sur l’écran. Il convient toutefois de distinguer ce pitch « vrai » du pitch « horizontal », le second étant souvent annoncé dans les catalogues de fabricants de moniteurs parce que plus petit que le premier, dans une proportion égale à sin 60°, soit 0.866 fois plus petit : à un pitch vrai de 0.28 mm correspond donc un pitch horizontal de 0.24 mm, c.à.d. une valeur commercialement plus avantageuse : ai h r V itc P Hauteur R R B G B G R Triangle équilatéral G B R G B Pitch Horizontal 1 Pixel Le nombre de perforations doit évidemment être égal au nombre maximum de pixels affichables sur l’écran, ce nombre de pixels étant par ailleurs ce que l’on appelle la « définition d’écran » intrinsèque aux performances du moniteur. Pour des raisons technologiques, le nombre de perforations est toutefois toujours un peu supérieur à la définition d’écran . Très usuellement ( cf. catalogues technico-commerciaux des moniteurs ), cette définition d’écran est aussi appelée, improprement, « résolution » et, actuellement, la grande majorité des écrans sont susceptibles d’afficher toute une gamme de « résolutions » : chaque moniteur reste cependant optimisé pour une « résolution recommandée » pour laquelle la fréquence de rafraîchissement est maximum, les résolutions supérieures étant en général entachées d’une moindre fréquence de rafraîchissement. Comme vous le savez certainement, outre leurs performances d’affichage, les écrans sont caractérisés par leurs dimensions et il est d’usage de les caractériser par la dimension de la diagonale exprimée en « pouces » ( 1 pouce = 1 inch = « ‘’ » = 25,4 mm ). Les Standards sont 14’’, 15’’, 17’’, 19’’, 20’’, 21’’ et 22’’ ; leurs coûts ont d’ailleurs très sensiblement décru au fil des années ( les « 17’’ » étaient encore vendus aux environs de 60 à 100.000 BEF en 1993, tandis que fin 2002, ces « 17’’ » se trouvent aux environs des 200 à 300 Euros ; un « 21’’ » de qualité s’acquiert fin 2002 à +/- 1000 Euros ). Comme la technologie des moniteurs graphiques CRT est directement dérivée de celle des moniteurs TV, les écrans graphiques pour PC ont respecté la norme TV, c.à.d. l’imposition de trames rectangulaires à rapport constant « largeur / hauteur » = 4 / 3. C’est pourquoi les Standards d’affichage ( type « 1024 x 768 » ) présentent toujours le rapport Nombre de pixels par ligne / Nombre de pixels par colonne ( ou, de façon équivalente : Nombre de lignes ) = p.ex. 1024 / 768 = 4 / 3 . Ces Standards sont définis par la « Video Electronics Standards Association » ( VESA ), consortium de plus de 100 cosignataires de l’industrie informatique, dont évidemment INTEL et AMD et tous les grands constructeurs de matériel, comme IBM. IBM est d’ailleurs à l’origine de la résolution 1024 x 768 : en 1987, premiers moniteurs couleurs à cette résolution en 16 couleurs affichables sur 262.144 : moniteur « 8514 » avec carte graphique « 8514/A ». L’un des 1ers standards, le « VGA » ( «Video Graphic Array » ) est le fondement des modes graphiques actuels : il permettait un affichage à 640 x 480 points en 16 couleurs et à 320 x 200 points en 256 couleurs, chaque point étant codé en 8 bits, en mode dit « entrelacé ». Ce mode, suranné, était utilisé pour permettre d’afficher des images à haute résolution malgré une bande passante trop faible : ce système affiche alternativement les lignes paires et les impaires . Ce mode a notamment été introduit par IBM en 1990 sur les PS/2 selon un Standard alors appelé « XGA » pour permettre l’affichage de 1024 x 768 points en 256 couleurs en mode entrelacé. Pour des questions ergonomiques de confort visuel ( le mode « entrelacé » provoque en effet une grande fatigue visuelle ) est aujourd’hui abandonné au profit du mode « non entrelacé », tel que nous l’avons d’ailleurs décrit dans les explications concernant le balayage d’écran ; l’évolution technologique qui permet de plus grandes bandes passantes le permet actuellement. Les « Résolutions » Standards actuelles sont : - 800 x 600 ( SVGA ) 1024 x 768 ( XGA ) 1152 x 864 1280 x 1024 ( SXGA ) 1600 x 1200 ( UXGA ) 1920 x 1080 ( QXGA ) 1920 x 1440 2048 x 1536 ( QXGA ) Le pitch sera évidemment tributaire, à la fois de la dimension « physique » de l’écran ( à noter qu’une partie de l’écran est toujours logée dans le capotage externe et, par conséquent, un écran de « 17’’ » ne présentera en fait qu’une zone utile de « 16’’ », la différence étant toujours de +/- 1’’ pour les CRT , par contre, ce n’est pas le cas des écrans plats LCD ) et de la résolution maximum qu’il est susceptible d’afficher mais l’ordre de grandeur moyen du pitch vrai tourne autour des 0.25 mm. Etant donné le pouvoir de résolution de l’œil ( 0.1891 mm à 65 cm ), il est en effet inutile de faire descendre le pitch sous la barrière des 0.2 mm. Toutefois, plus le pitch est petit, plus « fin » sera le détail observable sur l’écran et donc, inversement, il ne convient pas d’aller au-delà de 0.28 mm si l’on veut garder une définition correcte de l’image. La plupart des écrans graphiques CRT de qualité offrent un pitch vrai de 0.24 mm pour un diamètre de pixel ( « Dot Size » ) de 0.25 mm, c.à.d. qu’ils admettent un léger recouvrement des pixels. Les écrans très spécialisés de grandes dimensions ( les « 22’’ » ) pour le graphique où la finesse du détail est un élément déterminant ( p.ex. les analyses d’images satellites en G.I.S.- Systèmes d’Informations Géographiques - ou la conception de circuits imprimés ou l’imagerie médicale) privilégient davantage le piqué du détail : le pitch est alors un peu supérieur au diamètre du pixel, p.ex. 0.28 mm pour le pitch vrai et 0.24 mm pour le diamètre de pixel. Le choix d’un écran graphique dépend du nombre de pixels des fichiers graphiques que vous comptez y traiter . Voici quelques recommandations à ce sujet : - images en 800 x 600 pixels : écrans 15’’ images en 1024 x 768 pixels : écrans 17’’ images en 1280 x 1024 pixels : écrans 19’’ images en 1600 x 1200 pixels : écrans 21’’ Si vous utilisez un écran trop grand pour la résolution affichée, les images y seront trop agrandies ( plusieurs pixels utilisés pour représenter un terme de bitmap ) et vous y perdrez en finesse du détail. Pour vous en convaincre, réglez par software, dans Windows et si vous utilisez un écran à 1024 x 768 pixels « physiques », la résolution à 640 x 480 pixels : ( « Poste de travail / Panneau de configuration / Affichage / Propriétés de l’affichage / Paramètres ) puis réglez par curseur à 640 x 480 pixels . Observez alors attentivement la nouvelle image dans cette définition : Non seulement les fenêtres se chevauchent, mais surtout le piqué des détails s’est fortement dégradé par rapport à l’affichage en 1024 x 768 pixels. 1.4. LES IMAGES ACHROMATIQUES ET LES IMAGES « COULEUR » L’image « Yosemite.jpg » sur laquelle nous avons déjà travaillé est typiquement de type Noir et Blanc, avec dégradé de gris : le logiciel IrfanView la décrit ( « Image / Information » ) comme suit : Il s’agit d’une image codée à 8 bits par pixels, à 256 nuances allant du Blanc au Noir, avec 254 nuances de gris intermédiaires. Ceci signifie d’abord que l’image est achromatique, c.à.d. que l’œil qui la perçoit n’éprouve aucune sensation de couleur. Ensuite, chacun des 1024 x 768 pixels, au lieu de ne présenter que 2 états possibles d’intensité lumineuse, c.à.d. de luminance comme c’est le cas des images strictement Noir et Blanc, présente au contraire toute une gamme intermédiaire de luminances : 256 luminances en fait. Corrélativement, l’œil perçoit aussi 256 luminosités distinctes pour ces pixels. Pourquoi alors 256 et non 255 ou 257 ? Il a été montré par IrfanView que l’image était codée en 8 bits par pixel , c.à.d. en 1 octet / pixel. Ces 8 bits peuvent, chacun, présenter la valeur 0 ou 1. Il existe donc un grand nombre d’arrangements possibles pour un tel octet, p.ex : ( 10000000 ), ( 00110001 ), ( 10101010 ),… Pour un codage à 1 bit / pixel , les arrangements seraient ( 0 ) ou ( 1 ), soit 21 arrangements Pour un codage à 2 bits / pixel, les arrangements seraient ( 00 ), ( 01 ), ( 10 ), ( 11 ), soit 22 arrangements Pour un codage à 3 bits / pixel, les arrangements seraient ( 000 ), ( 001 ), ( 010 ), ( 011 ), ( 100 ), ( 101 ), ( 110 ), ( 111 ), soit 23 arrangements … Et pour le codage à 8 bits / pixels, le nombre d’arrangements vaut 28, soit 256. A chacun des arrangements correspond effectivement une nuance de gris dans une « palette » de 254 gris + le Noir profond et le Blanc pur ( en tout 256 nuances ), comme il est possible de le faire apparaître dans IrfanView par « Image / Palette / Edit Palette » : Par un pointer / cliquer ( B.G.S. ) sur l’un des petits carrés de cette palette, IrfanView fait apparaître des valeurs « RGB », ce qui signifie qu’en fait, les grisés ont été obtenus par mélange des 3 couleurs primaires Rouge, Vert et Bleu sur un écran « couleurs » avec des intensités « 151 » égales pour les 3 couleurs : nous l’expliquerons davantage plus loin. Considérons alors, théoriquement, une autre image, mais cette fois en 16 nuances de gris sur un moniteur monochrome : comme 16 = 24, cette image est nécessairement codée en 4 bits / pixel . Chacun des 16 arrangements possibles ( 0000 ), ( 0001 ), ( 0010), …, ( 1111) correspond à des codages distincts donnant lieu à 16 nuances de gris ( allant du Blanc au Noir avec 14 gris intermédiaires ) qui constituent une palette où chacune des couleurs porte un numéro d’ordre ( conversion binaire – décimal : ( 0000 ) = 0, ( 0001 ) = 1, ( 0010 ) = 2, ( 0011 ) = 3, …, ( 1111 ) = 15 [ 0, 1, 2, …, 15 = 16 nombres entiers consécutifs ] ). Ces nuances, sur un écran monochrome, sont obtenues en modulant l’intensité du faisceau d’électrons depuis l’état intensité nulle ( pixel noir éteint ) jusqu’à l’état d’intensité maximum ( pixel de luminance maximum = pixel blanc ) en passant par 14 intensités croissantes ( pixels de gris de plus en plus clair ). Rappelons que cette modulation d’intensité du faisceau d’électrons correspond à des variations imposées à la tension de grille du canon à électrons. Un premier modèle d’architecture élémentaire peut être envisagé pour ce cas : il consiste à organiser la mémoire vidéo en 4 plans-mémoire, chacun contenant, pour un pixel donné, un bit de codage ; pour chaque pixel, les 4 bits de codage consignés dans ces 4 tables sont transmis à un convertisseur numérique / analogique « N / A » ou « DAC » ( « Digital Analogic Converter » ) qui commande le réglage de la tension de grille ( signal analogique ) en fonction de la valeur ( signal numérique ) transmise par les 4 bits : 4 PLANS MEMOIRE 1 CONVERTISSEUR DAC Faisceau Tension de Grille du CRT 0 1 1 PIXEL ECRAN Revenons alors aux 256 nuances de gris du tout 1er exemple de ce § : la différence est qu’elles sont générées sur un écran couleur à 3 canons R, G, B. Le modèle de couleurs RGB correspond à un système cartésien dont les 3 axes figurent les intensités des 3 couleurs primaires Red, Green, Blue, ces intensités allant chacune, par pas de 1, de la valeur 0 à la valeur 255 : Bleu 255 Bleu Cyan Blanc Magenta Gris 0 Rouge Rouge 255 Noir Vert Vert 255 Jaune MODELE RGB Chaque triplet, p.ex. ( Rouge = 28, Vert = 126, Bleu = 212 ) donne lieu à une couleur bien précise du spectre visible par combinaison additive des 3 composantes primaires R, G, B et correspond à un point du cube de la Fig. précédente., soit à l’intérieur de ce cube, soit sur ses faces ou arêtes. Pour que vous l’expérimentiez, appelez le programme Windows « Paint » et double-cliquez ( B.G.S. sur l’une des petites cases de couleur au bas à gauche de l’écran : une Boîte de dialogue « Modifier les couleurs » apparaît sur l’écran : Cliquez sur le bouton : « Définir les couleurs personnalisées », une nouvelle Boîte de dialogue apparaît : Faites varier ( cf. rectangle et flèche ) les valeurs R, G, B entre 0 et 255 [ valeurs ENTIERES ! ] en écrivant ces valeurs par clavier dans chacune des petites cases et observez dans le rectangle coloré « Couleur unie » les résultats. En particulier, observez les résultats suivants pour des triplets de valeurs particulières : ( 0, 0, 0 ) : Noir ( 255, 0, 0 ) : Rouge vif ( 0, 255, 0 ) : Vert vif ( 0, 0, 255 ) : Bleu vif ( 255, 255, 0 ) : Jaune vif ( 255, 0, 255 ) : Magenta ( 0, 255, 255 ) : Cyan ( 255, 255, 255 ) : Blanc pur Puis composez des triplets dont les 3 termes sont égaux : ( 50, 50, 50 ), ( 100, 100, 100 ), … : vous constaterez que vous obtenez alors diverses nuances de gris. Comme les 3 termes des triplets sont strictement égaux pour la palette des nuances de gris, une seule valeur peut donc caractériser les 3 termes ensemble et comme il existe seulement 256 valeurs différentes, soit 28 valeurs différentes, 8 tables ou « plans de mémoire » en binaire seraient suffisants : d’où un codage possible en 8 bits/ pixel de l’image en dégradé de gris. On pourrait ainsi, en principe et dans ce cas particulier d’image en dégradés de gris, transmettre, pour chaque pixel, via convertisseur DAC, les 8 bits correspondants lus dans les 8 plans mémoire pour commander de façon identique les 3 canons. Mais supposons alors que, sur le moniteur couleur où se trouve affichée l’image « Yosemite.jpg » en dégradés de gris, l’utilisateur souhaite modifier un certain ton de gris en le transformant en rouge vif. Le problème qui se pose immédiatement est que cette fois, les 3 canons à électrons ne peuvent plus recevoir les mêmes instructions, tout au moins pour les pixels qui doivent s’afficher en rouge puisqu’en effet, le triplet de codage RGB est : 255 pour le Rouge, 0 pour le Vert et 0 pour le Bleu. Il faudrait donc envisager 3 x 8 tables , chacun des groupes de 8 tables étant dédicacé à la commande de l’un des canons à électrons, via DAC bien entendu et chacun de ces groupes de 8 tables donnerait ainsi lieu à 256 possibilités pour chacune des valeurs R, G, B : la gamme de teintes possibles correspondant aux arrangements des 3 valeurs sélectionnées parmi 256 donnerait donc lieu à 2563 = 16.777.216 nuances. Une telle gestion de mémoire étant peu compatible avec les temps d’accès et de lecture des mémoires il y a encore relativement peu de temps, une solution a été trouvée à l’époque ( avant +/- 1990 ) , mais solution qui limite alors toujours, dans notre cas, l’affichage à 256 « couleurs », dont 255 nuances de gris et 1 Rouge : cette solution est de pré-coder une palette de 256 couleurs, comprenant donc les 255 nuances de gris et 1 Rouge. Une telle solution se retrouve aujourd’hui encore dans beaucoup de logiciels graphiques, comme d’ailleurs dans le petit logiciel « Paint » de Windows, qui date d’ailleurs de l’époque précitée. Cette fois, les 256 valeurs correspondant aux 256 arrangements possibles des 8 bits ne correspondent plus directement aux valeurs RGB, mais sont simplement des adresses dans la liste des teintes offertes par la palette, chacune des teintes étant par ailleurs précodée dans cette palette via 3 valeurs RGB qui n’ont alors plus aucun rapport avec leur adresse, même si le nombre d’adresses distinctes est aussi 256, comme le nombre de valeurs possibles dans le codage RGB. L’architecture d’un tel modèle est cette fois la suivante : 8 PLANS MEMOIRE 0 Adr. 1 R 0 G 1 1 0 1 1 B Adresse Valeur R DAC Valeur G DAC Valeur B DAC Palette des 256 couleurs B G R ECRAN PRINCIPE DES TABLES DE COULEURS Réfléchissons davantage à propos de cette palette et plus particulièrement à propos de ce que signifie le nombre de couleurs évidemment différentes qui y figurent. En fait, ce nombre peut prendre 2 significations distinctes - d’une part, pour notre exemple, le nombre 256 signifie le nombre de couleurs distinctes adressables via le codage en 8 plans mémoire pour chaque pixel ; - mais cela signifie-t-il, d’autre part, qu’il n’existe alors que 256 couleurs possibles au plus ? En fait, cela va dépendre du nombre de bits attribués dans les colonnes R, G et B de la table des couleurs pour composer ces couleurs, comme expliqué ci-après . Supposons que les codages figurant dans les colonnes R, G, B de la table des couleurs soient chacun à 4 bits, p.ex. ( 0101 ) pour R, ( 0011 ) pour G, ( 1010 ) pour B. Les 16 arrangements possibles de chaque groupe de 4 bits valent, en décimal et par conversion Binaire / Décimal : ( 0000 ) = 0 ( 0100 ) = 4 ( 1000 ) = 8 ( 1100 ) = 12 ( 0001 ) = 1 ( 0101 ) = 5 ( 1001 ) = 9 ( 1101 ) = 13 ( 0010 ) = 2 ( 0110 ) = 6 ( 1010 ) = 10 ( 1110 ) = 14 ( 0011 ) = 3 ( 0101 ) = 7 ( 1011 ) = 11 ( 1111 ) = 15 Ceci sera converti par les 3 DAC des canons à électrons comme suit : un codage binaire( 0101 ) qui est p.ex. égal à 5 en décimal va commander, via le DAC, une intensité du canon égale aux ( 5 / 15 ) de son intensité maximum. Comme chacun des 3 canons R, G ou B présente ainsi 16 possibilités d’intensité, la couleur résultante du pixel résultant du mélange des couleurs R, G et B des 3 luminophores du pixel subissant l’impact simultané des 3 faisceaux d’électrons issus des 3 canons, chacun agissant avec une certaine intensité, le nombre total de couleurs possibles vaut 16 3, soit 4096 couleurs. En tel cas de codage à 3 x 4 bits pour les R, G et B, les 256 couleurs pourront être choisies parmi 4096 couleurs. La table des couleurs contient dans ce cas 12 bits par entrée. Considérons alors la possibilité d’un choix beaucoup plus vaste (toujours pour une table à 256 entrées) : soit ainsi un codage des R, G, B dans la table à 3 x 8 bits, soit 3 octets. En ce cas, chaque octet présente 256 arrangements possibles de bits, ce qui fait que chaque canon travaillera selon 256 niveaux d’intensité et que, in fine, il existera 2563, soit 16.777.216 couleurs possibles pour les pixels et que les 256 couleurs de la table des couleurs pourront donc être choisies dans un ensemble de 16.777.216 nuances. La table des couleurs contient dans ce cas 24 bits par entrée. Il est clair que pour un logiciel DAO, l’usage d’un choix de couleurs aussi abondant n’est pas très utile : ce qui est important pour un tel système est de pouvoir distinguer des traits ou des ensembles de traits de type « vectoriel » : DesignCAD p.ex. met à disposition une palette de 64 entrées, soit 64 couleurs de dessin ,que l’utilisateur peut toutefois personnaliser à son gré parmi les 16 millions de couleurs disponibles ( s’il travaille avec une carte graphique permettant de les obtenir ) : ces 64 entrées correspondent à un codage de pixel ( pour l’adressage dans la table ) à 6 plans mémoire. Voici la Boîte de dialogue « couleurs » de DesignCAD montrant cette palette à 64 entrées : Palette de 64 couleurs à choisir par l’utilisateur parmi 16.777.216 et destinée à remplacer les couleurs standard de base Palette « Standard » de 64 couleurs En illustration de cette architecture « par palette de couleurs », revenons à présent à l’image « Yosemite.jpg » ouverte dans IrfanView. Par pointer / cliquer ( B.G.S. ) sur « Image » puis, dans le menu déroulant sur « Palette » puis, dans le sousmenu de « Palette », sur « Edit Palette », la palette des 256 nuances de gris selon laquelle est construite l’image photographique apparaît à l’écran : Un double-clic sur l’une des cases va faire apparaître une Boîte de dialogue où l’utilisateur va pouvoir changer la nuance de gris par une couleur quelconque de son choix, parmi 16.777.216 possibilités. Choisissez un gris clair ( p.ex. 11ème ligne, 7ème colonne ) et remplacez cette couleur par une composition R = 75, G = 20, B = 20, ce qui vous donnera un brun plutôt foncé : Brun foncé Nouvelles valeurs R, G, B Voyons le résultat de l’application de cette nouvelle palette : un certains nombre de pixels – ceux qui avaient primitivement la nuance du gris à laquelle on a substitué le brun – sont devenus bruns : l’adresse dans la table de couleur n’a pas changé, seul ont changé les contenus des codages R, G, B de la ligne de la table caractérisée par cette adresse. Ce changement de teinte est spécialement visible dans le ciel et son reflet dans l’eau : D’autres pixels de même gris, çà et là, sont aussi devenus bruns, comme le montre l’agrandissement de la paroi rocheuse où des points foncés sont à présent bien visibles sur la paroi claire: Contrairement au cas des dessins de type DAO « vectoriel », pour les photographies « couleurs » ou les images de synthèse en « Rendu réaliste », le nombre de couleurs réellement affichées simultanément doit impérieusement dépasser les 256 couleurs. Dans l’observation visuelle d’un tel type d’image, des dégradés de couleurs à faible gradient participent en effet très étroitement à notre perception des détails. Pour vous en convaincre, ouvrez l’image « Cabane dans un champ » fournie par « Windows » dans IrfanView : Il s’agit d’une image à 1024 x 768 pixels, en codage 3 x 8 bits, soit 24 bits ou 3 octets : la taillemémoire de la pixmap vaut donc ( 1024 x 768 x 3 ) = 2.359.296 octets, soit, en divisant par 1024 ( 1 Ko = 1024 octets ) : 2.304 Ko ou, en divisant encore par 1024 ( 1 Mo = 1024 Ko ) : 2.25 Mo. Remarquez que cette valeur correspond à ce qu’IrfanView indique à gauche dans la barre sous l’image. La question est : combien de couleurs sont-elles affichées, 256 ou beaucoup plus ? Irfanview procède à tel comptage via commande « Image / Count Colors Used » : la Boîte d’information qui apparaît sur l’écran en comptabilise 133.399 distinctes et simultanément affichées. Nous allons à présent diminuer le nombre de couleurs et le réduire à 16 couleurs ( Commande IrfanView : “Image / Decrease Color Depth” ) : si vous réalisez vous-même cet essai, vous constaterez que le piqué des détails devient nettement moins bon : sur la reproduction « papier » de ce cours, cela n’apparaîtrait toutefois pas très explicitement ; aussi nous vous proposons donc cette comparaison de qualité dans le piqué des détails sur des agrandissements d’une même zone, d’abord pour l’image à 24 bits / pixel, ensuite pour l’image à 4 bits / pixels ( cf. p. svte. ). Image à 24 bits / pixel Image à 4 bits par pixel Agrandissons un détail pour rendre le phénomène encore plus explicite : Image à 24 bits / pixel Image à 4 bits / pixel L’image transformée est donc codée en 4 bits / pixel, comme le confirme la barre d’IrfanView apparaissant sous cette nouvelle image en 16 couleurs : La taille-mémoire est simultanément passée à : ( 1024 x 768 x 8 ) / 1024 = 384 Ko ( = 384 KB = 384 « Kilo-Bytes » en U.S. ) . Que signifient ces 4 bits / pixel ? 4 n’est pas un multiple de 3 comme les 24 bits / pixels et ce nombre « 4 » ne peut donc pas représenter 3 x un certain nombre de bits codant chacune des intensités de couleurs R, V, B. Tentons une autre expérience et réduisons cette fois le nombre de couleurs de l’image originale à 256 couleurs et examinons à nouveau le renseignement fourni par IrfanView à propos du codage pour cette image transformée en 256 couleurs : A nouveau, on retrouve un codage non multiple de 3 : ici 8 bits / pixel. La différence fondamentale entre les 3 images codées à 24 bits / pixel, 4 bits / pixel et 8 bits par pixel est que, dans les 2 derniers cas, l’architecture de pixmap est de type « palette », tandis que dans le premier, il s’agit d’une organisation de pixmap où chaque pixel est codé en « Mode Couleur Direct ». Ce Mode Couleur Direct ne passe plus par la définition d’une palette mais code directement le pixel par un ensemble de 3 champs de 8 bits, un par intensité de couleur R, G ou B. Ce mode se justifie par le fait que le très grand nombre de couleurs simultanément présentes dans une image de type « photo » impliquerait la constitution d’une palette gigantesque, contrairement au cas des images à faible nombre de couleurs ( 2 à 256 ) simultanément affichées. Ceci signifie aussi que le nombre de bits / pixel annoncé pour ces divers types d’images ne recouvre pas la même signification, bien que l’on parle indifféremment pour ce nombre de bits / pixel, quelle qu’en soit la signification réelle, de « Profondeur de Couleurs » : - pour les images Noir et Blanc , 1 bit / pixel caractérise la structure en simple bitmap ; le Noir et Blanc est d’ailleurs fréquemment qualifié, au point de vue de sa « profondeur de couleurs », d’image « Bitmap » ( dans le logiciel de retouche ADOBE PHOTOSHOP, c’est ainsi que les images «Noir et Blanc sont désignées ) ; - pour les images de 16 à 256 couleurs, le nombre n de bits / pixels concerne le nombre de plans mémoire qui permettent le codage de l’adresse d’une couleur dans une palette pour chacun des pixels : pour une image à 1024 x 768 pixels p.ex., en 16 couleurs définies par une palette de 16 couleurs, il existera 4 plans de 1024 x 768 termes binaires. La palette fonctionnant sur le principe de l’adressage de chacune des couleurs, c.à.d.selon la définition d’un « Index » pour chacun des n descriptifs, on parle alors fréquemment de « Couleurs Indexées ». La palette elle-même et le nombre de bits qu’elle contient ne sont pas pris en considération pour la désignation du « nombre de bits / pixel » dans ce mode « Couleurs indexées » : dans une architecture classique d’ordinateur ( avec DAC ), cette palette est séparée de la mémoire d’image et inscrite dans un espace-mémoire ( RAMDAC ) du DAC. Selon la capacité de mémoire vive associée au DAC et en fonction des capacités de conversion Numérique / analogique de ce DAC, chacune des couleurs primaires y est codée sur p.ex. 5, 6 ou 8 bits. Par ailleurs, une procédure permet à l’utilisateur de sélectionner lui-même les couleurs de cette palette. Ce mode « Couleurs indexées » est utilisé pour du graphisme vectoriel ne nécessitant que peu de couleurs, comme en DAO / CAO (sauf en 3D avec rendus réalistes de haute qualité) ou pour de petits programmes de dessin d’illustration ( « Paint » de Windows en est un exemple ) - pour les images contenant un nombre de couleurs supérieur à 256, le nombre n de bits par pixel vaut en principe 3 x le nombre de bits de codage de chacune des couleurs, en série dans la mémoire ( « organisation en mémoire compacte » ) , ce qui évite le recours à une palette et à la méthode de l’adressage dans cette palette. Dans certains cas cependant, les 3 champs de bits ne sont pas de longueur égale et, p.ex., on peut coder une image à 65.536 couleurs sans palette ( « High-Color » ) par 5 bits pour R, 6 bits pour G et 5 bits pour B : le codage est dans ce cas à « 16 bits / pixel ». Comme les images à grand nombre de couleurs correspondent à un grand piqué des détails, comme les photographies « couleurs », il est d’usage de les appeler « images en couleurs vraies » ou « images en mode couleur direct ». Ce mode de travail, dit aussi en « True Color » exige, en architecture classique d’ordinateur, que le convertisseur numérique / analogique présente des performances suffisantes pour transmettre les données binaires alors plus abondantes ( trains de 15, 16, 18 ou 24 bits ) sans transiter par la palette. Remarquons que le codage en 32 bits n’est utile que pour certains logiciels ( type « Adobe Photoshop ») qui utilisent les 8 bits excédant les 24 bits pour des effets de transparence et d’opacité par masques appelés « Alpha-Channels ». Ainsi, si vous essayez d’éditer une palette par IrfanView pour l’image à 24 bits / pixel, en mode « couleur directe », l’opération sera impossible puisque le codage ne correspond pas au mode « palette ». Par contre, pour la même image transformée en 4 bits / pixel, en 16 couleurs, il sera tout à fait possible d’éditer la palette alors en usage, comme le montre la copie de la Boîte d’information et d’édition de palette, correspondant à ce cas : Tout ce qui vient d’être exposé peut être synthétisé par le schéma logique suivant qui met en évidence les 2 modes de transfert de l’information « Pixmap » depuis la mémoire vidéo contenant la pixmap relative à une image jusqu’à la sortie analogique vers le moniteur : MEMOIRE VIDEO MODE DIRECT NON < 256 COULEURS OUI MODE PALETTE ADRESSES POUR LA PALETTE 1 VALEUR D'INTENSITE POUR LE ROUGE SELECTION PAR PALETTE 1 VALEUR D'INTENSITE POUR LE VERT 1 VALEUR D'INTENSITE POUR LE ROUGE 1 VALEUR D'INTENSITE POUR LE VERT 1 VALEUR D'INTENSITE POUR LE BLEU 1 VALEUR D'INTENSITE POUR LE BLEU REPARTITION n bits n bits n bits CONVERTISSEUR NUMERIQUE / ANALOGIQUE POUR LE ROUGE CONVERTISSEUR NUMERIQUE / ANALOGIQUE POUR LE VERT CONVERTISSEUR NUMERIQUE / ANALOGIQUE POUR LE BLEU Signaux analogiques DAC ECRAN CRT SCHEMA LOGIQUE DES 2 MODES COULEURS 1.5. LES CARTES VIDEO Les signaux analogiques commandant le moniteur CRT pour l’affichage graphique sont générés par un ensemble de composants intégrés à la carte mère ou dans le chipset de l’ordinateur ( circuits vidéo intégrés ) ou, le plus souvent, sur une carte graphique spécialisée, dite « carte vidéo », installée dans un connecteur d’extension de la carte mère. Très globalement, cette carte reçoit des trains d’instructions digitales du processeur central, les traite localement pour organiser cycliquement ( cf. fréquence de rafraîchissement ) le remplissage structuré d’une mémoire vidéo spécialisée par le contenu digital de l’écran ( bitmap ou pixmap ) juste avant son affichage, puis convertit le contenu digital de cette mémoire en signaux analogiques et le transmet en flux cyclique continu au moniteur CRT. Le traitement local a pour objectif principal de décharger le processeur central d’un ensemble de tâches spécialisées, relatives en l’espèce aux opérations graphiques ( ce principe du « traitement local » est d’ailleurs identique pour ce qui est p.ex. des cartes « son » ), en les déportant vers une unité spécialisée de traitement, appelée « processeur vidéo ». L’architecture logique d’une carte vidéo peut ainsi être schématisée comme suit : SIGNAUX DIGITAUX CARTE VIDEO BUS AGP Bus Interne PROCESSEUR GRAPHIQUE CONNECTEUR AGP SIGNAUX ANALOGIQUES Bus Interne MEMOIRE VIDEO CONVERTISSEUR NUMERIQUE / ANALOGIQUE CONNECTEUR CRT Il est important pour vous de situer cette carte vidéo dans l’architecture logique d’un PC, tout en précisant qu’au niveau « Hardware », ces cartes se présentent vraiment sous la forme physique de cartes munies d’un connecteur à n contacts mâles( 44 contacts pour une carte AGP ) qu’il faut glisser dans un connecteur d’extension fixé à la carte mère du PC et muni des mêmes n contacts, mais femelles. Au niveau logique, un PC est constitué d’une arborescence hiérarchique de divers périphériques ( dont la carte vidéo ) qui sont tous reliés au noyau principal, le processeur central ( un Pentium d’Intel ou de type comparable d’AMD ou Cyrix ) qui exécute une grande partie des calculs et qui coordonne en grande partie le fonctionnement de l’ordinateur. Ces liens logiques entre éléments sont ce qu’on appelle les bus, qu’il faut assimiler à des conduites transférant les informations digitales d’un composant à un autre. La gestion des circuits reliant les divers composants ( processeur central, mémoire vive, mémoire cache, bus, … ) est dévolue au chipset ( p.ex. le chipset INTEL 440LX ou « AGPS » susceptible de gérer les nouveaux bus graphiques AGP – « Accelerated Graphics Port » - à très haut débit ). Voici ainsi un schéma qui synthétise l’architecture logique d’un PC multimédia « Haut de Gamme » : MEMOIRE RAM BUS SYSTEME CONTROLEUR MEMOIRE BUS CONTROLEUR PCI SYSTEME PROCESSEUR PENTIUM CHIPSET PCI / AGP ECRAN CRT PONT AGP SIGNAUX DIGITAUX SIGNAUX ANALOGIQUES CARTE VIDEO Bus Interne BUS AGP BUS PCI PROCESSEUR GRAPHIQUE Bus Interne CONVERTISSEUR NUMERIQUE / ANALOGIQUE MEMOIRE VIDEO CONNECTEUR CRT CONNECTEUR AGP SIGNAUX DIGITAUX BUS PCI BUS BUS BUS BUS PCI PCI PCI PCI CONTROLEUR USB MODEM CARTE SON CONTROLEUR CONTROLEUR IDE 1394 CONNEXIONS USB CONNEXIONS IDE CLAVIER SOURIS SCANNER TABLETTE A DIGITALISER BUS PCI CONNEXION 1394 CAMESCOPE NUMERIQUE IMPRIMANTE DISQUE DUR CD / DVD-ROM PLACE DE LA CARTE GRAPHIQUE DANS LA STRUCTURE D'UN PC MULTIMEDIA Y.DURAND 12.12.02 Un certain nombre d’explications s’imposent à propos du vocabulaire – et des concepts qui y sont associésutilisé en légendes des 2 figures précédentes ce sera l’objet des § suivants . 1.5.1. LA TRANSMISSION DES INFORMATIONS AU MONITEUR PAR LA CARTE VIDEO Jusqu’à présent, nous avons parlé d’une conversion des signaux digitaux en signaux analogiques par le circuit spécialisé, le Ramdac, figurant d’ailleurs comme 3ème composant essentiel sur le schéma de la carte vidéo. Ces signaux analogiques sont en fait des micro-tensions comprises entre 0 et 0,7 Volt appliquées aux grilles de chaque canon à électrons, permettant en principe de générer un nombre infini de couleurs selon la discrétisation adoptée entre ces 2 valeurs-limites. Les normes de couleur postérieures au standard EGA défini en 1984 par IBM pour ses PC « AT » ( résolution 640 x 350 pixels en 16 couleurs dans une palette de 64 ), c.à.d. dès que le standard VGA développé par IBM en 1987 ( 16 couleurs affichables parmi 262.144 en 640 x 480 pixels ou 256 couleurs en basse résolution 320 x 200 pixels ) ont imposé l’abandon de la technologie dite « d’entrée ( c.à.d. entrée dans le moniteur ) numérique TTL » ( Transistor Transistor Logic ) qui ne permettait pas un grand nombre de couleurs ( limitation à 64 couleurs dont 16 affichables simultanément ) au bénéfice de l’entrée dite « analogique » beaucoup plus modulable. Cette technologie analogique présente toutefois encore 2 inconvénients : d’une part, des parasites au niveau du Ramdac peuvent altérer la qualité de l’image et d’autre part, la nouvelle technologie des écrans plats, typiquement numérique puisque ce sont des centaines de milliers de transistors qui y gèrent individuellement les pixels ( LCD à matrice « active » ), impose une nouvelle conversion du signal analogique délivré par le Ramdac numérique / analogique en signaux digitaux de commande de ces transistors : tel est le cas si vous équipez un PC à écran CRT dont la carte graphique contient le Ramdac classique d’un nouveau moniteur à écran plat en technologie TFT. Ces inconvénients ont poussé les Majors de l’industrie informatique ( Intel, Compaq, Hewlett Packard, …) à développer une nouvelle technologie d’entrée dite « DVI » ( Digital Visual Interface ) qui a commencé à se commercialiser en 1998. Cette technologie DVI s’impose actuellement pour tous les nouveaux moniteurs qui cependant, gardent en général pour la plupart la possibilité d’être branchés aussi sur les cartes classiques à Ramdac de PC plus anciens, proposant ainsi ( voyez les publicités des nouveaux écrans plats ) ce qui est couramment appelé « l’affichage multistandard ( vidéo, VGA, DVI ) » qui permet donc leur connexion à la fois sur les cartes classiques à Ramdac ( VGA ), sur les nouvelles cartes au standard DVI et sur les sorties proprement « vidéo » ( séquences animées ). IBM vient ainsi de présenter, fin 2002, un écran plat TFT exceptionnel ( le « T221 » - prix en 2002 de l’ordre de 14.000 Euros ) de 22.2’’ de diagonale (vraie ) à définition 3840 x 2400 pixels en technologie DVI : cet écran est couplé avec une carte MATROX G200 quadri-processeurs, le principe général étant que chaque processeur gère l’affichage d’un quart d’écran . D’autres fabricants japonais d’écrans ont adopté cette technologie IBM : IIYAMA, TOKOTU et VIEWSONIC. Cette entrée DVI exploite la technologie TMDS ( Transition Minimized Differential Signal ) qui se base sur un algorithme de codage ayant pour objectif de minimiser les transmissions de signaux sur le câble reliant le moniteur au PC, ce qui limite les interférences et améliore la qualité de transmission ( Bande passante de 1,65 Giga-Byte / seconde par lien TMDS entre DSP émetteurs et récepteurs) Le processeur graphique et la mémoire vidéo transmettent les trains de 24 bits de la pixmap ainsi que des trains de paquets de 6 bits de contrôle et des signaux de synchronisation à un Transmetteur composé de 3 processeurs DSP ( Digital Signal Processor ) qui les code selon l’algorithme TMDS, chacun pour l’une des couleurs R, G, B. et les transmet par 3 groupes de 10 bits ( 8 bits de codage de couleur et 2 bits de contrôle ) à un décodeur-récepteur situé dans le moniteur et composé de 3 processeurs DSP qui pilotent le champ des transistors « écran » régulant la couleur des pixels. 1.5.2. LA MEMOIRE DE LA CARTE VIDEO Il est clair que le rôle de cette mémoire vidéo est d’abord de stocker, juste avant l’affichage ( dans des laps de temps très courts cependant, compte tenu du contexte de rafraîchissement ) les informations digitales relatives à la pixmap. Dès lors, comme la taille de la pixmap est directement fonction de la résolution maximum affichable et de la profondeur de couleur, la taille de la mémoire vidéo qui doit être susceptible d’emmagasiner cette pixmap sera aussi directement fonction de cette résolution et de la profondeur de couleurs. Voyons quelques valeurs significatives : Taille des pixmaps en fonction de la résolution et de la profondeur de couleurs Résolution 800 x 600 1024 x 768 1280 x 1024 1600 x 1200 1920 x 1440 2048 x 1536 Profondeur de couleur ( Nombre de couleurs simultanément affichables ) 16 256 65.536 16.777.216 (+ alpha ch.) 4 bits/pixel 8 bits/pixel 16 bits/pixel 24 bits/pixel 32 bits/pixel 0.23 Mo 0.37 Mo 0.63 Mo 0.92 Mo 1.32 Mo 1.50 Mo 0.46 Mo 0.75 Mo 1.25 Mo 1.83 Mo 2.64 Mo 3.00 Mo 0.92 Mo 1.50 Mo 2.50 Mo 3.66 Mo 5.27 Mo 6.00 Mo 1.37 Mo 2.25 Mo 3.75 Mo 5.49 Mo 7.91 Mo 9.00 Mo 1.84 Mo 3.00 Mo 5.00 Mo 7.32 Mo 10.54 Mo 12.00 Mo Ces valeurs ne sont pas directement celles commercialisées pour les cartes Vidéo dont la gamme travaille avec des paliers multiples de 2 Mo : les valeurs les plus courantes sont 2, 4, 6, 8, 12, 16, 32, 64 et 128 Mo. Certaines cartes de haut de gamme ( ATI Radéon 9500 et 9700 p.ex. ) proposent même, fin 2002, une mémoire vidéo allant jusqu’à 256 Mo maximum.Fin 2206, des cartes Vidéo à 512 Mo commencent même à équiper les stations de travail portables ( ex. le HP Compacq 9440 à carte graphique NVIDIA Quadro FX 1500M ). Cette comparaison des volumes de mémoire strictement nécessaires en fonction des résolutions et des profondeurs de couleurs et des volumes de mémoire des cartes actuellement commercialisées semble vraiment mettre en évidence une disproportion notable : alors, cette apparente disproportion ne serait-elle qu’un « argument commercial de vente » ou, au contraire, répond-elle à un réel besoin d’ordre technique ? La réponse est à trouver dans l’évolution exponentielle des techniques de visualisation 3D et notamment dans toutes les techniques de Rendu réaliste de scènes spatiales 3D par mise en œuvre de procédures de constructions par nurbs et de rendus réalistes par illumination, ombrage, spécularité, texturage,… qui sont intensivement utilisées dans les progiciels spécialisés de construction et d’animation de scènes réalistes 3D comme Bryce, 3Dmax, Electricimage, Lightscape, Lightwave, Maya, Mental Ray, Photorealistic RenderMan, Rhino, SolidThinking, Strata 3D, TrueSpace, … utilisés par les Infographistes des studios de création cinématographique, publicitaire, … et par les bureaux d’études DAO/ CAO /CFAO qui souhaitent visualiser les produits qu’ils créent ( cf. les spots publicitaires en images de synthèse des Citroën ou des Renault ). Ainsi, le progiciel Photorealistic RenderMan de Pixar a été utilisé pour les effets spéciaux de Toy Story et de Jurassic Park ; Electricimage a été utilisé pour les effets spéciaux de La Guerre des Etoiles et de Terminator 2 ; SolidThinking est spécialement intéressant pour la CFAO ( Conception et Fabrication Assistées par Ordinateur ) parce que, au-delà de ses grandes qualités de Modeleur Nurbs, il dispose d’outils de modélisation polygonale, d’outils de subdivision de surfaces, d’un historique de construction et d’outils analytiques très utiles dans le domaine du Design Industriel et de la CFAO. A titre d’exemples de rendu réaliste, voici 2 scènes 3D créées par DesignCAD qui, sans développer des performances dans le rendu 3D comparables à celles des progiciels précités, permet néanmoins d’obtenir déjà de fort bons résultats en ce domaine ( il est d’ailleurs possible d’importer les dessins DesignCAD dans ces logiciels spécialisés pour leur appliquer leurs techniques « pointues » de rendu ). Les 2 premières images correspondent à une scène formée de 3 solides éclairés d’abord par une seule source de lumière ( 1ère image ), ensuite par 3 sources lumineuses ( 2ème image ), le rendu étant de type « Gouraud » : Les 2 images suivantes, créées par DesignCad encore, montrent le résultat de l’application d’une texture sur la tuyauterie avant : Pour bien comprendre en quoi la création d’images réalistes en 3D réclame des volumes énormes de calcul, prenons le cas tout simple de la construction d’une sphère 3D : cette sphère est d’abord créée en « fil de fer », c.à.d. que sa surface est discrétisée en n polygones qui forment une maquette-support sur laquelle on « tend » ensuite une « peau » opaque qui peut d’ailleurs être une texture prédéfinie. La qualité du rendu sera tributaire de la finesse de discrétisation comme le montre l’exemple de 4 sphères dessinées avec 124 ( 1 ) , 576 ( 2 ) , 1296 ( 3 ) et 14.400 ( 4 ) facettes : 1 2 3 4 auxquelles on va appliquer ensuite un ombrage « Gouraud » à 4 sources de lumière, comme le montre la figure de la page suivante : vous y constaterez les différences de qualité dans le rendu, le meilleur étant bien entendu celui obtenu avec la discrétisation maximum. En fait, les textures constituent elles-mêmes des images qui doivent être stockées dans la mémoire vidéo si l’on veut qu’elles soient rapidement accessibles pour le processeur graphique de la carte vidéo dans le cas surtout des jeux vidéos où les images se succèdent très rapidement sous la forme d’un dessin animé dont les séquences sont à calculer au fur et à mesure et en fonction des réactions interactives du joueur via joystick ou autres « manettes » de pilotage. Pour vous montrer ce que sont ces fichiers de textures et en particulier qu’ils sont toujours contenus quelque part en mémoire- et pas nécessairement d’ailleurs dans la mémoire vidéo -considérons le cas de DesignCAD dont l’objectif N° 1 n’est pas de réaliser de rapides séquences animées bien qu’il puisse néanmoins le faire : pour DesignCAD, le fichier de texture sera recherché dans la mémoire principale RAM en précisant le chemin de recherche. Supposons p.ex. qu’au cours d’une session de travail « DesignCAD », on ouvre simultanément le programme windows « Paint » pour y définir une image .BMP, par exemple le mot « TEXTE » sur un rectangle blanc de fond . Cette image sera enregistrée en mémoire principale RAM via commande « Fichier / Enregistrer sous… » selon un fichier appelé « Texte.bmp » dans le répertoire « C : \ Mes documents \ Mes images », tout à fait indépendamment du répertoire « C : \ Program Files \ DesignCAD 3000 ». Lors de l’appel par DesignCAD de la procédure « appliquer texture » en vue de faire appliquer à une sphère « fil de fer » préalablement dessinée dans DesignCAD la texture définie par le fichier créé sous « Paint » ( comme si on tendait sur la structure fil de fer de la sphère une toile où l’image créée sous « Paint » est reproduite, une Boîte de dialogue va apparaître dans DesignCAD où il sera demandé de préciser le chemin du fichier dans le répertoire : Voici l’image correspondante créée sous « Paint » : Et voici le résultat de l’application de cette texture dans DesignCAD : En jouant sur le paramètre « échelle », cette texture peut d’ailleurs être modulée au gré de l’utilisateur : Des photographies digitalisées peuvent ainsi être utilisées pour la texture , p.ex. celle fournie en standard par Windows dans le répertoire « C : \ Mes images » sous le nom de fichier « Athlète.jpg » , c.à.d. la photo suivante : Et voici le résultat de l’application de cette « texture » à la sphère sous DesignCAD : Ces textures permettent de faire apparaître des effets de matière pour l’objet en 3D, p.ex. donner à l’observateur l’illusion que la sphère a été usinée dans du bois, auquel cas il faut aller rechercher dans les fichiers préétablis par DesignCAD une photo de bois d’ébénisterie, ou prendre soi-même une photo numérique d’une planche de bois et utiliser ce fichier pour le texturage. Voici un texturage « Bois » pour notre sphère « fil de fer » créée sous DesignCAD : Cette recherche du réalisme peut aussi conduire à vouloir donner des effets de flou ( effets de brouillard ) qui imposent alors de travailler en « couleurs 32 bits » pour bénéficier des 8 derniers bits de « canal alpha », d’ou la nécessité d’un accroissement de mémoire. De plus, des techniques particulières de stockage en mémoire vidéo ont été développées pour accélérer les processus d’affichage en Rendu réaliste 3D, comme le double ou le triple Buffering ( mémoires-tampons équivalentes en occupations-mémoire à la mémoire de trame proprement dite et stockant 1 ou 2 images en préparation en plus de l’image correspondant à la mémoire de trame, celle-ci prête à être envoyée à l’affichage-écran) ou le Z-Buffering ( maintien dans une partie séparée de la mémoire d’un enregistrement de toutes les coordonnées « z », permettant de savoir si un point se trouve devant ou derrière un autre élément, ce qui en évite possiblement l’affichage si le point est « derrière » un autre élément d’avant-plan ). Il devient ainsi évident que la mémoire vidéo devient de plus en plus un composant essentiel de la logistique d’une carte vidéo qui assure, de façon décentralisée, via le coprocesseur graphique, une très grande part des calculs et de la gestion des images au lieu de confier cette tâche, comme c’était le cas au tout début de l’informatique graphique, au processeur central et à sa mémoire propre : il est clair alors qu’outre la « mémoire d’image » proprement dite, dédicacée à l’affichage, les opérations de calcul conduites par le processeur graphique feront appel à une mémoire dynamique la plus « physiquement » proche possible, c.à.d. installée sur la carte vidéo plutôt que décentralisée sur la carte mère, dont le rôle est tout à fait analogue vis à vis du processeur graphique à celui de la mémoire RAM classique enfichée sur la carte-mère et qui échange en permanence des données avec le processeur central Pentium Autrement dit, la mémoire « vidéo » est en fait divisée, d’un point de vue logique, en 2 zones principales, l’une dédicacée à l’affichage proprement dit, l’autre à la gestion des calculs graphiques locaux, 2 zones auxquelles il faut d’ailleurs aussi ajouter une zone de stockage des fichiers de textures et des zones de mémoires-tampons. Autrement dit encore, les cartes graphiques actuelles doivent être considérées comme une petite unité centrale ( à processeur et mémoire ) adjointe à l’unité centrale ( à processeur et mémoire ). Ce qui vient d’être expliqué motive le fait qu’il n’existe en fait aucune disproportion dans l’actuelle course au volume de la mémoire vidéo qui ne peut absolument plus être considérée, comme c’était le cas à l’aube de l’infographie, comme une simple mémoire-tampon d’affichage de trames entièrement calculées par le duo ( processeur central-mémoire centrale RAM ) et qu’ainsi, les volumes de mémoire vidéo, loin de n’être qu’un simple argument de vente, répondent au contraire à des objectifs précis dans le domaine de l’infographie du rendu réaliste de scènes 3D en affichage rapide. Corrélativement à ce concept de volume ( ou « capacité » ) nécessaire de mémoire qui devient à présent mieux compréhensible, le concept intuitif de vitesse de la mémoire vidéo est, à l’évidence, d’une importance au moins égale dès lors qu’il s’agit d’images animées en rendu réaliste. Même d’ailleurs pour les applications en principe moins gourmandes en ressources que les jeux vidéo interactifs comme la DAO / CAO ( encore qu’en CAO, il puisse être très utile d’animer les images pour se rendre compte, p.ex., de la façon dont fonctionne un mécanisme-prototype ) , le contexte de vitesse n’est pas à négliger, même s’il ne s’agit que de faire apparaître à l’écran un rendu réaliste hors tout contexte d’animation en temps réel : le temps de calcul peut devenir difficilement acceptable et ralentir le travail de l’utilisateur si les scènes 3D sont complexes et si la carte graphique n’est pas très performante. Pour rédiger ce cours, j’utilise un portable TOSHIBA Satellite 2800-600 à Pentium III 1 GHz que j’ai d’ailleurs acheté tout spécialement dans cet objectif en 2001 : à cette époque, une carte graphique de 16 Mo, surtout pour un portable, était du « haut de gamme ». Celle qui équipe ce TOSHIBA est une carte réputée, une NVIDIA GeForce2Go ainsi équipée de 16 Mo de mémoire. L’affichage du rendu d’un objet 3D ( ici un petit engin chenillé dont le dessin a été établi par les concepteurs de DesignCAD, relativement complexe en ce sens que le nombre de facettes utilisées pour ce calcul du rendu est assez élevé comme le montrera le détail de l’objet en « fil de fer » ci-après ) va consommer, sur mon portable, un temps non négligeable, soit expérimentalement de l’ordre de 15 secondes, mais ma carte graphique est loin d’atteindre les performances des cartes actuellement disponibles sur stations fixes : il faut compter par rapport aux meilleures actuelles sur stations fixes un rapport des débits de mémoire de l’ordre de 1 à 20 au moins. Il est probable par ailleurs que par un upgrade de la quantité de RAM pour la faire passer des 256 Mo actuels à 512 Mo, un gain sensible de vitesse serait obtenu. A noter que pour les jeux Vidéo fonctionnant en « temps réel », c.à.d. à grande cadence d’affichage ( idéalement à plus de 40 fps ) l’astuce permettant de réduire drastiquement le temps de calcul et d’affichage consiste à n’utiliser qu’un nombre très réduit de polygones et d’y plaquer des textures. Voici, sous DesignCAD, le résultat du rendu en image réaliste calculé sur la base du grand nombre de facettes défini par le dessin filaire de base: La « vitesse » de la mémoire est donc très certainement un paramètre essentiel pour ces cartes graphiques. Mais à quoi correspond ce critère intuitif de « vitesse » ? Le temps nécessaire pour accéder en mémoire à l’information fait en réalité référence au temps mis pour faire transiter un paquet de données ( 8 bits p.ex. ) de la mémoire au processeur en passant par le bus qui les relie. Elle se mesure en nano-secondes ( milliardièmes de seconde ) et se désigne généralement par le terme « vitesse de mémoire ». P.ex., un bus cadencé à 100 MHz ( = 108 MHz ) est susceptible de transmettre un paquet d’informations toutes les 10-8 seconde ( cadence d’horloge ), soit toutes les 10 nano-secondes : une mémoire cadencée à 10 nano-secondes pourra donc fournir les informations au bus selon la même fréquence et sera donc correctement adaptée. Une autre caractéristique, décrivant de façon quasi équivalente la « vitesse de la mémoire » et qui tend à remplacer de plus en plus le critère « temps d’accès », est la « Bande Passante » ( BP ) qui correspond au produit de la largeur du bus-mémoire par la fréquence : p.ex., pour un bus mémoire de 64 bits et une mémoire SDR travaillant en fréquence 250 MHz , la bande passante sera de 16 x 109 bits / s , soit ( 16 x 109 ) / 8 = 2 x 109 octets / s = 1.86 Go / s ( Giga-octets par seconde ). Voici un petit tableau récapitulatif de quelques cartes vidéo couramment implantées en 2002 dans les PC multimédia à hautes performances graphiques : Série ATI RADEON « 8500 » : 64 ou 128 Mo, bus 1 x 128 bits, type DDR, BP = 8.0 à 8.8 Go/s « 9500 » : 128 ou 256 Mo, bus 1 x 256 bits, type DDR, BP= 19.2 Go/s MATROX PARHELLA : 128 Mo, bus 1 x 256 bits, type DDR, BP = 17.6 Go/s Série NVIDIA GeFORCE4 « TI 4200 » : 128 Mo, bus 4 x 32 bits, type DDR, BP = 7.1 Go/s « TI 4600 » : 128 Mo, bus 4 x 32 bits, type DDR, BP = 10.4 Go/s Le petit tableau ci-dessus fait aussi apparaître une appellation « DDR » qui concerne la mémoire : il faut d’abord savoir que le type général de mémoire vidéo est typiquement une « RAM » (Random Access Memory ) ce qui signifie qu’il est possible d’accéder à n’importe quel emplacement de la mémoire sans suivre un ordre particulier, simplement grâce aux adresses des mots ( groupes d’octets ) en mémoire ; ces mémoires peuvent indifféremment être lues ou écrites. Il existe un assez grand nombre de types particuliers de mémoire ( SRAM, DRAM, SDRAM, RDRAM, DDR SDRAM, DRDRAM,… ) qui diffèrent par leur technologie, l’évolution visant à leur conférer les plus grandes Bandes Passantes possibles. Il n’entre pas dans le cadre de ce cours de les étudier davantage. De toutes façons, la meilleure façon d’évaluer les performances réelles d’un système reste d’utiliser des programmes spécifiques de test , dits « Benchmarks » qui vous renseigneront en particulier sur les performances réelles de votre carte Vidéo ( notamment en « Nombre de triangles tracés par seconde » ou en « nombre d’affichages de trames / seconde » ). Voici 2 sites Internet où vous pourrez trouver ce type de test : Benchmarks Winstone de Ziff-Davis Benchmark Operations Benchmarks 3Dmark2001 de MadOnion : : www.zdbbop.com www. madonion.com Disons seulement que, fin 2002, les cartes vidéo utilisent le plus souvent de la mémoire des types suivants : - SDRAM ( Synchronous Dynamic Random Access Memory ) , c.à.d. un type de mémoirebasé sur le principe de l’échange synchrone de données avec le processeur, évitant ainsi des états d’attente ( temps d’accès de l’ordre de 10 nano-seconde ) ; RDRAM ( relativement peu répandues ) développées par la Sté RAMBUS, rapides mais nécessitant des contrôleurs mémoire spécifiques permettant d’utiliser plusieurs canaux en parallèle : ces mémoires sont plus rapides que les SDRAM classiques ( BP de 3.2 à 6.4 Go/s ) ; DDR ( Double Data Rate ), variante de la SDRAM, doublant le traitement ( 2 blocs par cycle d’horloge plutôt qu’un ) : les cartes les plus rapides les utilisent sous l’appellation DDR-SDRAM ou SDRAM II. 1.5.3. LE PROCESSEUR GRAPHIQUE DE LA CARTE VIDEO Au tout début de l’informatique graphique, les programmes d’applications graphiques n’étaient pas interactifs mais procédaient par l’exécution d’un programme écrit par l’utilisateur lui-même : o soit – mais c’était la préhistoire du PC où l’on utilisait p.ex. en 1973 un minuscule TRS80 de RADIO SHACK – en programmant l’affichage des pixels, leur répartition étant calculée un pixel à la fois via programme écrit par l’utilisateur en Basic ou Assembleur, traduisant un algorithme de tracé pixel par pixel approchant p.ex. la forme d’un cercle, la seule routine « bibliothèque » alors préprogrammée étant la transformation de l’affichage calculé en X,Y mathématiques vers l’affichage « Hardware » sur l’écran ; o soit – et cela a été l’étape suivante – en faisant appel à une bibliothèque graphique où les algorithmes de tracés de primitives p.ex. ( cercles, polygones, … ) se trouvaient déjà préprogrammées, comme d’ailleurs les instructions de tracé « hardware », sous la forme de routines appelables au sein d’un programme écrit dans un langage « de haut niveau » comme le Fortran ( un peu comparable au C ou au C++ que vous utilisez aujourd’hui ),ce programme et ces routines générant alors la bitmap. L’intégralité des calculs puis la mise en mémoire de la bitmap s’opéraient alors exclusivement dans l’unité centrale et dans la mémoire centrale RAM dont une partie était dédicacée à la mémoire d’image selon le schéma logique général suivant : UNITE CENTRALE Périphérique ( CPU ) ( Clavier, imprimante, ... ) Bus Système MEMOIRE SYSTEME MEMOIRE IMAGE RAM CONTROLEUR VIDEO Signaux analogiques MONITEUR Ce schéma logique associé à tel contrôleur vidéo élémentaire des premiers PC graphiques est détaillé davantage en page suivante pour mettre en évidence les fonctions exactes assurées par le contrôleur vidéo d’alors ( ce schéma concerne un moniteur monochrome ). UNITE Périphériques CENTRALE Bus Système Valeurs lues Adr. 01001101 Adresse X,Y successifs MEMOIRE SYSTEME IMAGE dans la mémoire de 8 bits pour 8 pixels MEMOIRE Adresse sur Ecran Convertisseur Générateur de Numérique / Analogique balayage d'écran RAM Signaux analogiques Signaux analogiques sur les dispositifs On / Off déviateurs du de tension de grille pour 8 pixels successivement balayés faisceau d'électrons du moniteur pour atteindre la position X,Y Y Groupe des 8 Pixels codés 01001101 ECRAN X SCHEMA LOGIQUE D'UNE CARTE VIDEO ELEMENTAIRE DES 1ers PC GRAPHIQUES Y.DURAND 18.12.02 L’inconvénient majeur d’un tel système élémentaire réside dans le fait que quand la résolution et la vitesse de rafraîchissement augmentent, le nombre d'accès à la mémoire RAM effectués par le contrôleur vidéo s’accroît en proportion et diminue donc corrélativement le nombre de cycles d’accès possibles à cette mémoire RAM par le microprocesseur central. De tels systèmes ne pouvaient donc plus assurer des temps de réponse suffisamment réduits dès lors que les développements du graphisme interactif 2D d’abord ( du type interface graphique de Windows où l’utilisateur pointe et clique avec la souris sur des icônes de menu et attend une réaction quasi instantanée du système ou du type « Dessin Assisté par Ordinateur 2D ou même 3D filaire » fonctionnant selon les mêmes principes ) puis surtout ensuite interactif avec images animées en Rendu Réaliste 3D nécessitant à la fois des puissances de calcul énormes et des temps de calculs extrêmement réduits ( de type simulateurs, jeux vidéo, imagerie médicale,… ) ont répondu à une demande croissante de plus en plus exigeante du marché de l’image. L’industrie « Hardware » a donc répondu à cette attente en mettant au point des cartes graphiques dont le rôle principal est de dérouter une grande partie des calculs et de la gestion des images vers un traitement local effectué par des circuits spécialisés - assez analogues dans leur technologie et dans leur mode de fonctionnement à ceux du microprocesseur central – appelés « processeurs graphiques » ou « accélérateurs graphiques ». Ce concept a été l’innovation qui a marqué le plus l’évolution des cartes graphiques depuis les toutes premières dans les années 1980 jusqu’aux plus récentes. Il est d’ailleurs à prévoir, de notre avis, que, dans un futur proche et compte tenu des constants progrès d’intégration ( LSI = « Large Scale Integration » ) des circuits sur les puces, les fonctions déportées aujourd’hui sur des processeurs graphiques spécialisés se retrouveront sans doute, un jour proche, directement câblées dans le processeur central, sur la carte mère ou dans le chipset, comme c’est déjà le cas pour des circuits « son »: il est significatif de constater, à cet égard, que l’excellent assembleur US DELL COMPUTER propose déjà, dans une offre de machines « standards » du mois de novembre 2002 parue dans les publicités de la plupart des magasines de micro-informatiques français, une machine « départ de gamme » à 599 € H.T., le Dell Dimension 2300, une mémoire vidéo dynamique AGP intégrée, alors que toutes les autres machines de la même série « Dimension », dont les prix s’étagent entre l’ordre de 900 € H.T. et 2700 € H.T. ( puissant PC Multimédia à PIV de 2.8 GHz, 512 Ko mémoire cache de sd niveau, 512 Mo RDRAM, disque dur 120 Go, carte Vidéo 128 Mo ATI Radeon 9700 Pro, CRT 19’’, carte son, modem, … ), c.à.d. des machines davantage orientées vers les applications professionnelles plus exigeantes, maintiennent l’exigence – aujourd’hui encore incontournable pour l’imagerie animée 3D en rendu réaliste – d’une carte Vidéo séparée à mémoire propre VRAM ( Video Ram ) : Dell installe aujourd’hui sur touts ses machines de la série « Dimension » , sauf le bas de gamme et le tout haut de gamme ( cf. descriptif c-dessus ) , des cartes Vidéo à processeur Nvidia GeForce 4MX et à mémoire Vidéo 64 Mo branchées sur bus AGP4X. L’utilisation des bus ultra-rapides AGP ( 2X à 512 Mo/s, puis 4X et 8X doublant puis quadruplant la Bande Passante par rapport à l’AGP2X ) liant directement la plupart des cartes graphiques les plus actuelles ( vérifier si la carte-mère comporte un bus AGP et si la carte graphique est enfichable sur connecteur AGP : la carte Hercules 3D Prophet 4000 XT ne peut p.ex. qu’être connectée à un bus PCI, toutes les autres citées plus loin dans ce § disposant d’une connexion AGP ) au processeur central et à la RAM principale non vidéo au travers du chipset donne en effet déjà aujourd’hui la possibilité de manipuler et placer des images « lourdes » 3D dans la mémoire RAM non vidéo en reportant donc une partie des opérations graphiques vers l’Unité Centrale et sa mémoire centrale malgré la présence de puissantes cartes graphiques, conformément déjà à cette tendance d’avenir. Il faut d’ailleurs noter que ce bus AGP ( Accelerated Graphics Port ) a été défini en 1996 à l’initiative d’Intel et Microsoft notamment pour résoudre le problème du branchement classique d’alors de la carte Vidéo sur bus PCI qui posait des problèmes de Bande Passante vite saturables, comme en avaient posés les premiers contrôleurs vidéo décrits en début de §, à une toute autre échelle toutefois bien entendu. Ce problème du branchement sur bus PCI se posait en les termes suivants : en fait, « PCI » signifie : « Peripheral Component Interconnect », c.à.d. qu’il s’agit d’un bus servant à assurer la liaison de l’unité centrale ( Pentium et RAM ) via chipset avec la plupart des périphériques ( souris, clavier,… ) dont éventuellement la carte vidéo. Par suite, ce bus est essentiellement un bus partagé : le schéma logique d’un PC Multimédia « haut de gamme » exposé précédemment montre d’ailleurs que le PCI reste néanmoins toujours d’actualité, mais seulement pour le branchement de périphériques moins gourmands en Bande Passante que la carte vidéo. Donc, malgré une bande passante relativement importante ( bus de largeur 32 bits, soit 4 octets à 33MHz ) de 132 Mops, ce bus partagé PCI pouvait constituer une source de ralentissement lors de l’utilisation effective de la carte vidéo, très consommatrice de Bande Passante dès lors que les images sont animées en temps réel et font appel aux techniques de rendu réaliste avec textures multiples comme dans les jeux vidéo. Supposons p.ex. un dessin animé à 16 millions de couleurs en résolution 1024 x 768, soit un équivalent de 2.3 Mo par frame et avec un affichage requis de 25 fps ( Frames / s ), c.à.d. en mode « cinéma » ( 25 images / seconde ) . La Bande Passante requise vaut, en ce cas, 60 Mops. Pour autant que d’autres périphériques branchés sur le bus PCI utilisent aussi simultanément de la bande passante, ce bus PCI est rapidement saturé, ce qui provoque d’importants ralentissements. Compte tenu d’ailleurs du nombre de plus en plus important des périphériques que les utilisateurs souhaitent brancher sur leurs PC, via notamment contrôleurs USBI ou USBII et FireWire ( IEEE 1394 ), les nouvelles versions des spécifications PCI ( PCI 2.0 ) demandent des bus PCI à plus large Bande Passante de 528 Mops ( 8 octets- soit les 64 bits pour exploiter les Pentiums - à 66 MHz ). Pour résoudre ce problème d’étranglement, le bus AGP a donc été développé au titre de bus exclusivement dédié à la connexion entre l’Unité Centrale et la carte Vidéo, sans qu’aucun autre périphérique soit encore autorisé à y être branché ( cf. le schéma logique de l’architecture d’un PC Multimédia pourvu d’un bus AGP présenté quelques pages avant celle-ci ). Ce bus doit être susceptible de taux de transferts importants : l’AGP1X travaille ainsi en 264 Mo/s , l’AGP2X en 528 Mo/s, l’AGP4X en 1056 Mo/s et l’AGP8X en 2 Go/s. Ce caractère de bus « exclusif » à grande Bande Passante ainsi que sa proximité avec la RAM classique ( cf. le schéma logique général d’un PC quelques pages auparavant ) ont permis à ses concepteurs d’imaginer pouvoir faire bénéficier la carte vidéo d’un accès direct à des blocs de la mémoire centrale RAM, blocs où sont notamment stockables un grand nombre de fichiers pour les nombreuses textures intensivement utilisées dans les rendus réalistes, plutôt que de les stocker dans les mémoires vidéo relativement limitées en capacité ( au regard de la mémoire RAM : actuellement, 128 Mo de mémoire Vidéo au maximum sur la grande majorité des cartes graphiques de hautes performances contre 512 Mo à 1Go, voire même 2Go de RAM ) et de prix sensiblement plus élevé que les RAM d’unités centrales. Actuellement, le choix d’une carte possédant un processeur graphique dédicacé et une importante mémoire vidéo locale, tout en étant à connexion AGP reste donc le meilleur choix pour assurer de grandes vitesses de traitement d’images 3D complexes : les prix de telles cartes, fin 2002, sont compris dans une fourchette de l’ordre de 100 € à 500 € ( le tout Haut de Gamme , ATI Radeon 9700 Pro, compatible AGP8X et DirectX 9 , cf. pour la signification de « DirectX 9 » le § suivant ). Les processeurs graphiques sont des circuits spécialement conçus et câblés pour exécuter un ensemble d’opérations arithmétiques, logiques et de transferts spécifiques au tracé graphique, p.ex. le « calcul » de la meilleure répartition des pixels pour approcher un segment défini par les coordonnées de ses 2 points d’extrémités selon un algorithme bien défini ou assumant les fonctionnalités de calcul 3D en rendu réaliste de « T&L », c.à.d. « Transform and Lightning », c.à.d. encore les tâches de conversion d’une scène 3D du « World Space » en une image 2D affichable sur écran ( « Screen Space » ) d’une part et d’éclairement de l’objet 3D par plusieurs sources lumineuses d’autre part : nous reviendrons sur tout cela en l’expliquant davantage dans le § 1.5.4. suivant. Il est d’ailleurs intéressant de vous informer, à propos de ces câblages spécialisés, que dans les PC de premières générations, le même problème se posait pour les calculs arithmétiques en virgule flottante, les processeurs de l’époque ( < 1989 ) jusqu’à l’Intel 80386 ne pouvant travailler sur de tels nombre et devant, en l’absence de coprocesseur mathématique spécialisé, péniblement et longuement simuler leur calcul par des calculs sur entiers : là aussi, un coprocesseur spécialisé, dit alors « mathématique » ou « arithmétique », lui aussi spécialement câblé en vue de l’exécution des algorithmes de calculs arithmétiques en virgule flottante, était à installer « à côté » du microprocesseur central comme c’est le cas aujourd’hui pour les coprocesseurs graphiques . Ce « coprocesseur mathématique »( Floating Processor Unit ) a été intégré pour la 1ère fois dans la famille des processeurs Intel sur le 80486DX commercialisé en 1989 et est depuis lors câblé d’office sur les puces ultérieures de type Pentium ( commercialisées depuis 1993 ) sans qu’il soit donc encore nécessaire de l’acheter et l’installer séparément. Des constructeurs spécialisés fabriquent ces processeurs graphiques ; on peut citer p.ex., parmi les processeurs graphiques les plus répandus ( fin 2002 ) : o o o o la série RADEON ( 7500, 8500, 9000, 9500, 9700 ) – Constructeur : ATI la série NVIDIA GeForce2 (MX 200, 400, Pro, Ultra ), GeForce3 ( -, TI200, TI500 ), Geforce4 ( MX440 et 460, Ti 4200, 4400 et 4600 ) – Constructeur : NVidia la série PowerVR Kyro I et II – Constructeur : STMicroelectronics … Il faut d’ailleurs distinguer l’appellation du processeur graphique proprement dit de celle de la carte ellemême, celle-ci en général assemblée par d’autres constructeurs en utilisant l’un des processeurs graphiques précités. Par exemple, les cartes « 3D Blaster » sont construites par la Sté CREATIVE LABS en utilisant les processeurs graphiques de chez NVIDIA ( ex. : la 3D Blaster Titanium 4600 comporte un processeur graphique NVIDIA GeForce TI 4600 ), les cartes « 3D Prophet » sont construites par la Sté HERCULES en utilisant soit les processeurs graphiques de ATI ( ex. : la 3D Prophet FDX 8500LE comporte un processeur graphique ATI Radeon 8500 ), soit les processeurs graphiques de la Sté STMicoelectronics ( ex. : la 3D Prophet 4500XT comporte un processeur graphique STMicoelectronics PowerVR Kyro II ) ... Comme le processeur central Pentium, AMD,… les coprocesseurs graphiques peuvent être caractérisés, entre autres, par le nombre de transistors intégrés dans la puce : par comparaison, un Intel Pentium IV comporte 42 millions de transistors en version cache L2 de 256 Ko et 55 millions de transistors en version cache L2 de 512 Ko : les processeurs graphiques cités ci-dessus comportent de l’ordre de 25 à 110 millions de transistors ( 25 millions pour le GeForce2 MX400 … jusqu’à 107 millions pour le Radeon 9700 Pro ) : comme pour les microprocesseurs, un ventilateur de refroidissement est d’ailleurs à installer sur le coprocesseur graphique. A ce propos et en rapport direct avec les applications DAO , il faut savoir que ces circuits microscopiques sont d’abord dessinés à très grande échelle ( 500 x ) grâce à un progiciel ( spécialisé ) de Conception Assistée par Ordinateur fonctionnant selon des principes équivalents au progiciel DAO que vous utiliserez au laboratoire : DesignCAD . La différence est que ce dernier est de type « Dessin Assisté Généraliste » et ne comporte donc pas de couches logicielles d’aides à la conception proprement dite spécifiquement dédicacées à l’élaboration de circuits intégrés ; précisons cependant qu’au prix d’un effort préalable de programmation de « macros », DesignCAD pourrait être converti en un logiciel spécialisé de DAO et même, dans une certaine mesure, de CAO, pour n’importe quel type d’application spécialisée. Ce dessin à grande échelle, appelé « masque » est ensuite utilisé pour guider ( par ordinateur ) un faisceau lumineux qui va impressionner une plaque photo appelée « réticule » reproduisant, à échelle 20 x plus petite, le dessin précité. Après contrôle, ce réticule est ensuite réduit et reporté à la taille réelle microscopique du circuit par un procédé photographique appelé photolythographie sur une fine tranche de silicium.Par divers procédés chimiques et optiques, l’information graphique contenue dans ces masques ( +/- 20 pour un Pentium ) est enfin transformée en micro-circuits « hardware » résidents sur la puce. Ce qui caractérise aussi un processeur graphique, comme d’ailleurs un microprocesseur de type Pentium p.ex., est sa fréquence d’horloge. Ainsi, tous le processeurs graphiques de la série ATI Radeon 7500 à 9700 sont cadencés à des fréquences d’horloge comprises entre 275 et 325 MHz ( par comparaison, vous savez qu’actuellement les Pentium IV dépassent les 2 GHz ). A quoi correspondent ces fréquences ? Tous les processeurs fonctionnent selon un schéma logique similaire : ADRESSES PROCESSEUR UNITE DE RECHERCHE HORLOGE UNITE DE DECODAGE CONTENU CONTENU X Adresse UNITE D'EXECUTION MEMOIRE RESULTAT SCHEMA LOGIQUE DE FONCTIONNEMENT D'UN PROCESSEUR 1. L’unité de recherche adresse une cellule de la mémoire pour lire son contenu ( 8 bits, 16 bits, … ) ; 2. La mémoire transfère ce contenu en le dupliquant vers l’unité de décodage ; 3. L’unité de décodage examine le ou les octets transmis et décide ce qu’il faut en faire ( p.ex. une addition ) ; 4. L’unité de décodage transmet l’instruction à l’unité d’exécution qui exécute cette instruction ; 5. L’unité d’exécution envoie le résultat à l’extérieur du processeur via bus de sortie ; Ces 5 opérations élémentaires sont consécutivement et régulièrement menées au rythme imposé par des impulsions périodiques provenant d’une horloge à quartz : la fréquence de ces impulsions impose ainsi le rythme d’avancement des opérations : un processeur cadencé à 2 GHz est donc susceptible d’effectuer 2 milliards d’opérations par seconde. 1.5.4. LES INTERFACES DE PROGRAMMATION GRAPHIQUE ( DirectX , OpenGL, PHIGS, GKS ) Comme vous le savez, les microprocesseurs ( et, identiquement, les coprocesseurs graphiques ) présentent, par rapport aux circuits électroniques banals, la particularité d’avoir été conçus pour être programmables. Cette programmation revient à disséquer l’exécution d’une action souhaitée par l’utilisateur, p.ex. « ajouter les valeurs de 2 variables », en une séquence de micro-instructions pas à pas en traduisant, selon un vocabulaire et une syntaxe « humainement accessibles », les ensembles codés binaires ( suites de « 0 » ou « 1 » ) selon lesquelles le processeur va physiquement réagir en fonction de son câblage pour manipuler des données ( numériques ou alphanumériques ) en respectant des ordres d’instructions de types logique, arithmétique ou de contrôle, selon un « code d’ordres » propre à chaque type de processeur selon son câblage Hardware. Très généralement, pour fixer les idées, il existe 6 grandes catégories d’instructions : 1. les instructions de transfert de données entre microprocesseur et organes périphériques ( clavier, mémoire, … ) ; 2. les instructions de transfert de données entre registres ( zones de mémorisation temporaire de groupes significatifs de bits : p.ex. « registre tampon » permettant de stocker temporairement une information entre un dispositif source et un dispositif destinataire non synchronisés ) ; 3. les instructions arithmétiques ( +, -, incrémentation, … ) ; 4. les instructions logiques ( « ET », « OU », « OU EXCLUSIF XOR », … ) ; 5. les instructions de décalage ( logiques, arithmétiques, … ) ; 6. les instructions de contrôle ( permettant l’exécution d’algorithmes conditionnels par tests et branchements à des adresses quelconques en mémoire ). Comme indiqué, il est clair que rédiger un programme qui ne serait qu’une très longue suite binaire directement compréhensible par le processeur serait humainement ingérable et qu’ainsi, le problème de base qui se pose est de pouvoir traduire de telles séquences d’instructions binaires en un langage symbolique décrivant selon un vocabulaire codifié et une grammaire conventionnelle codifiée les instructions, les données et les adresses des registres de façon plus directement accessible au programmeur. Ceci est d’autant plus vrai aujourd’hui que la complexité des circuits et de leurs applications a suivi une courbe exponentielle depuis le premier processeur à 8 bits introduit par Intel sur le marché en 1972 ( le « 8008 » ) et que s’il s’était encore avéré envisageable, pour de tels systèmes élémentaires des origines de la micro-informatique, de programmer en binaire, tel n’est assurément plus le cas aujourd’hui où, p.ex. la Société Microsoft utilise à plein temps près de 6000 développeurs dans l’équipe R&D chargée de concevoir le futur Operating System VISTA qui va remplacer Windows XP. La complexité des logiciels s’accroît en effet sans cesse, au point que l’on parle de « modularité » d’un langage, c.à.d. de son aptitude à être utilisé pour la rédaction de programmes très volumineux ( il est fréquent de voir aujourd’hui des logiciels comprendre plusieurs centaines de milliers de lignes de code ) en les divisant en « modules » plus faciles à tester qu’un ensemble, maîtrisables par des groupes indépendants de développeurs responsables chacun de leurs parties du projet et interfaçables avec d’autres langages selon lesquels certaines parties du projet sont établies ( le « C » et le « Java » sont ainsi typiquement des langages modulaires , le « Pascal » beaucoup moins ) . Le langage d’« Assemblage » est ainsi le langage symbolique de base permettant d’opérer cette traduction au plus bas niveau, c.à.d. au niveau de la gestion des registres du processeur : l’utilisation d’un tel langage nécessite une connaissance approfondie du fonctionnement interne du hardware et, plus spécifiquement encore, du hardware spécifique aux divers types de processeurs, mémoires, gestionnaires de périphériques, … auquel la rédaction du programme sera dédicacée : tout langage d’assemblage est d’ailleurs propre à un type de processeur donné. La « compilation » effectuée ensuite par un programme standard tiers « de service » dit « Assembleur » permet alors de traduire, in fine, les instructions et données écrites en langage dit « source » ( c.à.d. le programme écrit en langage d’« Assemblage » ) en langage « Machine » ( c.à.d. les chaînes de valeurs binaires compréhensibles par la machine ). Voici, p.ex., un tout petit segment de code en langage d’Assemblage destiné à ajouter le contenu du registre C au contenu du registre A et ranger cette somme dans le registre A pour un microprocesseur de première génération ( le Zilog Z80 qui équipait le Tandy-Radio Shack TRS80 en 1977 , à l’époque de l’Apple II équipé du 6502 de MOS Technology ) : “ ADD A,C ” L’instruction “machine” en binaire correspondante s’établit, après compilation, selon l’octet : «10000001» L’avantage de ce langage d’Assemblage « de bas niveau » est qu’il définit chaque ligne d’instruction en correspondance bi-univoque avec l’instruction « machine » correspondante : chaque instruction du langage d’assemblage correspond exactement à une et une seule instruction machine. Son désavantage est qu’il n’est pas très « explicite » ni au regard du langage « naturel » des utilisateurs, ni au regard de leur mode de pensée scientifique habituel, bien que des mnémoniques et des adresses symboliques facilitent la tâche du programmeur : p.ex., les instructions arithmétiques communes ( + , - , x , / ) s’écrivent « ADD, SUB, MUL, DIV » sans qu’il soit nécessaire de se rappeler des codes binaires correspondants, tâche de conversion effectuée par après par l’Assembleur. Voici un petit segment de code en langage d’assemblage pour Pentium qui vous confirmera ce caractère un peu ésotérique du langage : « … PUSH EBP MOV EBP, ESP CMP [EBP + 8], 1 JNE L1 MOV EAX, [EBP + 16] PUSH EAX MOV EAX, [EBP + 12] PUSH EAX PUSH OFFSET FLAT : format CALL _printf ADD ESP, 12 JMP Done ; … » Aussi des langages, dits de « haut niveau », ont-ils été mis au point pour rendre encore plus accessible aux utilisateurs la rédaction de programmes : le Basic, le Fortran, le Pascal, … en sont des exemples.L’inconvénient de la plupart de ces langages de haut niveau est qu’ils forment un écran « opaque » entre l’utilisateur et les séquences multiples « de bas niveau » en général nécessaires pour exécuter peu d’opérations mathématiques ou logiques : là où 2 ou 3 instructions suffiront pour réaliser une opération dans un programme de haut niveau, il en faudra beaucoup plus en langage d’Assemblage tout simplement parce que le langage d’Assemblage « décortique » les séquences pas à pas, en suivant l’ordre précis des diverses opérations successives dans les circuits, ce à quoi ne procèdent absolument pas ces langages de haut niveau qui sont plutôt une traduction synthétique de la pensée mathématique et logique de l’utilisateur lui-même qu’une traduction du mode réel de fonctionnement du système à microprocesseur. Bien que « de haut niveau », le langage de type « C » ( ou sa variante étendue « C++ » ) pour lequel, je crois, vous êtes formés actuellement à la FPMs reste fort proche d’un langage d’Assemblage, en ce sens qu’il limite son noyau de base au traitement des caractères, des nombres et des adresses ( les « pointeurs » ), combinés avec des opérateurs arithmétiques ou logiques, en dégageant ainsi « du lot » toutes les opérations communes à la plupart des systèmes à microprocesseurs, ce qui en assure une grande portabilité. Ce langage C a ainsi été utilisé au départ pour programmer de façon simple et compacte l’Operating System « Unix », comme il l’est aujourd’hui pour programmer le système d’exploitation « Windows » ( dont les versions NT, actualisées sous les appellations Windows « 2000 » puis « XP » sont d’ailleurs très semblables à l’Unix, étant spécifiquement orientées vers l’exploitation de réseaux d’entreprises ) ou l’O.S. « Linux », lui aussi de type « Unix » . Il est clair toutefois que, quel que soit le type d’Operating System envisagé, tout un ensemble de procédures, davantage spécifiques à tel ou tel matériel, restent alors à adjoindre au plus bas niveau à celles, plus généralistes, écrites en « C » et que ces procédures spécifiques sont alors dépendantes du matériel et doivent être écrites en langage d’Assemblage, appelables comme routines ou fonctions préprogrammées au sein du programme C sans que l’utilisateur doive se préoccuper de cette programmation particulière ( tel est le cas p.ex. des fonctions de lecture ou d’écriture qui ne sont pas comprises d’ailleurs dans le noyau de base du « C » mais restent spécifiques à la machine et, à ce titre, doivent être adaptées au matériel par le constructeur et le fournisseur de l’O.S.). B. Kernigham et D. Ritchie qui ont été les concepteurs à la fois du « C » et de l’Unix de l’Ordinateur Digital DEC PDP11 ( qui était un « mini-ordinateur central multi-utilisateurs via réseau local » mis sur le marché en 1976 et très répandu dans les milieux industriels, bancaires,… ) expliquent à ce sujet que leur O.S. UNIX comportait 13.000 lignes de programmation dont seules 800 étaient écrites en Assembleur et dédicacées à l’architecture et aux composants spécifiques du PDP11, les autres étant rédigées en « C » et portables sur bien d’autre systèmes : il en est de même aujourd’hui pour l’O.S. Windows, majoritairement rédigé en C et C++, partiellement en langage d’assemblage. De même, il est évident que le compilateur qui opère la traduction en langage machine d’un programme écrit en C sera propre à l’architecture spécifique de la machine utilisée et de ses composants Hardware : le compilateur devra donc aussi être fourni avec la machine spécifique ( Stations Sun, IBM, Silicon Graphics, …). Bien entendu, une tendance affirmée de standardisation existe, notamment pour les micro-ordinateurs PC « compatibles » , ce qui permet aussi pour tous ces PC une même standardisation du compilateur C, comme de l’O.S. d’ailleurs, mais il faut alors remarquer qu’il existe, parallèlement, les Macs d’Apple dont les O.S. ( MacOS X ) et les compilateurs C diffèrent de ceux des PC, bien qu’il s’agisse dans les 2 cas de « microordinateurs ». L’inconvénient d’un langage compilé reste donc toujours qu’il ne peut s’exécuter complètement sur plusieurs types de processeurs que si le programme source est disponible et qu’il peut alors être compilé par les compilateurs spécifiques à ces processeurs : il faudrait donc idéalement toujours veiller, lors de l’achat d’un logiciel, à se faire fournir le code source et non exclusivement le code déjà compilé pour un type donné de machine et de processeur, sous peine de devoir racheter complètement le même logiciel en cas de changement de machine ( p.ex. si l’on passe d’un PC à un Mac ou réciproquement ) ou même en cas d’upgrade d’O.S. pour une même machine ou d’une machine de même type mais plus récente. Pour comprendre alors ce qu’est la « programmation » dans le cadre de l’utilisation de cartes graphiques, il reste essentiel de comprendre en priorité ce qu’est cet Operating System dont il vient d’être question . Tout d’abord, il faut distinguer le Système d’exploitation du « Bios » ( Basic Input / Output System) : lorsque vous mettez votre ordinateur sous tension, le Bios est immédiatement activé en tant que tout premier « logiciel en version exécutable » et d’ailleurs, avant que les tâches qu’il effectue soient terminées, ce qui peut durer quelques minutes, vous n’avez pas accès à l’interface graphique du Système d’exploitation Windows. Le rôle du Bios est de mettre en place une interface entre le matériel et le Système d’exploitation : sa première fonction est de tester et reconnaître les principaux organes du PC ( mémoires, disque dur, cartes d’extension, contrôleurs de périphériques, … ) : il est d’ailleurs parfois nécessaire de télécharger une « mise à niveau » du Bios chez le Constructeur de votre PC si vous comptez y adapter un matériel tout récent qui n’existait pas lors de l’achat de votre machine, un lecteur DVD p.ex. Sa seconde fonction, chronologiquement, est de charger l’Operating System en RAM ; une fois cette tâche accomplie, l’O.S. est activé et vous voyez alors apparaître à l’écran l’interface graphique de l’O.S.Windows à partir de laquelle vous allez pouvoir commencer à travailler. Le rôle du Bios ne s’arrête cependant pas à l’amorçage du système et il sera à nouveau impliqué en cours de travail, p.ex. lors des opérations de lecture ou d’écriture de fichiers sur le disque dur. Une fois chargé par le Bios, l’O.S. va jouer le rôle – ESSENTIEL – d’interface entre le Hardware et tout logiciel d’application que l’utilisateur va souhaiter mettre en œuvre pour exécuter une tâche, p.ex. la rédaction d’un texte au moyen d’un traitement de texte ( Microsoft Word p.ex. ), la réalisation du dessin d’un plan de bâtiment au moyen d’un progiciel D.A.O. ( AutoCAD, DesignCAd ou Cadkey p.ex. ), le calcul des contraintes dans un élément d’assemblage sollicité en flexion et torsion au moyen d’un progiciel de calcul par Eléments Finis ( Algor ou Cosmos p.ex. ) ou la réalisation des séquences d’un dessin animé par un progiciel 3D d’animation ( Maya, 3Dmax ou LightWave p.ex. ). Si vous rédigez vous-même un programme en C++, p.ex. pour réaliser des calculs matriciels, sa version devenue « exécutable » ( « .exe » ) après compilation du code source que vous aurez écrit au moyen d’un Editeur de texte va devenir elle aussi un logiciel d’application, au même titre que les versions « .exe » des programmes de traitement de texte, de dessin, de calcul de contraintes ou de dessins animés 3D que vous aurez acquis sur le marché du Software. L’une des premières tâches de l’O.S. sera d’ailleurs d’aller rechercher cette version exécutable « .exe » sur votre disque dur pour la placer en mémoire RAM après que vous aurez signifié à l’O.S. que vous souhaitez l’ouverture d’une session de travail avec tel ou tel logiciel d’application en double-cliquant sur l’icône qui le représente ( « raccouci » ) sur le « Bureau Windows ». Ce « transport » vers la RAM permettra en effet l’exploitation du logiciel avec un accès infiniment plus rapide que ce serait le cas si ledit logiciel restait résident sur le disque dur ( d’où d’ailleurs la nécessité pour utiliser de puissants logiciels d’une RAM de grande capacité, ne serait-ce que pour y loger le logiciel d’application lui-même ). Pour DesignCAD p.ex., vous pouvez constater que la version exécutable « DesignCAD 3000.exe » est un fichier de 6,52 Mo et qu’il s’agit bien d’une « Application » : Ce qui a déjà été exposé jusqu’à présent vous permet très certainement d’avoir conscience de la haute complexité de la gestion et de l’utilisation des ressources Hardware par l’O.S. En fait, un O.S. comme Windows comporte des centaines de fichiers différents, imbriqués dans un ensemble logique de couches à plusieurs niveaux d’abstraction. Vous pouvez observer ( sauf les fichiers « cachés » si vous ne le spécifiez pas ) cette quantité de fichiers en les faisant afficher à l’écran par « Poste de travail / Disque local C : / WINDOWS / System » : Pour en appréhender le détail, je vous recommande vivement l’acquisition d’ouvrages spécialisés de la série « Microsoft Press » intitulés « Kits de formation » ou « Kits de ressources techniques » ( ils existent en français et peuvent facilement être commandés dans n’importe quelle librairie scientifique et pourraient même, si vous le souhaitez, vous préparer à passer des examens chez Microsoft conduisant à la certification « Microsoft Certified Professional », soit une qualification d’Expert reconnue sur le marché informatique ) qui contiennent toutes les informations utiles pour comprendre, exploiter et développer dans des environnements « O.S. Microsoft Windows » . Plus généralement, si vous êtes intéressés par les O.S., je vous recommande aussi la lecture de « Unix et les Systèmes d’exploitation » par M.DIVAY ( DUNOD ), « Architectures logicielles et matérielles » par P.AMBLARD ( DUNOD ) et « Les Systèmes d’exploitation » par A .TANENBAUM ( DUNOD ). Remarquez simplement le grand nombre de fichiers munis des extensions « .exe » ( ce sont des programmes compilés et exécutables, au même titre que les Applications proprement dites ) et « .DLL », p.ex. les 2 fichiers « GDI.exe » et « GDI32.DLL » qui sont des fichiers « Système » essentiels, notamment pour que vous ayez à disposition l’ « écran graphique Windows » qui vous est familier : il s’agit en effet, comme leur nom symbolique l’indique, de fichiers « Graphics Device Interface » qui gèrent l’affichage graphique sous Windows. Vous connaissez déjà la signification de « .exe », mais que représentent les fichiers « .DLL » ? Toutes les versions de Windows permettent de faire de l’édition de liens dynamique en utilisant un format de fichier spécifique DLL ( Dynamic Link Library ou Bibliothèque de liens dynamiques ) : en fait, la plupart des programmes contiennent plus d’une procédure , mais généralement, les divers compilateurs et assembleurs ne traduisent qu’une procédure à la fois : avant de faire exécuter le programme, il faut donc d’abord lier toutes les procédures : cette seconde étape après compilation est réalisée par un éditeur de liens ; après cette seconde étape, le programme peut seulement être exécuté et porte, sous Windows, l’extension « .exe ». L’édition de liens dynamique répond à la problématique que dans beaucoup de cas, les programmes ont des procédures qui ne sont que très rarement utilisées ou qui peuvent être importées en provenance de sources tierces : par suite, dans un souci d’efficacité et de souplesse, l’édition dynamique autorise l’appel et le lien à de telles procédures au moment exact où elles doivent être appelées plutôt que de les lier indéfectiblement au code principal « .exe ». L’éditeur dynamique de liens construit ainsi les DLL à partir d’un ensemble de fichiers dont il est permis de prévoir qu’ils seront utilisés à certains moments par plusieurs programmes. L’utilisation des DLL permet ainsi de gagner de l’espace aussi bien sur disque qu’en RAM : si une bibliothèque utilisable par plusieurs programmes était en effet systématiquement liée une fois pour toutes statiquement à chacun des programmes qui l’utilise, les codes « .exe » deviendraient inutilement longs et occuperaient inutilement de la mémoire. La différence fondamentale entre un programme principal exécutable « .exe » et une DLL est que la DLL est appelable par le programme « .exe », tandis que l’inverse n’est pas vrai : il est ainsi impossible de faire exécuter une DLL seule. Dans certains cas, les programmes principaux utilisent certaines des fonctions contenues dans les DLL, dans d’autres cas, ces programmes ne font que gérer et coordonner les DLL, celles-ci effectuant alors les opérations proprement dites, mais dans tous les cas, ces programmes doivent toujours faire appel à des DLL du Système d’exploitation lui-même pour fournir des fonctions de bas niveau, comme l’affichage de boîtes de dialogue sur l’écran. Plus généralement encore, ces DLL peuvent contenir des procédures ou des données ou encore les 2 à la fois. Un très bon exemple concerne le progiciel graphique DesignCAD : DesignCAD.exe fait appel à un ensemble de DLL où l’on retrouve à la fois des DLL du Système d’exploitation Windows, des DLL de l’environnement de Développement Logiciel Microsoft DirectX et de l’environnement de Développement Logiciel concurrent OpenGL, c.à.d. des 2 ensembles d’interfaces de bas niveau API intégrant de multiples techniques pour le traitement d’images en 2 ou 3 dimensions et la reconnaissance de périphériques divers ( souris, claviers, cartes graphiques, …) à partir desquels la plupart des progiciels DAO et en particulier ceux assurant le Rendu 3D Temps Réel ( 3Dmax, Maya, Rhino, Lightwave, … ) sont écrits. En utilisant p.ex. l’Utilitaire SiSoft Sandra Standard for Windows d’analyse du système ( ou Norton Utilities de Symantec ), vous pouvez faire apparaître la liste des Librairies Partagées ou d’Extensions d’Applications DLL utilisées par un programme en cours, p.ex., pour ce qui nous concerne, par l’Application graphique DAO « DesignCAD 3000 » : Voici ainsi le détail des modules utilisés par DesignCAD : Comme dit précédemment, on y retrouve : - des DLL propres à Windows comme User32.DLL, OLE32.DLL, GDI32.DLL, … - des DLL propres à OpenGL comme OPENGL32.DLL, GLU32.DLL, … - des DLL propres à DirectX comme DDRAW.DLL, … Il vient d’être indiqué que DirectX, p.ex., était une Interface de Bas Niveau « API » : ce type d’interface concerne très directement l’objet de ce §, c.à.d. la programmation graphique. Ces « API » sont d’abord à examiner dans le contexte plus général de la structure des Operating Systems . Nous induirons ce qu’il est nécessaire d’en comprendre par la considération préliminaire d’un schéma logique global de structure d’O.S. qui n’entre pas dans les détails de l’explication de ses multiples fonctionnalités : LOGICIELS D'APPLICATION API NOYAU PILOTES DE PERIPHERIQUES OPERATING SYSTEM HARDWARE SCHEMA LOGIQUE GLOBAL D'UN OPERATING SYSTEM Ce schéma global très simplifié divise l’O.S. en 3 couches logiques : 1° Les services fournis par l’O.S. aux Applications : les « API » (Application Programming Interface) Les API sont des ensembles de codes préprogrammés et précompilés qui permettent aux développeurs de connecter leurs propres programmes d’Applications ( p.ex. un progiciel de Dessin Assisté par Ordinateur comme DesignCAD ) avec les fonctionnalités de l’O.S. sans qu’ils doivent nécessairement connaître le détail de programmation de ces fonctionnalités, en leur fournissant une librairie de fonctions appelables au sein de leurs propres programmes rédigés p.ex. en C++. Les API peuvent être ainsi considérés comme des « Boîtes Noires » dont l’utilisateur peut utiliser les fonctionnalités de façon simple en étant sûr que ces fonctions conduiront au résultat escompté, sans pour autant savoir en détail comment ces fonctions ont été programmées par d’autres développeurs spécialisés que lui-même. Dans le domaine du graphique, ces API sont essentiellement GKS, PHIGS, OpenGL et DIRECTX . Les services DirectX, développés par Microsoft, offrent l’avantage d’être directement fournis avec le package Microsoft Windows, tandis que les autres doivent être acquis par le développeur en se le procurant auprès d’une source tierce ( le Kit de développement SDK DirectX doit cependant être acquis séparément chez Microsoft si vous souhaitez programmer des applications vous-même et ce, même si les DLL utilisables par des applications qui ont utilisé ce Kit, comme – partiellement – DesignCAD, sont d’office présentes sur votre PC s’il tourne sous Windows ). Les 3 autres sont moins ciblés « Microsoft » et sont donc davantage universels ( pour le graphique ) et sont d’ailleurs utilisés aussi bien dans le monde « UNIX » que dans le monde « Microsoft ». Pour constater que DirectX est bien présent sur votre PC ( s’il fonctionne avec un O.S. Microsoft ), il vous suffit de faire appel à l’ « outil de diagnostic DirectX » par doubles-clics successifs : « Poste de travail / Disque local C : / Program Files / directX / Setup / DX Diag » puis en cliquant sur l’onglet « Fichiers DirectX » dans la Boîte de dialogue « Outil de diagnostic DirectX » : Comme vous le constatez, les fichiers fournissant les fonctionnalités DirectX et qui donnent aux programmes d’Application comme DesignCAD l’accès aux services préprogrammés DirectX sont essentiellement de type DLL. En fait, DirectX n’est pas indéfectiblement intégré dans l’O.S. Microsoft Windows mais celui-ci, comme les UNIX, est de type « ouvert », c.à.d. qu’il autorise des ajouts, sous la forme d’appels à des DLL essentiellement. Ce caractère « ouvert » explique d’ailleurs que des fichiers DLL d’origines autres que Microsoft DirectX, comme OpenGL, Phigs ou GKS peuvent s’y substituer pour former des API devenant en quelque sorte partie intégrante de la couche logicielle supérieure de l’O.S.ou, plus exactement, se substituent à cette couche en offrant des outils spécialisés qui sont susceptibles, tout en coexistant harmonieusement avec cet O.S., de bypasser en les remplaçant les fonctions insatisfaisantes des API standards de l’O.S., p.ex. celles de l’ « élémentaire » GDI Windows qui gère l’affichage très simple mis en œuvre par Windows si vous faites du traitement de texte sous Word ou du dessin basique sous « Paint »[ comme le confirme l’utilitaire Sandra, cf. p. suivante ] mais qui devient insuffisant pour la réalisation de dessins 3D en Rendu réaliste à grande Bande Passante . L’utilitaire Sandra met en évidence qu’aucune des DLL de DirectX n’intervient lors de l’exécution du petit programme de dessin « Paint » : c’est par contre l’interface graphique GDI standard de Windows qui est utilisée. Ceci est d’autant plus vrai que, plus généralement, la gestion du matériel ( graphique, sons, … ) par l’O.S. Windows de base doit être considérée comme trop lente et insatisfaisante pour beaucoup d’applications Multimédia ( images animées en rendu réaliste, son, vidéo, applications réseaux multiutilisateurs ), raison pour laquelle Microsoft a développé les outils DirectX comme des outils de bas niveau permettant d’accéder directement aux composants matériels de l’ordinateur et occultant ainsi le recours aux fonctionnalités insatisfaisantes du Windows de base, comme ce qui concerne l’affichage standard « Windows » ainsi que montré ci-dessus pour « Paint ». DirectX, comme OpenGL, définit ainsi un ensemble de composants logiciels dédiés aux tâches de gestion du matériel et capables de mettre en action leurs caractéristiques afin d’accélérer les traitements pour garantir des performances optimales lors de l’exécution des applications Multimédias. Nous verrons par après plus exactement comment un tel by-pass s’effectue. DirectX, à la différence d’OpenGL, de Phigs et de GKS, s’adresse à tous les types d’applications multimédias, non seulement pour ce qui est du graphique pur comme les 3 autres cités, mais encore pour ce qui concerne la musique, la capture et la lecture de séquences vidéo sonorisées, l’utilisation de périphériques d’entrée sophistiqués ( joysticks réactifs et manettes de jeux ), la participation à des forums multi-utilisateurs, … DirectX est ainsi formé d’un ensemble de composants logiciels dédicacés à tous les types d’applications Multimédia : - la programmation graphique 2D et 3D : Module DirectX Graphics la gestion des périphériques d’entrée / sortie ( joysticks, micros, … ) : Module Direct Input la lecture et la capture de sons : Module DirectX Audio la lecture et la capture de flux vidéo et audio ( MPEG, AVI, DVD, MP3, WAV ) : Module Direct Show l’écriture d’applications réseau ou de jeux massivement multi-joueurs : Module Direct Play Ces composants logiciels ont notamment pour charge de détecter les matériels suivants en vue d’un « paramétrage automatique » ( et transparent pour l’utilisateur ) des applications qui les utiliseront : o o o o la carte graphique , sa résolution, le nombre de couleurs affichables, ses capacités d’accélération 2D et 3D, son pilote ; la carte son, son pilote et ses capacités d’accélération les périphériques d’entrée et leurs caractéristiques ( p.ex. le nombre de boutons équipant la souris, les capacités de « force feedback » d’un joystick, … ) les cartes réseaux et les modems. Cette façon de reconnaître automatiquement le matériel Hardware rend ainsi ces API « transparentes » visà-vis du Hardware ( et en particulier vis-à-vis du type de carte graphique, pour autant que la carte graphique soit câblée p.ex. pour être reconnue par OpenGL ou DirectX ) pour les utilisateurs qui vont en utiliser les services en programmant leurs propres applications graphiques, sans qu’ils aient à se préoccuper davantage des spécificités du Hardware qu’ils utilisent. Remarquons à ce sujet qu’il reste toujours utile, avant d’acquérir une carte graphique, de vérifier qu’elle supporte les fonctions accélératrices de ces API. P.ex., la carte graphique Nvidia qui équipe mon portable « supporte » les fonctions accélératrices du Module DirectX Graphics, soit les fonctions d’accélération graphique DirectDraw ( pour la gestion des graphiques en 2 dimensions ) et Direct3D ( univers virtuels en 3D ), comme le montre l’outil de diagnostic de DirectX dont il a déjà été question précédemment : Remarquons à ce sujet que la nouvelle version DirectX 8.1 fusionne à présent les 2 modules précités sous l’appellation DirectX Graphics. Que ce soit pour DirectX, OpenGL, Phigs ou GKS, la façon d’intégrer les fonctions offertes par ces services d’API dans un programme d’Application écrit par un développeur est toujours relativement identique, c.à.d. grosso modo par appel à des routines au sein d’un programme écrit dans un langage de haut niveau, le plus souvent en C ou en C++. Voici, à titre d’exemple, un fragment de programme en C faisant appel à des fonctions des Bibliothèques GL ( Graphics Library ) et GLUT ( GL Utility Toolkit ) d’OpenGL pour dessiner un carré dont le centre de gravité correspond à l’emplacement pointé par un clic de souris, après avoir ouvert une Window d’affichage : glVertex2f ( x+size, y-size) ; glEnd ( ) ; “ # include <GL/gl.h> # include <GL/glut.h> Glsizei wh = 400, ww = 300; /* définit la taille de la fenêtre : height = 400, width = 300 */ Glfloat size = 30.0 /* définit la moitié de la longueur des côtés du carré */ / *dessiner le carré */ void drawSquare( int x, int y ) { y = wh – y ; glColor3ub( (char) random( )%256, (char) random( )%256, (char) random( )%256 ) ; glBegin(GL_POLYGON) ; glVertex2f ( x+size, y+size) ; glVertex2f ( x-size, y+size) ; glVertex2f ( x-size, y-size) ; glFlush ( ) ; } … etc … “ En fait, l’OpenGL est une bibliothèque de base qui contient un ensemble de routines de restitution ( tracé de primitives, remplissage de polygones, gestion de la couleur, … ) et de commandes de requêtes de valeurs de variables d’état ( globalement, des renseignements numériques à propos des dessins ) très puissante mais volontairement limitée aux éléments de base du graphique. Par exemple, la génération de surfaces « Nurbs » ( Non Uniform Relational B-Spline ) comme celles qui sont le plus souvent mises en œuvre pour la construction de modèles infographiques complexes ( comme ceux des dinosaures et autres animaux du Crétacé dans la série de la BBC de Tim Haines et Jasper James sur les mondes disparus ) n’est pas incluse dans la bibliothèque de base ; OpenGL ne contient pas non plus les routines de gestion des fenêtres à l’écran, qui dépendent du matériel Hardware et de l’O.S. utilisés. Mais il existe un ensemble de bibliothèques complémentaires qui permettent de simplifier les tâches de programmation, évitant ainsi de devoir tout reprogrammer : GLU ( OpenGL Utility Library ) contenant notamment le traitement matriciel relatif à divers types de projections ( axono, perspectives, …) et la génération de surfaces Nurbs ; bibliothèque de routines-gestionnaires de fenêtres ( GLX poux le XWindows d’Unix, WGL pour Microsoft Windows, PGL pour IBM OS/2, AGL pour Mac OS ) ; GLUT ( OpenGL Utility Toolkit de Marc Kilgard), kit d’outils indépendant du gestionnaire de fenêtres afin de masquer la complexité des divers appels au gestionnaire de fenêtres ; FSG ( Farenheit Scene Graph ), kit d’outils orienté-objet contenant des objets pré-définis et un modèle événementiel intégré pour les interactions de l’utilisateur. La programmation sous GKS ou PHIGS est très semblable à celle sous OpenGL, toutes relativement faciles à apprendre et à pratiquer, d’autant qu’il s’agit d’API dédicacées « graphique pur » et non «multimédia». Par contre, la programmation sous DirectX est nettement plus complexe et nécessite du développeur qu’il se spécialise notamment dans le maniement de la technologie originale « COM » ( Component Object Model )spécialement développée par Microsoft pour établir les versions successives de l’API DirectX ( qui se succèdent à un rythme très rapide et dont il faut encore prévoir de grandes évolutions, liées au développement exponentiel des technologies Multimédias ) et qu’il soit rompu au C et C++ ainsi que, plus généralement, à la programmation orientée « Objet ». C’est d’ailleurs une spécialité que je vous conseillerai de suivre avec attention, dans le cas où voussouhaiteriez entreprendre une carrière d’ingénieur informaticien dans le domaine passionnant du multimédia. Il faut noter aussi que beaucoup de progiciels DAO/CAO ou de Rendu 3D mettent à la disposition de leurs utilisateurs, en parallèle avec le module graphique interactif ( fenêtre graphique avec menus et barres de commande ) qui est l’outil principal proprement dit de ce type de progiciels, un module de programmation pure dont les outils sont fort comparables à ceux offerts par les API précitées, ce qui offre l’avantage de pouvoir travailler avec un seul package intégré où ne se pose aucun problème d’importations dans l’univers graphique propre au progiciel interactif utilisé et où, dans la plupart des cas, les concepteurs du module de programmation ont apporté un soin particulier pour faciliter l’apprentissage et le maniement du langage propriétaire mis à la disposition des utilisateurs. Si, pour utiliser efficacement DirectX p.ex., vous devez connaître parfaitement le C , le C++ et les techniques orientées-objet avant de pouvoir utiliser les routines du package graphique de DirectX,, pour utiliser par contre p.ex. le langage mis au point par Lightwave et la façon d’y gérer les routines graphiques, il vous « suffit » de l’apprendre comme un tout autonome dont toute la documentation d’utilisation et d’apprentissage est fournie de façon intégrée par la seule et même source. Ainsi, AutoCAD est livré avec AutoLisp, version adaptée de Common Lisp, un langage dédicacé « Intelligence Artificielle ». DesignCAD est livré avec BasicCAD, version adaptée du langage Basic et offre aussi la possibilitéd’appeler les routines graphiques à partir d’un programme écrit dans n’importe quel langage permettant de créer un « OLE Automation Client », comme Visual Basic, Visual C++, Delphi, C++ Builder, … nous y reviendrons ultérieurement. Dans le domaine du Rendu Réaliste 3D, quelques « Majors » ont intégré un module de programmation dans leur package comme 3DMax avec MaxScript, Maya avec MEL, Lightwave avec Lscript, dont un exemple de programme est donné page suivante. Au vu de ce qui précède, un constat s’impose : les bibliothèques graphiques et même les langages y associés sont pour la plupart « propriétaires » : seuls, en fait, GKS et PHIGS y échappent. Pour le rendu 3D réaliste, ce sont cependant de tels packages « propriétaires » qui tiennent aujourd’hui le « haut du pavé », OpenGL étant au coude à coude avec DirectX : vous ne trouverez pas actuellement de cartes graphiques à hautes performances qui ne soient pas câblées pour supporter ces 2 « ténors ». A ce propos, si DirectX est typiquement Microsoft pour programmer les machines à base de processeurs Intel, tout en autorisant aussi bien l’implantation sur machines de type « stations de travail » fonctionnant avec processeurs Digital Alpha AXP, PowerPC, MIPS R4000, …, il faut savoir qu’OpenGL a comme origine la Bibliothèque Graphique Propriétaire développée entre 1982 et 1992 pour des stations graphiques très célèbres à cette époque pour leurs qualités infographiques: les Stations IRIS de SILICON GRAPHICS fonctionnant sous UNIX. Le choix d’un outil de programmation graphique doit donc être mûrement réfléchi, d’autant que, quel qu’il soit, il vous réclamera un investissement « jour x homme » d’apprentissage très appréciable. A cet égard, si votre objectif est simplement d’élargir les potentialités d’un progiciel graphique interactif et que vous ne disposez pas des délais utiles pour acquérir les connaissances très étendues que réclamerait la mise au point d’un logiciel en tous points original, le choix d’un package intégré à un progiciel existant, comme Lscript de Lightwave p.ex., est certainement un très bon choix. Voici, à titre d’exemple, comme prévu en page précédente, un tout petit fragment de code écrit sous Lscript de Lightwave : il crée un triangle en 3D en stockant les coordonnées de ses sommets dans le tableau « Point » : « main { editbegin ( ) ; point[1] = addpoint ( 0, 0, 0 ) ; point[2] = addpoint ( 0, 1, 0 ) ; point[1] = addpoint ( 1, 0, 0 ) ; polygon = addpolygon ( point ) ; editend ( ) ; } » Si vous avez déjà programmé en C, le décodage de ce petit fragment sera immédiat pour vous, Lscript étant une version adaptée du C. 2° LeNoyau de l’O.S. Le Noyau assure plusieurs fonctions essentielles au fonctionnement du système : la prise en charge des interruptions et des déroutements, l’attribution de la puissance d’exécution aux programmes, la gestion de la mémoire centrale, les mécanismes de synchronisation entre les exécutions de programmes et le cœur du système de gestion des fichiers. Dans les O.S. modernes ( chez Microsoft, le modèle initial en est Windows « NT », devenu « 2000 » puis « XP » ), la taille du noyau est volontairement réduite au minimum et porte le nom de « micronoyau », toutes les autres fonctions ayant le statut de programmes d’application, ce qui permet, entre autres, de faire coopérer plusieurs systèmes d’exploitation différents sur la même machine au-dessus du même micronoyau. Dans une philosophie objet, ces modules deviennent autant d’objets munis d’un ensemble de méthodes hiérarchiques et qui dialoguent en échangeant des messages. Le schéma logique qui suit concerne l’architecture de machine virtuelle 32 bits de l’O.S. NT 4.0 et permet de voir la place du micronoyau à l’intérieur du noyau dans cette structure hautement modulaire d’ensembles rassemblés dans des couches qui coopèrent entre elles : chaque module réalise une fonction particulière et disposes d’interfaces bien définies avec les autres modules : Programme Win32 Sous-système Win32 Interface Système MODE UTILISATEUR MODE NOYAU Services du système Input / Output Manager Cache Manager Manager Objet Manager Sécurité d'accès aux ressources Manager Process Drivers du Système de Fichiers Local Procedure Call Facility Client / Serveur Drivers Réseau MICRONOYAU Drivers de Composants Hardware Manager Mémoire Virtuelle WINDOW MANAGER WIN32K.SYS DRIVERS DE COMPOSANT GRAPHIQUE HARDWARE ABSTRACTION LAYER ( HAL ) HARDWARE NT 4.0 ( et ses successeurs récents ) est divisé en 2 sections principales dites « Mode Utilisateur » et « Mode Noyau ». Le Mode Noyau est un mode opératoire à « hauts privilèges » dans lequel le code a accès à l’ensemble du Hardware et à l’ensemble de la mémoire, incluant les espaces d’adressage de tous les process du mode utilisateur. Le Mode Utilisateur ne dispose que de privilèges réduits sans accès directs avec le Hardware. La Couche d’abstraction du matériel (HAL ) est une bibliothèque du noyau où se trouvent consignées les routines d’activation des composants Hardware : cette couche logicielle se trouve au plus bas niveau du noyau de l’O.S. et est située entre le Hardware et tous les autres modules de l’O.S. Cette couche logicielle de bas niveau cache ou « abstrait » ( c.à.d. rend transparent ) les caractéristiques hardware du matériel derrière des points d’entrée standards de sorte que n’importe quel hardware apparaisse comme une boîte noire vis-à-vis de l’O.S. Cette couche permet par exemple à l’O.S. de tourner sur différentes plateformes avec différents types de processeurs ( Intel, Motorola, … ) et permet aussi aux pilotes ( drivers ) logiciels de haut niveau, comme les pilotes de cartes graphiques, de formatter les données pour divers types de moniteurs. Le Manager d’Input / Output prend en charge tous les process d’entrées / sorties et, plus particulièrement, prend en charge les communications entre pilotes de composants Hardware et offre un environnement approprié pour chacun d’eux. Ce Manager I/O inclut une interface formelle et uniformisée à laquelle tous les types de pilotes peuvent faire appel. Le modèle logique de ce Manager repose sur une architecture en couches qui permet aux divers pilotes d’implémenter logiquement chacun une couche distincte dans ce modèle. P.ex. des pilotes manipulent le hardware au plus bas niveau de ce modèle ; d’autres pilotes existent à plus haut niveau et ces pilotes de haut niveau ignorent tous les détails du Hardware : avec l’aide du Manager I/O comme interface, les pilotes de haut niveau transmettent simplement des requêtes logiques d’I/O aux pilotes de bas niveau qui agissent directement sur le matériel. Ces pilotes de composants Hardware, comme les pilotes de souris, de clavier, de cartes graphiques, sont des logiciels généralement écrits en C, C++ ou en langage d’assemblage et accèdent aux registres Hardware des périphériques au travers de points d’entrée dans les DLL du Noyau de l’O.S. Le Window Manager est la partie du Noyau qui crée l’interface graphique Windows, avec ses fenêtres, ses icônes, … qui vous est familière : il est composé de 2 modules fonctionnels : le Window Manager ( USER ) et le Graphics Device Interface ( GDI ). Les Applications appellent les fonctions standards de l’USER pour créer des fenêtres et des boutons à l’écran . Le Window Manager communique ces requêtes au GDI qui les transmet aux pilotes de composants graphiques ( Graphics Display Drivers ) où elles sont formattées pour l’affichage. Le GDI fournit un ensemble de fonctions standards qui permettent aux applications de communiquer avec les composants graphiques sans rien connaître de ces composants. Le schéma logique suivant montre l’intervention du Window Manager pour le traitement d’une Application : Applications User32.DLL / GDI32.DLL Mode Utilisateur Mode Noyau USER / GDI Pilote de carte graphique I/O Manager Video Port Carte Graphique 3° Les Pilotes de périphériques Ces pilotes peuvent être considérés comme les derniers maillons d’une longue chaîne, débutant par le logiciel d’application et se terminant par une action concrète comme le tracé d’un dessin à l’écran ou sur une imprimante. Les Pilotes appartiennent à une couche logicielle de l’O.S. : dans un ordinateur, beaucoup de composants possèdent leur ou leurs propres pilotes selon qu’ils remplissent une ou plusieurs fonctions. Chaque carte graphique possède ainsi son propre pilote. Vous pouvez vérifier l’existence de ce pilote et surtout son N° de version soit à l’aide du gestionnaire de périphérique de Windows, soit à l’aide de l’outil de diagnostic DirectX . Dans beaucoup de cas, si vous rencontrez des problèmes d’affichage en utilisant un progiciel graphique d’application récent sur une machine plus ancienne, la cause en est dans la non-réactualisation du pilote de carte graphique: vous devez alors visiter le site WEB du constructeur de carte graphique, télécharger la version la plus récente du pilote, la décompresser puis, si le pilote ne se charge pas « automatiquement », utiliser le gestionnaire de périphérique de Windows pour opérer la mise à jour . Dans certains cas ( cartes anciennes notamment ), si vous ne trouvez pas sur le site du constructeur ce qui vous convient, voyez : www.winfiles.com, www.driverzone.com, www.windrivers.com, www.conitech.com. Voici comment se présentent les informations à propos du pilote de carte graphique selon qu’elles sont obtenues à partir du gestionnaire de périphériques ou de l’outil de diagnostic DirectX : Par le gestionnaire de périphérique, vous avez accès à l’emplacement des 3 fichiers principaux du pilote dans le répertoire : “ C: \ WINDOWS \ SYSTEM \ NVDISP.DRV ”. “ C: \ WINDOWS \ SYSTEM \ NVMINI.VXD ”. “ C: \ WINDOWS \ SYSTEM \ vmm32.vxd ( vdd.vxd ) ”. Il est utile de pouvoir « décoder » la signification des termes particuliers utilisés pour la dénomination de ces fichiers : - VMM32 signifie « Virtual Machine Manager 32 bits » et fait référence à la fonctionnalité de Windows qui consiste à exécuter plusieurs applications en même temps ( Multitâche ) et traite chacune de ces applications comme si elle s’exécutait séparément dans sa propre machine virtuelle : tout se passe comme si Windows « trompait » chaque application en lui faisant croire qu’elle a un accès complet aux ressources de la machine, même si celles-ci sont partagées par d’autres applications ; - Afin de réaliser cela, Windows utilise les pilotes virtuels de périphérique ( extension « .VXD » ) afin que chaque application puisse croire qu’elle est en liaison séparée avec chacun des composants à l’intérieur de la machine virtuelle ; - Par exemple, un pilote d’écran virtuel ( « VDD » = Virtual Display Driver ) qui contrôle la carte vidéo agit comme si plusieurs copies de ce pilote s’exécutaient en même temps et comme si chacune communiquait de façon individuelle avec les applications : en réalité, une seule copie du pilote est active mais ce dernier se comporte comme s’il existait plusieurs copies. Il faut toutefois remarquer que les 3 fichiers précités ne forment pas, à eux seuls, le pilote : si vous examinez “Windows / System”, vous y trouverez de multiples extensions d’application de type « .DLL » qui interviennent aussi dans la constitution du pilote de la carte graphique. 1.5.5. ARCHITECTURE DE L’ INTERFACE DE PROGRAMMATION GRAPHIQUE Microsoft Direct3D Le développeur d’une Application Direct3D peut faire appel aux services de l’API classique de Windows ( GDI ) ou court-circuiter cet intermédiaire pour attaquer directement la mémoire vidéo via les services de Direct3D. Toute application Direct3D doit en effet indiquer, dans le début du programme, comment elle compte coopérer avec la gestion graphique de Windows. L’API Direct3D comprend d’une part des couches logicielles d’émulation matérielle ( Hardware Emulation Layer HEL ) et d’abstraction matérielle ( Hardware Abstraction Layer HAL ) proposant respectivement l’accès aux implémentations logicielles et matérielles de leurs services. Il est ainsi possible de procéder à des opérations de rendu 3D sans que la carte graphique ne soit équipée d’un circuit d’accélération 3D via une émulation Hardware HEL, mais l’opération reste alors bien plus lente que dans le cas de l’appel au HAL. Comme déjà indiqué dans le § précédent, Microsoft offre une indépendance vis-à-vis des périphériques Vidéo à travers la couche d’abstraction ( HAL ). Cette HAL est une interface manipulant les caractéristiques spécifiques de chaque carte Vidéo. Elle est fondée sur les pilotes compatibles Direct3D implémentés directement par les constructeurs de cartes Vidéo ou de processeurs graphiques ( cf. l’exemple du § précédent pour la carte Nvidia ). Direct3D exploite la couche HAL pour travailler directement avec le périphérique d’affichage, sans passer par la filière Windows Manager et son GDI. Les constructeurs de cartes Vidéo implémentent HAL dans un code 16 bits et 32 bits pour les systèmes Windows 95/98, NT, 2000 et XP. Hal peut être directement incluse dans le pilote d’affichage ou dans une DLL séparée du pilote et qui communique avec le périphérique d’affichage via une interface privée définie par le constructeur de la carte. La HAL implémente exclusivement le code dépendant du périphérique et n’effectue aucune émulation. Toutes les instructions ou les traitements passant par la HAL sont directement traitées par la carte graphique, avec une accélération maximale. Dans le cas où une instruction n’est pas supportée par la HAL, DirectX procède alors à une émulation HEL, plus lente, qui laisse à la charge du système d’exploitation Windows le soin de la traiter : tous les calculs sont alors effectués par voie logicielle standard et non par le câblage du matériel vidéo, d’où la chute de performances. Le schéma suivant synthétise ce qui vient d’être exposé : Application Win32 Standard Application Win32 Direct3D Windows Manager / GDI API Direct 3D HEL Device Driver Interface Graphics Hardware 2. LES 2 CATEGORIES DE PROGICIELS D’APPLICATION CONDUISANT A LA CONSTITUTION D’UNE BASE DE DONNEES GRAPHIQUES EN CREATION D’IMAGES DE SYNTHESE 2.1. INTRODUCTION : SITUER LES OBJECTIFS DE CE COURS DANS LE CONTEXTE GENERAL DES APPLICATIONS INFOGRAPHIQUES Dans le 1er chapitre de ce cours, nous avons développé le concept général de Base de Données Graphiques mais d’une façon que nous qualifierons d’ « indifférenciée », c.à.d. qu’une grande partie des notions qui y ont été étudiées pourraient concerner aussi bien des images « naturelles » qui auraient été capturées par une caméra ou un scanner que les images de synthèse créées de toutes pièces par un progiciel d’application de type DAO / CAO ou par un progiciel de création d’images numériques en Rendu Réaliste 3D. La frontière entre ces 2 types d’images, les « naturelles capturées » ou les « images construites », reste de toutes façons assez perméable ne serait-ce que parce que, dans les 2 cas, c’est la base de données numériques qui permet l’affichage analogique d’une matrice de pixels ( ou son équivalent en cas d’impression « papier » ) qui va caractériser ces 2 types d’images en finalité. L’exemple vu dans ce 1er chapitre où un tracé vectoriel était superposé à un fond constitué d’une image de type « naturelle capturée », le tout – c.à.d. le fond + le tracé vectoriel - pouvant d’ailleurs être enregistré sous la forme fédérante d’un fichier « .bmp », montre d’ailleurs bien combien cette frontière est fragile. Il existe encore un exemple plus frappant dans le domaine des progiciels de fabrication d’images de synthèse en rendu réaliste ( de type « 3Dmax, Maya, … » ) : le progiciel « ImageModeler » se démarque en effet des autres logiciels par le fait qu’il reconstitue une image de synthèse d’un objet 3D à partir de plusieurs photographies de l’objet, prises sous différents angles ( il s’agit en fait d’un procédé dérivé de ce que l’on appelle la technique photogrammétrique, utilisée depuis fort longtemps pour la digitalisation de bâtiments, ouvrages d’art et sites archéologiques et où les procédés analogiques de restitution utilisés jusque dans les années 1980 sont aujourd’hui supplantés par des procédés infographiques ) : on voit le bénéfice qu’un tel procédé peut apporter pour la réalisation de films mettant en scène p.ex. des mammouths ou des hommes du néolithique : il suffit de photographier des éléphants ou des personnages contemporains, d’en former l’image de synthèse à l’aide de surfaces Nurbs puis, une fois ces modèles numériques acquis, de les « retravailler » en modifiant les morphologies digitales et en ajoutant numériquement des poils et des fourrures ( il existe d’ailleurs des plugs-in spécialisés pour ce faire ) pour obtenir, in fine, des images numérisées très réalistes de ces « reconstitutions ». Même dans un secteur industriel comme la Construction Automobile où l’on pourrait penser, en première analyse, que les images de synthèse et notamment celles associées à la conception de plans par DAO/CAO/CFAO ( Conception et Fabrication Assistées par Ordinateur ) prévalent sur les images naturelles capturées qui, à première vue, pourraient sembler anecdotiques dans ce milieu, ces images capturées ont en réalité une telle importance que RENAULT a développé une vaste application de photothèque numérique à usage industriel, baptisée « CHEFREN » pour laquelle cette entreprise a consenti de lourds investissements : cette photothèque industrielle, diffusée par Intranet dans les services de l’Entreprise, avec évidemment toutes les restrictions d’accès utiles au niveau du serveur, concerne un fonds roulant de 30.000 images en ligne, avec un renouvellement annuel de 100% : ces images naturelles capturées concernent aussi bien les photos confidentielles des prototypes que celles réalisées sur les bancs de test, que celles donnant le détail des pièces détachées, que celles concernant la vie de la Société ( images de chantiers, … ) … Il est alors significatif de constater que, dans la chaîne de constitution de cette photothèque dynamique chez RENAULT, coexistent des matériels d’acquisition d’images naturelles ( scanners, appareils photos numériques, caméras haute résolution ) et des stations informatiques de retouche d’images naturelles et de création d’images de synthèse : voilà donc un exemple typique où, dans un milieu industriel pourtant très orienté vers la production et où, à première vue, on penserait volontiers que la création de plans et d’images de synthèse importe bien plus que l’acquisition d’images naturelles, la frontière entre ces 2 catégories distinctes d’images devient évanescente. Bien qu’il soit ainsi patent qu’il n’existe plus aujourd’hui de véritable frontière entre « image naturelle capturée » et « image de synthèse », nous en établirons cependant une pour ce cours d’infographie, ne serait-ce que parce qu’il n’est pas possible, dans le temps qui vous est imparti, de couvrir tous les domaines de l’Infographie dont, plus généralement encore, la frontière avec le Multimédia devient de plus en plus fragile : l’exemple du package des API Microsoft DirectX dédicacées tant aux images de synthèse qu’aux sons et à la connectivité en réseau est un indicateur de première importance quant à l’évolution en ce domaine. Aborder le domaine de la capture des images naturelles supposerait en effet non seulement une incursion dans les technologies numériques de prises de vues, mais encore dans le domaine complexe du traitement de ces images numérisées, c.à.d. notamment l’étude des algorithmes de manipulation des images dans le domaine des amplitudes et des fréquences : déplacement d’une portion d’image, calcul et égalisation de l’histogramme d’une image, filtrage d’images, … c.à.d. les algorithmes mis en œuvre dans les progiciels dits de « Retouche d’Image », comme les très connus et réputés ADOBE PHOTOSHOP ou PAINT SHOP PRO ( www.jasc.com ) et dont le petit programme Kodak Imaging fourni en standard dans les accessoires de Windows peut vous servir d’introduction quant aux services que peuvent rendre ces progiciels de retouche. En particulier, aborder ce domaine nécessite aussi une étude circonstanciée des algorithmes de compression d’images : la définition d’une diapositive standard 24 x 36 est de 2000 x 3000 points ; en codage à 24 bits/point ( 16 millions de couleurs ) , le fichier brut occuperait 18 Mo et un film de 36 vues occuperait donc 0.63 Go. La transmission du fichier brut d’une seule diapositive par une ligne à 19.200 bits/s réclamerait 7500 secondes, soit un peu plus de 2 heures. La nécessité d’une compression du fichier s’impose donc, à la fois pour le stockage en mémoires et pour la transmission réseau, pour des images naturelles mais aussi pour les images de synthèse en rendu réaliste dont les tailles de fichiers sont assez comparables : même en limitant ce cours aux images de synthèse, l’étude de ces algorithmes de compression est donc incontournable ; 2.2. GENERALITES A PROPOS DES 2 CATEGORIES DE PROGICIELS D’APPLICATION CONDUISANT A LA CONSTITUTION D’UNE BASE DE DONNEES GRAPHIQUES EN CREATION D’IMAGES DE SYNTHESE Pour l’utilisateur, il existe, en fait et comme déjà évoqué précédemment, 2 façons très différentes de constituer une base de données graphiques pour constituer une image de synthèse : - La première procède par l’écriture d’un programme d’Application. De tels programmes à destination graphique se composent d’un noyau « classique » écrit dans un langage dit « de haut niveau », le « C » p.ex., et d’appels à une « librairie » graphique spécialisée offrant à l’utilisateur une collection de « routines » graphiques pré-encodées - La seconde consiste à utiliser un programme « tout fait », une « Boîte noire », offrant à l’utilisateur, de façon conviviale et interactive par le biais d’une interface graphique, un ensemble de fonctionnalités graphiques paramétrées standards lui permettant de réaliser un dessin de façon interactive même s’il ne possède aucune connaissance en programmation. Ces 2 catégories distinctes d’approche seront développées dans ce cours, après en avoir exposé les grandes lignes directrices dans ce 1er fascicule du cours consacré à l’Infographie. 2.3. INTRODUCTION GENERALE AU MODE « PROGRAMMATION » Le premier mode d’approche consiste donc, pour l’utilisateur et comme déjà évoqué en page précédente, à rédiger lui-même un programme dans un langage de type « C » par exemple et d’y faire appel à une bibliothèque tierce de routines graphiques. La compilation et l’édition de liens pour ce programme donnera lieu à la constitution d’un fichier en langage machine régulant, en exécution, l’affichage à l’écran. Cette première approche possible pourrait être qualifiée d’essentiellement « statique » en ce sens que telle démarche repose sur la constitution préliminaire du fichier avant tracé du dessin, sans même qu’une intervention interactive de l’utilisateur lors de la phase d’exécution d’un tel programme ne soit nécessaire. Ce serait p.ex. le cas du simple dessin d’une courbe à partir d’une équation. Le programme serait alors établi pour faire apparaître ce dessin sur un périphérique graphique : o d’abord par programmation en « C » du calcul numérique d’un grand nombre de points de cette courbe à partir de l’équation ( c’est la partie « classique » du programme, analogue dans ses objectifs à ceux de tous les programmes que vous avez déjà eu l’occasion de concevoir pour réaliser des calculs divers) o ensuite, en faisant appel à un ensemble de routines d’une librairie graphique, routines où se trouvent précodées de petites unités de programmes régissant la gestion du tracé graphique et réalisant ainsi le transfert de l’information vers le périphérique afin d’y dessiner, dans une fenêtre ouverte par ce programme sur l’écran et dont les dimensions sont à préciser comme arguments de la fonction d’ouverture de cette fenêtre ( l’une des routines mises en œuvre par appel dans le programme ), la couleur du fond étant également imposée par argument, une chaîne de petits segments de couleur précisée via argument, approchant la courbe « mathématique » lisse (discrétisation de la courbe en un grand nombre de petits segments ) Toutes les opérations codées par ce programme sont finalisées par le programme lui-même sans aucune intervention ultérieure nécessaire de l’utilisateur, sinon un simple ordre d’exécution de ce programme exécutable après compilation ( et édition de liens ). Cette carence d’interactivité est toutefois loin d’être une règle absolue pour ce type de programme : un exemple très simple d’interactivité serait que l’utilisateur soit invité, en cours d’exécution du programme précité, à préciser de façon interactive, via une instruction passée par la voie du clavier p.ex., l’épaisseur du trait ou la couleur des segments. Plus généralement, il est clair que la constitution d’un progiciel graphique interactif de type DAO / CAO 2D ou 3D s’opère par la voie d’une programmation de ce progiciel réalisée par les développeurs de la Société qui commercialise de tels outils et que, dans ce cas, qui dit interactivité doit supposer que le programme ainsi établi comportera de multiples possibilités d’enregistrer des actions en Input ( des pointer / cliquer de souris sur icônes p.ex. ) et d’y réagir dynamiquement. Comme le niveau d’interactivité reste toujours cependant un cas d’espèce, les routines graphiques des librairies commercialisées ( type OpenGL, DirectX, … ) offrent en général une large gamme de fonctions et procédures destinées à gérer de telles interactivités, outre les fonctionnalités de base de tracé proprement dit. Ces routines graphiques sont donc bien de petites unités de codage préétablies qui permettent à l’utilisateur de se dispenser de devoir réécrire les lignes de code afférentes à l’exécution d’actions graphiques « standard », aussi bien en Sortie ( p.ex. le tracé d’un segment ou d’un item alphanumérique dans une fenêtre à l’écran) qu’en Entrée ( p.ex. capter les coordonnées d’un point désigné sur écran par un curseur dont les déplacements sont commandés par glissements de souris, lorsqu’un Clic de Bouton Gauche de souris est opéré pour finaliser la désignation du point ). Nous avions déjà répertorié dans le 1er chapitre tout un ensemble de librairies graphiques (API ) comme OpenGL, DirectX, …, certaines étant même intégrées dans le package du progiciel graphique interactif, le plus souvent alors accompagnées d’un langage de haut niveau « propriétaire » et, en l’évoquant, nous avions indiqué que nous en dirions davantage à propos de ce qu’offre DesignCAD en ce domaine, étant entendu que ce progiciel sera celui avec lequel vous ferez vos premières armes. DesignCAD, outre sa fonction principale d’outil interactif DAO classique, met ainsi à la disposition de l’utilisateur une telle bibliothèque dont les routines sont appelables au sein de programmes rédigés en divers langages, comme le Visual Basic, le Visual C++, Delphi, … afin que ses utilisateurs puissent étendre les fonctionnalités offertes par l’outil interactif de base moyennant un effort complémentaire de programmation : c’est ainsi p.ex. qu’un utilisateur de bon niveau sachant programmer peut rédiger luimême de petites routines dites « macros » destinées à automatiser l’exécution de séquences d’instructions enchaînées. DesignCAD a aussi développé, en parallèle, son propre langage de programmation propriétaire, le BasicCAD, combinaison de fonctions issues d’un interpréteur Basic classique et de fonctions intrinsèques graphiques propres à ce logiciel graphique. BasicCAD offre l’avantage d’une relative simplicité dans la rédaction des programmes, ce qui en fait un outil intéressant pour un premier apprentissage de l’utilisation d’une librairie graphique, notamment parce que le vocabulaire de désignation des procédures est commun – moyennant traductions U.S. pour les utilisateurs de la version française de DesignCAD – à l’usage de l’interface graphique interactive DAO de DesignCAD et à l’usage des routines de la librairie graphique. Il ne faut cependant pas s’attendre à pouvoir utiliser BasicCaD pour réaliser des programmes infographiques hypersophistiqués, d’autres outils étant bien davantage à privilégier pour ce faire, comme les librairies graphiques DirectX ou OpenGL, devenues des « Standards » aujourd’hui et sur base desquelles les versions actuelles du progiciel DAO DesignCAD lui-même ont d’ailleurs été établies. Cette simplicité n’empêche nullement qu’il peut présenter une efficacité professionnelle certaine dès lors que l’application envisagée reste une simple extension du logiciel graphique interactif. Un programme rédigé en BasicCAD est consigné aux 2 pages suivantes à titre d’exemple. Il est destiné à faire afficher à l’écran un cube en représentation filaire, les arêtes étant de différentes couleurs, sans autres interventions de l’utilisateur que l’écriture préliminaire d’un fichier de valeurs numériques des coordonnées des sommets du cube sous la forme d’un fichier séquentiel, cette application étant conçue aussi comme un exercice de lecture de fichier externe. 'COURS D'INFOGRAPHIE - Prof.Dr.ir. Y.DURAND 'PROGRAMME N°1 - DESSIN 3D DES ARETES D'UN CUBE 'Conception Y.D. - 05/06/02 - Répertoire : C:\mes documents\3DCUBE.BSC ' ' ' OBJECTIF : ' Dessiner les arêtes d'un cube de côté 10 et de sommet arrière inférieur gauche = origine ' Les arêtes du plan (z=0) auront la couleur rouge ' Les arêtes du plan (z=10) auront la couleur bleue ' Les arêtes parallèles à 0z auront la couleur verte ' ' 'MODE D'UTILISATION : '1.Ecrire un fichier séquentiel (C:\mes documents\FICHNUM3.TXT) au moyen d'un éditeur ' de texte (Bloc-note,Wordpad,Word,...) de 10 lignes et 3 colonnes décrivant, ligne par ligne, ' les coordonnées x,y,z des sommets du cube : les 5 premières lignes correspondent aux 4 ' sommets de la face(z=0), la 5e ligne reprenant les coordonnées du 1er sommet ( en effet, ' la 4e arête du cube joint le 4e sommet au premier) ; de même pour les 5 lignes suivantes ' qui correspondent aux sommets de la face (z=10). ' Ce fichier séquentiel sera appelé et lu au sein du programme BasicCAD décrit ci-après. ' ' 2.En exécution : ' a. Ouvrir le programme graphique DESIGNCAD en mode 3D ' b. Dans son menu de commande, cliquer sur "outil" et dans le menu déroulant associé, ' choisir : "Exécuter Macro" ' PROGRAMME écrit en BasicCAD : dim x(10),y(10),z(10) 'Dimensionne les vecteurs x(i),y(i),z(i) [coordonnées des sommets] open "I",1,"c:\mes documents\FICHNUM3.TXT" 'Ouvre le fichier séquentiel FICHNUM3.TXT créé 'préalablement pour stocker les coordonnées des 'sommets.Puisque déjà créé, il sera lu ( "I" = 'Input ).Son accès dans l'arborescence est à 'définir ( p.ex. "c:\mes documents\FICHNUM3.TXT ). 'Il est référencé par un N°( p.ex.1 ) [ à noter que 'seuls 4 fichiers (1 à 4) peuvent être ouverts 'simultanément ]. for i = 1 to 10 input #1, x(i),y(i),z(i) 'boucle ( for...next ) 'instruction de lecture séquentielle du fichier 1, 'c.à.d. de gauche à droite et de haut en bas et 'stockage des valeurs dans les vecteurs x, y et z next i close 1 Voir Suite p. suivante … 'après lecture, le fichier est à refermer 'TRACE DES SEGMENTS ( couleur rouge) DU PLAN (z=0) '1° Définition de la couleur du trait (">customcolor" = commande Macro DESIGNCAD indiquant ' qu'une couleur est à imposer ; "<color [255,0,0]" précise les paramètres définissant ' la couleur, dans l'ordre des saturations RGB : "255" = saturation max de rouge, "0" = ' saturation min de vert( "G"=Green ) et "0"=saturation min de bleu). >customcolor { <color [255,0,0] } '2° Tracé des segments (">line" = commande Macro DESIGNCAD de tracé de segment ; ' "pointxyz [x(i),y(i),z(i)] précise les paramètres définissant le point origine ' du segment et "pointxyz [x(i+1),y(i+1),z(i+1)]" ceux du point extrémité). for i = 1 to 4 >line { <pointxyz [x(i),y(i),z(i)] <pointxyz [x(i+1),y(i+1),z(i+1)] } next i 'TRACE DES SEGMENTS (couleur bleue) DU PLAN (z=10) >customcolor { <color [0,0,255] } for i= 6 to 9 >line { <pointxyz [x(i),y(i),z(i)] <pointxyz [x(i+1),y(i+1),z(i+1)] } next i 'TRACE DES SEGMENTS (couleur verte) PARALLELES A OZ >customcolor { <color [0,255,0] } for i = 1 to 4 >line { <pointxyz [x(i),y(i),z(i)] <pointxyz [x(i+5),y(i+5),z(i+5)] } next I end Le résultat graphique de l’exécution de ce programme en BasicCAD est le suivant : De façon plus générale, de telles librairies graphiques mettent à la disposition des développeurs des groupes d’outils prédéfinis et paramétrés qui ont pour objets principaux : - les tracés graphiques de base ( tracés de points, de segments, de polylines, de polygones, de courbes et d’arcs, de surfaces comme des plans, de volumes comme des cônes, des cylindres, …, de hachures, de lettrages, … c.à.d. des primitives, qu’elles soient curvilignes, surfaciques ou volumiques) - la gestion des attributs de ces primitives ( type et épaisseur du trait, couleur, forme et dimension du point, nombre de polygones discrétisant une surface, … ) - les transformations des primitives ou de groupes de primitives ( copies, rotations, translations, effacements, opérations de mise à l’échelle, … ) c.à.d. toutes les opérations groupées sous l’appellation « Edition des primitives » - la gestion des structures hiérarchiques ( combinaisons booléennes de primitives ou de groupes de primitives pour former des objets complexes ) - les opérations de visualisation : fenêtrages ( windows ) et clôtures ( viewports ), découpages ( clipping ), projections ( axonométries, perspectives, projections de Monge ) - le rendu réaliste en 3D ( élimination des parties cachées, ombrages, textures, matières, éclairages ) - la gestion des entrées / sorties depuis et vers les différents périphériques ( capter un Clic de souris et la localisation correspondante du curseur sur l’écran graphique, identifier une primitive ou un groupe de primitives en les désignant par le curseur et en validant cette désignation par un clic de bouton de souris, … ) - la fourniture des informations sur les configurations « Hardware » ( résolutions d’écran, nombre de couleurs affichables, … ) - la gestion des erreurs - … Toutes ces routines sont sous-tendues par une structure algorithmique complexe, consistant en applications de concepts de géométrie analytique et infinitésimale. Cette complexité impose qu’un tome spécial ultérieur du cours y soit spécifiquement dédicacé : ce tome à caractère « mathématique » développera les algorithmes relatifs : - aux tracés de primitives ( comment organiser les pixels pour représenter des objets géométriques ) - aux transformations ( algorithmes d’édition ) - aux projections - au fenêtrage ( windows, viewports, clipping ) - au rendu réaliste 3D ( surfaces Nurbs, vu et caché, ombrage, éclairage, textures, …) Le problème de base afférent à ces librairies graphiques reste toutefois leur portabilité, c.à.d. leur indépendance vis-à-vis tant du langage utilisé que du Hardware. Transposer facilement un programme d’une machine à l’autre ou d’un langage à un autre devrait être la règle : il est cependant évident, en comparant p.ex. les modes de programmation de DesignCAD et d’AutoCAD, que la portabilité réciproque de l’un à l’autre ne semble pas nécessairement immédiate, en matière de programmation en tout cas, mais il s’agit de codages « propriétaires » dont l’objectif n’est pas la portabilité. Dans le monde UNIX, ce souci de portabilité s’est fait jour dès les années 80 : des Normes ont ainsi été mises sur pied dans cet objectif précis : GKS 2D ( Graphical Kernel System ) puis GKS 3D d’abord, adoptées par l’American National Standards ( ANSI 85b ) puis par l’International Standards Organisation ( ISO ), PHIGS ( Programmer’s Hierarchical Interactive Graphics System ) et PHIGS + ensuite et actuellement considérés comme les Standards prédominants (ANSI 88 ) parce que notamment utilisés dans l’industrie infographique des Images de Synthèse et de leur Animation . PEX doit aussi être cité pour les images « Bitmap ». OpenGL, bien que de type « propriétaire », est actuellement un standard de fait assurant une très grande portabilité, aussi bien dans le monde UNIX que dans le monde Microsoft Windows. Pour un Bureau d’Etudes qui utilise un progiciel D.A.O. comme AutoCAD ou DesignCAD et dont l’objectif n’est pas de concevoir, commercialiser ou transmettre du logiciel, il reste de toutes façons très efficace de savoir programmer avec l’outil offert par le Concepteur du progiciel interactif D.A.O. utilisé, même s’il est spécifique, parce que cela constitue une bonne garantie de fonctionnement, sans problèmes de portabilité interne, pour les besoins propres du Bureau d’Etudes. 2.4. INTRODUCTION GENERALE AU MODE « DESSIN INTERACTIF » La seconde façon d’établir la base de données repose sur l’interactivité : en tel cas, cette base de donnée est évolutive, se construit et se modifie au fur et à mesure de la progression du « dialogue » instauré entre utilisateur et PC au cours duquel les opérations d’Entrée / Sortie sont signifiées et se traduisent par des modifications lisibles sur un document conventionnel affiché à l’écran, dit « Fenêtre graphique », organisé et structuré de façon à assurer l’ergonomie optimum du dialogue. En fait, ce type de fenêtre graphique vous est familier, vous qui êtes de la génération d’Etudiantes et Etudiants qui ont n’ont utilisé des PC que fonctionnant sous Système d’Exploitation « Microsoft Windows » et dont le principe de base est justement d’offrir à l’utilisateur la possibilité de dialoguer avec le PC via fenêtres graphiques où des Icônes, des Menus déroulants, des Boîtes de dialogue sont les interfaces de ce dialogue. Vous n’aurez donc aucune difficulté à vous adapter aux fenêtres graphiques des logiciels D.A.O. de tous les Constructeurs dont les progiciels ont été conçus en symbiose avec ce concept d’interface graphique interactive. Le logiciel D.A.O. que vous serez amené à utiliser au laboratoire, DesignCAD de Upperspace Corporation, repose sur ce principe. Vous reconnaîtrez immédiatement dans la fenêtre graphique qui s’affiche dès le lancement de ce programme une structure d’affichage où coexistent des barres d’outils où sont rassemblées des Icônes et des commandes alphanumériques, comme pour l’interface « Windows » : L’ECRAN GRAPHIQUE « DesignCAD » Comme pour l’interface graphique « Windows », l’utilisateur pointera et cliquera ( Bouton Gauche de Souris = « BGS » ) une commande alphanumérique ou une icône sur cet écran graphique et, en réponse, l’ordinateur fera apparaître p.ex. un menu déroulant dans lequel, en poursuite du dialogue, l’utilisateur pointera une commande particulière qui provoquera l’exécution de cette commande : POINTER / CLIQUER SUR LA COMMANDE « DESSIN » DANS LE MENU DEROULANT, POINTER / CLIQUER SUR LA COMMANDE « TEXTE » Cette action va engager la poursuite du dialogue comme suit : - l’ordinateur va modifier la seconde ( à partir du haut) barre d’outils et y substituer une Boîte de dialogue où l’utilisateur est invité à introduire le texte qu’il souhaite insérer dans le dessin proprement dit . Accessoirement, cette Boîte de dialogue contient des Boutons dont l’enfoncement donne lieu à l’affichage d’autres Boîtes de dialogue permettent p.ex. de définir la taille et le style du texte, comme montré dans la copie d’écran : TEXTE INTRODUIT, VIA CLAVIER, DANS CETTE FENETRE UN CLIC SUR LE BOUTON « T » PROVOQUE L’AFFICHAGE D’UNE BOITE DE DIALOGUE - l’ordinateur va ensuite faire apparaître sur l’écran un rectangle déplaçable par glissement de souris ( rectangle d’encerclement du texte à insérer ) et se placer en attente d’un Clic de Bouton Gauche de Souris qui ancrera le texte à la position souhaitée par l’utilisateur : 3. LE MODE DE DESSIN DAO INTERACTIF : INTRODUCTION DETAILLEE 3.1. L’INTERET DU MODE « DESSIN INTERACTIF » Comment définir l’intérêt de l’usage d’un tel mode de dialogue via écran graphique ? Ce qui apparaît très clairement déjà à la lecture du petit programme consigné quelques pages auparavant à propos du tracé d’un cube est qu’il nécessite des connaissances et un savoir-faire de base en programmation ; si une exploitation plus poussée de ce mode d’approche du tracé graphique devait être entreprise, il est clair que ces connaissances et ce savoir-faire devraient s’étendre aussi à l’algorithmique propre à l’Infographie : un autre tome de ce cours sera d’ailleurs consacré à ces concepts algorithmiques et aux Mathématiques qui les sous-tendent . Pour un Bureau d’Etudes dont l’objectif est de produire rapidement des plans et où les dessinateurs ne sont pas nécessairement rompus à la programmation ni à l’algorithmique infographique, une telle approche ne saurait être envisagée. Par ailleurs, il est clair aussi que ce mode d’approche « par programmation » n’est ni très commode, ni très convivial et réclame de toutes façons un investissement important en temps de développement pour réaliser le moindre tracé, même pour un spécialiste. L’idée s’est donc fait jour, très rapidement d’ailleurs dès après le début de la commercialisation de masse des ordinateurs, c.à..d. vers 1975, de substituer à telle approche très spécialisée « par programmation », une approche ergonomique et interactive basée sur le principe de l’interface graphique mettant à disposition de l’utilisateur des menus prédéfinis et automatiquement dessinés sur l’écran où les opérations graphiques standards (p.ex. le tracé d’un segment entre 2 points) seraient symbolisées de façon simple par de courts textes alphanumériques ( les premiers progiciels graphiques DAO / CAO fonctionnaient en général ainsi, que ce soit sur de « gros ordinateurs » ou sur les premiers PC fonctionnant sous DOS exclusivement où l’utilisateur était invité à « pointer » dans tel menu alphanumérique en s’y déplaçant au moyen des flèches du clavier puis en appuyant sur la touche « ENTER » une fois le curseur en place sur la commande adéquate ) ou, très rapidement ensuite, par des icônes symbolisant graphiquement ces commandes. La sélection via « Flèches » du clavier devait, elle aussi, en raison de son défaut de commodité, être améliorée en développant des outils particuliers de pointage ( dits « Input Devices » en anglais ) . Il en existe de 2 catégories, les analogiques ( Type «Souris» ) et les digitaux ( Type «Light Pen» ). La plupart de ces outils travaillent dans le plan mais certains outils très spécialisés travaillent même dans l’espace 3D et sont susceptibles de fournir une information en X , Y, Z quant à leur positionnement dans cet espace 3D.. Au § suivant, nous examinerons 2 des outils intensivement utilisés en Informatique Graphique : les Souris et les Tablettes « à digitaliser » ( dites aussi « Tables à digitaliser » ou «Digitaliseurs » ). 3.2. LES OUTILS CLASSIQUES DE POINTAGE EN MODE « DESSIN INTERACTIF » : TABLETTES ET SOURIS Divers dispositifs destinés à faciliter la sélection d’une commande alphanumérique ou d’une icône en évitant le recours aux flèches du clavier ont donc rapidement été développés, notamment les « Digitaliseurs » appelés aussi « Tablettes graphiques »,c.à.d. des tablettes planes et lisses, munies en interne d’un système de reconnaissance du positionnement d’un dispositif externe de pointage mobile glissant sur cette surface lisse, de type « souris » ou « stylet ». La différence fondamentale avec la souris classique qui équipe aujourd’hui tous les PC est que, dans le cas d’une tablette à digitaliser, celle-ci une fois configurée par software pour y établir les correspondances utiles ( par pointés sur des points de référence choisis par l’utilisateur sur la tablette ) entre le dessin tracé sur la zone réservée utile au tracé graphique sur digitaliseur et le dessin répercuté à l’écran, les coordonnées d’un point de cette tablette resteront toujours les mêmes, que ce point soit pointé une fois ou plusieurs fois de suite après avoir déplacé ( et notamment soulevé) le dispositif de pointage : on pourrait donc parler à cet égard d’un dispositif reconnaissant les coordonnées « absolues » des points de la tablette. Pour la souris classique a contrario, l’expérience de son usage avec l’interface graphique « Microsoft Windows » vous a certainement montré que si vous soulevez ce dispositif de pointage du tapis de souris, le curseur « écran » s’immobilise : dès remise en contact avec le tapis, même à un tout autre endroit du tapis, puis glissement de la souris, le curseur reprend sa course sur l’écran, mais à partir exactement de l’emplacement qu’il occupait lorsque la souris a été soulevée puis déplacée pour être à nouveau positionnée ailleurs sur le tapis. Pour préciser davantage les idées à propos de la souris, il faut aussi remarquer qu’un déplacement du curseur de 10 cm sur l’écran est impulsé par un glissement de souris de quelques centimètres seulement sur le tapis à partir de la position primitive du curseur et ce, quel que soit l’endroit où la souris est remise en contact avec le tapis puis soumise à glissement. On peut aussi observer « expérimentalement » que l’amplitude du déplacement du curseur sur écran, p.ex. les 10 cm, sera obtenue à partir des mêmes amplitudes de déplacement de la souris, quelle que soit l’orientation de la trajectoire de la souris. Windows vous permet d’ailleurs d’ajuster la corrélation entre amplitude du déplacement de la souris sur le tapis et amplitude du déplacement du curseur sur l’écran par la Procédure « Windows » suivante : Démarrer / Paramètres / Panneau de Configuration / Ouvrir l’Icône « Souris » / Sélectionner le volet « Mouvement » dans la Boîte de dialogue « Propriétés de Souris » / Agir sur le curseur d’ajustement de « Vitesse du Pointeur. Vous constaterez que si la vitesse est réglée sur « lente », il est nécessaire de faire parcourir un long trajet à la souris sur le tapis pour n’obtenir qu’un déplacement très faible du curseur sur écran et réciproquement si la vitesse est réglée sur « Rapide ». En synthèse et en supposant, quod non, que le dispositif « souris » soit équipé d’une loupe avec pointeur, tel dispositif pourrait donc être utilisé pour opérer une mesure de longueur via mesure « software » sur écran et application d’un facteur correctif de proportionnalité, mais en aucun cas pour définir la position « absolue » d’un point sur le tapis. Par opposition, sur le digitaliseur une fois configuré, chaque fois que le dispositif de pointage ( le stylet p.ex. ) est positionné à un endroit précis de la tablette, le curseur « écran » se positionnera toujours au même endroit sur cet écran, ce qui n’est donc pas le cas pour la souris . Par contre, comme pour la souris, à un déplacement donné du stylet correspondra toujours un déplacement du curseur « écran » toujours identique à lui-même sur cet écran. Cet état de fait trouve son explication dans les partis technologiques mis en œuvre dans ces 2 types de dispositifs : ils sont fondamentalement très différents : Les Tables à digitaliser ( invention en 1964 par les ingénieurs M.R. DAVIS et T.D. EILLIS à la RAND CORPORATION ( U.S. ) ) contiennent, sous leur revêtement plan et lisse, un réseau dense de fils fins ( p.ex. 1024 fils en X et 1024 fils en Y pour une surface de l’ordre de 25 x 25 cm, ce qui confère au pointé une précision théorique de l’ordre de 2.5 dixième de millimètres ). Le Coût d’une table à digitaliser dépend d’ailleurs non seulement de ses dimensions utiles, mais encore de son niveau de précision. Chacun de ces fils transporte un signal propre codé digitalement que le dispositif mobile de pointage est susceptible d’appréhender : le stylet, p.ex., contient en effet un capteur et un amplificateur de ces signaux, distincts de fil à fil, signaux amplifiés transmis via câble coaxial à un dispositif logique de décodage qui transmet l’information au PC qui la traite pour la transformer, in fine, en coordonnées « écran ». Donc, chacun des points de la tablette est caractérisé par 2 signaux propres, l’un en X, l’autre en Y et ces signaux sont distincts de ceux émis en un point voisin. D’autres types de dispositifs existent pour les tablettes, mais qui tous sont basés sur le même principe général de transmettre 2 informations ( en X et en Y ) distinctes selon le point considéré, comme les tablettes fonctionnant par détection du potentiel en un point, une feuille conductrice incluse sous le plan de travail étant soumise, à intervalles réguliers, à l’application d’un champ de tension selon X puis selon Y. Il est par ailleurs d’usage de recouvrir cette tablette d’une feuille où le menu est imprimé, ce qui présente 2 avantages : d’abord libérer la surface d’écran de ce menu, ensuite de permettre à l’utilisateur, si la tablette est suffisamment grande, d’y faire apparaître, le cas échéant, toutes les icônes symbolisant graphiquement les commandes ou tous les textes courts décrivant ces commandes en les organisant à son gré ( il faut savoir que DesignCAD en version 3000, met en jeu un ordre de 260 icônes : il serait impensable de les faire toutes apparaître sur écran, même sur un 21’’ ). L’aptitude du dispositif à reconnaître les coordonnées « absolues » d’un point sur la surface de tablette permet en effet, par configuration de la tablette, de reconnaître aussi un pointé dans une petite zone carrée où se trouve in concreto une case du menu puis d’y associer le contenu signifiant, c.à.d. la commande symbolisée pat l’icône ou le court texte littéral qui s’y trouve consigné. En effet, ce système est toujours en cours aujourd’hui, notamment parce qu’il permet, concurremment au pointé sur les cases du menu, de pointer aussi, en zone « utile/ dessin » sur un document graphique existant, p.ex. une carte topographique « papier » pour y repérer des coordonnées de points : le dispositif mobile de pointage est ainsi souvent muni d’une loupe contenant un repère cruciforme autorisant des pointés avec une précision de quelques dixièmes de mm . Il existe des tablettes graphiques allant du format « A5 » ( 15 x 21 cm ) au format « A0 » (84 x 119 cm) , ces dernières étant particulièrement utilisées en Cartographie. Ce type de matériel reste aussi très utilisé en Bureaux industriels de dessin, en raison de la possibilité déjà évoquée d’y disposer un grand nombre d’icônes organisées et structurées selon les souhaits du dessinateur. MENU Pointeur avec loupe Arrondir Arc Bord 3 Modifier Parallèle Longueur Points Déplacer Parallèle Point Distance Joindre Cercle Extrémités 1 Effacer Tout Cercle Dernier Rafraîchir 2 Boîte Percer Zone utile Sphère Quitter Digitaliseur Hemisphère Refaire Cylindre Annuler Détail agrandi du Menu Cône Les souris ( invention en 1965 par le Prof. D. ENGLEBART du STANDFORD INSTITUTE ( U.S.) et popularisée par les souris équipant les ordinateurs APPLE de type LISA ou MACINTOSH à partir de 1983 puis à partir de 1987 sur les PC IBM de type « PS/2 ), comme vous pouvez le constater si vous en opérez un démontage de plaque inférieure entourant la boule en contact avec le tapis, contiennent en général 2 arbres en rotation, entraînés dans cette rotation par frottement de la bille en caoutchouc, les axes de ces 2 arbres étant disposés orthogonalement ; une roulette disposée dans l’axe de la bissectrice de l’angle formé par les 2 arbres précités assure la légère force d’appui nécessaire pour assurer un frottement suffisant pour l’entraînement des 2 arbres par la bille, elle même mise en rotation par frottement sur le tapis pour tout mouvement de glissement de cette souris. Chacun de ces 2 arbres commande un capteur de rotation susceptible de développer une impulsion électrique pour chaque micro-incrément de rotation : l’amplitude des rotations est donc mesurée par ces capteurs via le nombre d’impulsions ; ces capteurs sont reliés à un circuit électronique qui transmet l’information au PC. D’aucune façon donc, un tel dispositif ne saurait, comme une table à digitaliser, fournir une information relative à la position de la souris sur un plan : tout ce que la souris est susceptible de fournir est l’amplitude d’un mouvement de glissement opéré entre un point quelconque et un autre point quelconque sur ce plan. 1. 2. 3. 4. 5. Capteur de rotation Arbre en rotation Bille caoutchouc Roue passive d'appui Circuit électronique CONSTITUTION SCHEMATIQUE INTERNE D'UNE SOURIS 3.3. LE MODELE LOGIQUE D’UN ENSEMBLE DAO INTERACTIF : LES RETROACTIONS Comme les copies d’écrans graphiques « DesignCAD » et les quelques premières explications à leur propos l’ont montré, l’un des principes essentiels présidant à l’exploitation de tels écrans, où les utilisateurs sont amenés à définir des actions par le biais d’opérations « pointer / Cliquer ( B.G.S. ) » sur les icônes ou textes des commandes, est le principe de Rétroaction ( « Feedback » en anglais ). Des modifications ponctuelles mais significatives sur l’écran graphique y attestent en effet que les actions engagées par l’utilisateur sont correctement enregistrées par le Système : tel est le cas lorsqu’un « Pointer / Cliquer ( B.G.S. ) » sur une icône se traduit par un message graphique du système, soit l’ « enfoncement » de cette icône, bien visible pour cet utilisateur. De tels signaux graphiques « en retour » montrent à l’utilisateur que, non seulement son action a été correctement enregistrée, mais qu’en outre, il peut poursuivre l’action au-delà. Ainsi, si l’action entreprise concerne le dessin d’un segment entre 2 points à poser librement sur le plan de travail, l’utilisateur opérera d’abord un « Pointer / Cliquer ( B.G.S. ) » sur l’icône symbolisant la commande de tracé d’une polyline dans la Boîte à Outils Générale. La rétroaction s’étagera dans ce cas en 3 volets : o d’une part, l’icône va s’enfoncer ; o d’autre part, le curseur, de « Flèche » qu’il est en « standard », va changer de forme et se transformer en une « Croix » ; o enfin, un court texte d’aide rappelant la signification de l’icône cliquée s’inscrit dans la « Barre d’Etat ». Ces 3 Rétroactions successives vont signifier, dans l’ordre, que la commande a bien été enregistrée, d’abord ; que l’utilisateur est invité, ensuite, à poser le 1er point d’extrémité du segment à l’emplacement qu’il souhaite sur le plan de travail. Détail de l’enfoncement de l’icône : Détail du texte de Barre d’Etat : Dès ce point posé par un Clic ( B.G.S. ), un nouveau « message » de Rétroaction du Système va être envoyé à l’écran sous forme graphique : un « Segment élastique » va en effet apparaître, ancré à l’une de ses extrémités sur le 1er point posé et s’étirant à partir de cette 1ère extrémité, cet étirage étant conduit par l’autre extrémité où apparaît à nouveau le curseur sous la forme d’une croix, croix dont les déplacements sur le plan de travail sont régulés par glissements de la souris : ce segment élastique et cette croix sont les 2 messages de Rétroaction indiquant à l’utilisateur qu’il est invité à poursuivre l’action dès après avoir posé le 1er point. Le tracé du segment sera finalisé par un Clic ( B.G.S. )puis un appui sur la touche « ENTER » du clavier dès que le point souhaité par l’utilisateur est atteint sur le plan de travail par le curseur « Croix » ; la Rétroaction va se traduire, cette fois, en 5 volets : dès après le Clic ( B.G.S. ) ancrant la 2ème extrémité, le segment se trace définitivement, les 2 croix d’extrémités disparaissent et le curseur réapparaît sous sa forme standard « Flèche » , l’icône revient à son état inerte d’origine et le texte de barre d’Etat disparaît : Détail du retour de l’icône à son état inerte : Détail du texte de Barre d’Etat : le texte décrivant la commande de tracé a disparu A l’évidence, de telles rétroactions sont à intégrer dans la structure du modèle logique régissant le fonctionnement d’un Système informatique interactif DAO. Sans ces Rétroactions, le modèle se réduirait au schéma simplifié suivant : TRAITEMENT des SORTIES HARDWARE de SORTIE BASE de DONNEES TRAITEMENT des ENTREES HARDWARE d' ENTREE Selon tel dispositif simplifié, caractérisé par une totale carence de Rétroactions, toute action d’Entrée de l’utilisateur provoquerait, sans contrôle ni retour possible, une modification de la Base de Données, modification qui, elle-même, se traduirait par une incontournable modification de l’affichage, en Sortie. Un tel modèle logique ne peut se concevoir en application technologique que si, par destination, les actions d’Entrée doivent être simplifiées au maximum et si, en outre, la réponse d’affichage doit être la plus rapide possible : ce type de modèle trouve ses applications dans les jeux vidéos d’action « en temps réel » ou dans les Simulateurs ( progiciels de type « Flight Simulator » ) embarqués sur consoles de jeux ( type « PlayStation PS2 » de SONY ) ou sur PC. En tels cas en effet, le périphérique d’Entrée se réduit le plus souvent à du matériel hautement dédicacé essentiellement conçu pour reproduire le matériel qui, dans la réalité, conduit l’action . Les plus significatifs à cet égard sont les « volants » ( Microsoft SideWinder Force Feedback Weel, Thrustmaster Force GT Racing Wheel, Logitech Momo Force, …) , les « Joysticks » ( Microsoft Side winder Force Feedback 2, Thrustmaster Top Gun Afterburner Thrustmaster HOTAS Cougar, …) pouvant aller jusqu’à la reproduction exacte d’un manche à balai d’avion de combat F16 , les « Joypads » ( Thrustmaster Firestorm Dual Power Gamepad, Logitech Wingman Rumblepad, … ). En matière de simplification des commandes exécutées par l’opérateur sur ce type de périphérique, il est d’ailleurs significatif de relever les recherches menées par les constructeurs pour simplifier encore ces commandes : Microsoft, p.ex., a récemment développé le « SideWinder Game Voice » qui transmet des commandes vocales ; les armes de poing « digitales » développées pour les simulations de combats sont un autre exemple d’extrême simplicité en « Hardware d’Entrée ». Le contexte de la conception D.A.O. / C.A.O. est évidemment tout différent dans ses objectifs : il y est d’abord impossible de concevoir un système où les opérations d’Entrée pourraient être réduites à de stricts minima. En effet et en premier lieu, ces opérations ressortissent essentiellement au prototypage, ce qui exige, par essence-même, l’organisation de cycles « Réflexion / Action / Contrôle de l’Action / Eventuelle correction de l’Action » : ce 1er critère impose déjà de la sophistication dans le dispositif d’Entrée. En second lieu, tel prototypage implique la mise en œuvre de procédures multiples de modélisation géométrique . Or, ces procédures s’inscrivent de façon incontournable dans une arborescence complexe de Fonctions d’Edition notamment : le Tome II de ce cours, consacré aux procédures d’Edition 2D, vous montrera ce niveau de complexité. Donc, le dessinateur / concepteur se trouve sans cesse face à des choix multiples et, plus particulièrement encore, à des enchaînements de choix qui exigent à la fois des temps de réflexion, l’organisation de procédures de contrôles et la possibilité de retours en arrière aisés. Le Modèle Logique d’un Système D.A.O. / C.A.O. se doit, en conséquence, d’être adapté à ces exigences, en instaurant une stratégie de Rétroactions. En tels cas, cette stratégie se conçoit généralement en conformité avec la structure logique suivante : HARDWARE de TRAITEMENT SORTIE des SORTIES 3 BASE HARDWARE d' de TRAITEMENT DONNEES de ENTREE SELECTION 2 1 TRAITEMENT INTERPRETATION GESTIONNAIRE des des du HARDWARE ENTREES COMMANDES d'ENTREE RETROACTIONS : 1. "CURSEUR" / 2. "COMMANDE" / 3. "SELECTION" Ces dispositifs de Rétroaction concernent ainsi, dans un Modèle logique de Système D.A.O., depuis l’Amont ( l’Entrée ) jusqu’à l’Aval ( la Sortie ) : 1. La Rétroaction la plus « immédiate » en suite de toute action au dispositif Hardware d’Entrée : elle concerne la « Traçabilité » sur l’affichage de l’Input de positionnement et déplacement du dispositif visant au guidage du Curseur ( Glissement de Souris sur Tapis, déplacement de Stylet sur Tablette à digitaliser, appui sur une des Touches « Flèches » du Clavier alphanumérique ) : 2. La Rétroaction suivante est relative à l’Interprétation des Commandes : - si l’utilisateur pointe et clique sur une Icône de Menu, cette Icône va s’enfoncer, manifestant ainsi, en retour, que la commande symbolisée par cette Icône est correctement reçue : Icône « Tracé d’un Cercle par Centre et Rayon » enfoncée suite à un Pointer / Cliquer ( B.G.S. ) par l’utilisateur sur cette Icône - Si l’utilisateur commet une erreur dans une commande, p.ex. , en 3D, s’il fait appel à une commande de constitution d’un plan défini par les 4 sommets d’un quadrilatère sans avoir préalablement et, comme il se doit, vérifié que ces 4 points sont coplanaires, un Message d’Erreur lui parvient en retour : - Si l’exécution de la commande pointée nécessite un choix complémentaire, ces choix apparaissent automatiquement sous la forme d’un Menu où ce choix sera à opérer : Menu apparaissant en suite d’un Pointer / Cliquer sur la Commande « Option » de la Barre de Menu des Commandes 3. Un certain nombre de Commandes ne peuvent s’effectuer que si l’objet concernépar cette Commande a été préalablement sélectionné : il en est ainsi de la plupart des Commandes d’Edition ( Effacer, Copier, Tourner, … ). Il est évidemment fondamental que l’utilisateur puisse se rendre compte, à l’écran, que la sélection de l’objet est bien effective dès après que cet utilisateur a procédé à telle sélection et ce, avant d’entreprendre sur l’objet ainsi sélectionné une quelconque opération d’Edition. Dans le progiciel « DesignCAD », la sélection la plus élémentaire consiste à Pointer / Cliquer ( B.G.S. ) sur l’objet à sélectionner : la Rétroaction, permettant de constater que la sélection est bien effective est relative d’abord à un changement automatique de couleur de l’entité ainsi sélectionnée ( virage à la couleur « Magenta », communément appelée dans ce cours le « Violet » ) puis, simultanément, à l’apparition, au voisinage immédiat de l’entité, d’un gros point circulaire bleu entouré d’un plus grand cercle bleu, rappelant l’emplacement où le Pointer / Cliquer a été opéré en ce voisinage immédiat de l’entité pour la sélectionner : DETAIL : Dans les Boîtes de dialogue et comme dans le traitement de texte « Microsoft Word », il s’impose souvent de sélectionner du texte : quand vous devez y sélectionner quelques lettres ou quelques mots, vous Pointez / Cliquez au droit de la 1ère lettre puis, tout en maintenant le B.G.S. enfoncé, vous déplacez un curseur ( « | » ) le long du texte à sélectionner : la Rétroaction consiste ici à faire progresser le long du texte et selon l’avance du curseur un rectangle bleu entourant le texte sélectionné où ce texte apparaît en sur-brillance : Cet exemple de Rétroaction est particulièrement intéressant pour faire observer que les opérations de rétroaction doivent généralement respecter un critère de vitesse dans l’affichage de l’information transmise à l’utilisateur : lorsque l’utilisateur sélectionne du texte, il déplace en effet le plus souvent le curseur à grande vitesse le long du texte à sélectionner et il est nécessaire qu’il soit informé « en temps réel » de la progression de cette sélection. C’est la raison pour laquelle l’information est transmise via cette inversion d’intensité des pixels sur l’écran : les pixels du fond primitivement blanc deviennent foncés et, inversement, les pixels du lettrage, de noirs qu’ils étaient, deviennent blancs : les dispositifs d’affichage « écran », notamment pour les C.R.T. ( Cathodic Ray Tubes, le type le plus courant des écrans PC ) permettent 1/0); en effet d’inverser à grande vitesse l’intensité de chaque pixel ( 0 / 1 le choix de ce type de Feedback résulte donc, en partie, de telle aptitude à la grande vitesse, ce choix étant aussi opéré en raison de l’ergonomie du signal délivré, autre critère important pour les choix constructifs des dispositifs dde conception des « écrans graphiques D.A.O. ». Ce qui doit aussi être remarqué à propos des mécanismes de Rétroaction est leur place dans le Modèle logique : si vous examinez ce modèle, vous constaterez que ces Rétroactions n’ont pas pour effet de modifier la Base de Données. Telle indépendance peut être facilement vérifiée lors de l’utilisation du progiciel DesignCAD, comme elle pourrait d’ailleurs tout aussi bien être vérifiée pour d’autres progiciels D.A.O., aussi bien sous Windows que sous UNIX : supposons en effet qu’au cours d’une session de travail où un fichier graphique a été ouvert et dénommé « DESSIN 1.dc », une sélection soit opérée pour une figure, un polygone p.ex. en vue de la transmettre, par Buffer « Copier / Coller » ( exactement comme vous avez coutume de le faire lorsque vous transférez une partie de texte d’un fichier à l’autre en utilisant le traitement de texte « Microsoft Word » ) à un autre fichier de dessin dénommé « DESSIN 2.dc ». Lors de la sélection, le polygone change de couleur pour virer au violet, couleur caractéristique de la sélection : une fois le transfert opéré dans le fichier « DESSIN 2.dc », on pourrait s’attendre, si la Base de Données avait été modifiée pour y faire figurer le polygone avec, comme « Attribut », cette couleur « violet », à ce que le polygone ainsi copié affiche encore cette couleur « violet », ce qui n’est pas du tout le cas : vous constaterez que la couleur de ce polygone copié est restée la même que celle du polygone original avant sa sélection . Pour rendre l’opération encore plus parlante, essayez de telles copies après avoir modifié la couleur du polygone d’origine dans le fichier « DESSIN 1.dc » AVANT sélection : ces changements de couleur seront réalisés en utilisant ( cf. fascicules 2 et 3 ) une fonction d’Edition qui, elle et contrairement à l’opération de sélection, va bien modifier la Base de données où figure la couleur de l’entité sous la forme d’un « Attribut » de l’entité géométrique. 3.4. LES LIENS ENTRE PROGICIELS DAO INTERACTIFS ET LES BIBLIOTHEQUES GRAPHIQUES DE TYPE PHIGS, OpenGL, … Tout ce qui a été exposé précédemment ne peut conduire qu’à la conclusion que, pour mettre au point un progiciel interactif DAO, il importe d’abord de le programmer et que cette programmation doit faire usage de l’une des bibliothèques graphiques existantes, de type PHIGS, OpenGl, …. Il a d’ailleurs été montré que DesignCAD faisait notamment usage d’OpenGL et Upperspace, son concepteur, annonce d’ailleurs explicitement dans sa documentation en ligne que, pour la version 3000, les aptitudes au Rendu réaliste en temps réel, c.à.d. la possibilité de déplacer rapidement sur l’écran un objet ombré, sans qu’il soit nécessaire d’attendre, pour chaque nouvelle position occupée par l’objet, quelques secondes de calcul pour rétablir l’ombrage comme c’était le cas des versions antérieures, reposent sur l’utilisation toute récente de la bibliothèque graphique OpenGL : Il est donc tout à fait naturel que la structure logique générale des progiciels DAO s’aligne sur celle des bibliothèques graphiques : 1°. Ainsi, pour ce qui concerne les routines « dessin géométrique » proprement dites en 2D, une même structure hiérarchique se retrouve aussi bien dans les bibliothèques que dans les progiciels DAO : - au niveau le plus bas, le tracé des primitives de base : - line : le segment élémentaire joignant 2 points - polyline : ensemble ouvert ou fermé de segments jointifs en leurs extrémités - polygones réguliers et rectangles: - polymarkers : ensemble de symboles graphiques disposés de façon distincte - arcs de courbes ( cercles, ellipses, Bézier, Splines ) - courbes fermées ( cercles, ellipses ) - Texte CECI EST UN TEXTE - Filled Areas : Surfaces hachurées limitées par entités fermées ( polygone, courbe ) Dans tous les cas, la construction de ces primitives s’opère « sous contraintes », c.à.d. que des conditions d’ordre géométrique sont à imposer pour cette construction des primitives, p.ex. : . Construire un segment en fixant ses 2 extrémités par points prédéfinis ou par introduction interactive des coordonnées de ces points . Construire un segment issu d’un point prédéfini et tangent à un cercle prédéfini . Construire un segment parallèle à un autre donné . Construire un cercle tangent à 3 segments prédéfinis - à ce niveau le plus bas des primitives de base, la définition d’Attributs pour ces primitives : - Attributs de ligne ( couleur, épaisseur du trait, type de ligne ) - Attributs de polymarkers ( forme, dimensions, couleur ) - Attributs de texte ( couleur, taille, police, épaisseur ) CECI EST UN TEXTE CECI EST UN TEXTE CECI EST UN TEXTE - à ce niveau le plus bas des primitives de base encore, la recherche d’éléments géométriques implicites, c.à.d. non créés explicitement : il s’agit de fonctions dites d’accrochage, permettant p.ex. d’accrocher un nouveau segment en un point particulier d’un autre segment déjà existant. Exemples : - accrochage d’un segment au point milieu d’un segment prédéfini: - accrochage d’un segment au centre de gravité d’un polygone prédéfini : - accrochage du centre d’un cercle à l’intersection de 2 segments prédéfinis : - au niveau supérieur, les fonctions et routines de gestion des structures de données graphiques : en fait, la plupart des dessins sont à considérer comme des assemblages structurés d’un certain nombre de primitives. Pour réaliser de tels assemblages, il est nécessaire : - de pouvoir d’abord faire subir aux primitives des transformations dites d’ « Edition » : COPIER EFFACER DEPLACER TRANSFORMER MODIFIER LES ATTRIBUTS Ex: Type de traits - pour pouvoir faire subir aux primitives de telles transformations d’Edition, il est nécessaire de pouvoir sélectionner préalablement une ou plusieurs entités au sein de l’ensemble des primitives. Pour permettre à l’utilisateur de reconnaître quelles sont ainsi les entités sélectionnées, une fonction de mise en surbrillance ( ou de changement de couleur ) des entités sélectionnées doit exister. - les primitives doivent ensuite pouvoir être associées par agrégation en tant que groupes auxquels des procédures d’édition pourront être appliquées au même titre qu’elles l’étaient aux primitives individuelles . Ces procédures d’agrégation doivent être susceptibles de réaliser un groupe en cumulant par chaînage un certain nombre de primitives ( ou de groupes déjà précédemment constitués ) ou en filtrant parmi toutes les primitives présentes dans l’ensemble du dessin certains types seulement. Par exemple, le progiciel DAO DesignCAD permettra de sélectionner parmi un ensemble d’entités exclusivement les arcs de cercle et les cercles ainsi que les items de texte pour en faire un groupe susceptible d’être copié et déplacé en un autre endroit du dessin : De tels groupes ( dessins d’écrous, de roulements, … ) peuvent alors être rassemblés en fichiers ( bases de données ) dédicacés, p.ex. comme c’est le cas pour ceux cités dans la parenthèse, en bibliothèques de symboles mécaniques ( ou architecturaux ou électroniques,… ) importables dans tout dessin. La plupart des constructeurs de logiciels DAO ( ou des sociétés tierces ) vendent d’ailleurs de telles bibliothèques. L’intérêt de ces groupes du point de vue de la taille du fichier de dessin où ils sont importés est que si un bloc est reproduit n fois dans le dessin, ce n’est pas l’ensemble de l’information relative à ce bloc qui est reproduite n fois dans le fichier du dessin, mais bien une simple référence à la base de données propre à ce bloc. - à un niveau supérieur encore, une forme particulière d’agrégation plus globale encore est à pourvoir : elle consiste à éclater le dessin en couches ( ou « calques » ou « layers » ) comme dans l’exemple architectural suivant où le plan d’ensemble sera établi comme réunion de 4 layers : plan d’ensemble composé de la superposition des layers layer 1 : uniquement des primitives « traits » layer 2 : uniquement les hachures layer 3 : uniquement les cotations layer 4 : uniquement des symboles issus d’une bibliothèque de symboles architecturaux ( fauteuils, lits, sanitaires, … ) Il est clair que, après avoir créé la couche principale 1 ( le plan-masse de l’immeuble ) , la possibilité doit être offerte de pouvoir importer p.ex. les symboles en les localisant par rapport au dessin de cette couche 1 : ceci s’opère en superposant la couche 4 dédicacée au seul dessin de ces symboles comme un calque transparent posé sur la couche 1. Diverses opérations complémentaires doivent alors permettre de tirer un plein profit de l’application de ce concept de couches empilées : - activer ou désactiver l’une des couches et rendre ainsi manipulables ou non les entités contenues dans cette couche - déplacer ou copier le contenu d’une couche dans une autre couche - sélectionner ou effacer toutes les entités d’une couche En ce qui concerne les cotations, elles doivent être dynamiques, c.à.d. qu’elles doivent s’adapter automatiquement à tout changement de géométrie de l’objet coté imposé par l’utilisateur sans qu’il soit nécessaire pour cet utilisateur de devoir effacer les cotes existant avant modification de l’objet et de devoir recommencer toute la procédure de cotation après changement. La structure hiérarchique générale d’un dessin géométrique peut ainsi être synthétisée comme suit : Plan d'ensemble Layer 1 Layer 2 Groupe Layer 3 Layer 4 Groupe Primitives Groupe Groupe Groupe Groupe Groupe 2°. Au fur et à mesure de la construction du dessin, il est évident que la base de données s’enrichit et se modifie : tant les bibliothèques graphiques que les progiciels DAO qui les appliquent doivent permettre un accès permanent à cette base de données, en vue de contrôles ou de modifications. P. ex., pour DesignCAD, il est tout à fait facile de connaître à tout moment toutes les caractéristiques tant géométriques proprement dites que d’attributs d’une primitive, d’un groupe ou même d’une couche. Pour les primitives ou les groupes, il suffit en effet d’un « Pointer / Double-Cliquer ( B.G.S. ) » sur la primitive ou le groupe pour avoir accès aux données correspondantes du fichier : DesignCAD les organise et les présente sous la forme d’une Boîte d’informations qui est en même temps une Boîte de dialogue puisqu’en effet, il est y offert la possibilité pour l’utilisateur de modifier chacune des données apparaissant dans les fenêtres de ces Boîtes : Cet exemple concerne un segment dont la Boîte d’Information donne tous les renseignements utiles, dont le type de trait, son échelle et son épaisseur : Les coordonnées du 1er point extrémité apparaissent aussi et peuvent être modifiées ; celles du second point sont appelables en appelant le « point N°2 » via liste déroulante qui apparaît par clic sur la petite flèche puis clic sur « 2 » dans cette liste : Clic ici sur « 2 » Voici ainsi les coordonnées du point d’extrémité N°2 telles qu’elles vont apparaître après la procédure précédente : A un niveau hiérarchique supérieur de cette exploitation de la base de données, il est utile de pouvoir y rechercher les renseignements nécessaires pour opérer des calculs d’analyse à propos des entités dessinées. DesignCAD fournit ainsi à l’utilisateur l’accès à une Boîte d’analyse : 3°. Tant les bibliothèques graphiques que les progiciels DAO qui les appliquent offrent une large gamme de fonctions d’entrée ( INPUT ) : - localisation sur écran via pointeur suivant les mouvements d’un périphérique externe de pointage ( souris, tablette de digitalisation, joystick, … ) et acquisition de coordonnées par clics de boutons de ces périphériques - introduction de chiffres ou de chaînes de caractères ( périphérique externe clavier ) - sélection d’un choix dans un menu par enfoncement de bouton poussoir commandé par bouton de périphérique externe ( boutons de souris ) - identification de sélection d’une entité par pointer / cliquer au moyen d’un périphérique externe ( souris p.ex. ) et localisation automatique de cette entité au sein de la base de données - … 4°. Tant les bibliothèques graphiques que les progiciels DAO qui les appliquent doivent être susceptibles de gérer l’affichage ( OUTPUT ) . L’affichage de l’image non distordue d’un objet 2D implique une mise en correspondance des coordonnées de l’objet dans le monde de l’utilisateur avec celles du périphérique physique de sortie ( l’écran ou une imprimante ). Cette opération s’opère par un enchaînement de 2 transformations dites « de visualisation » ( les explications qui suivent reposent en particulier sur le vocabulaire « PHIGS » mais les concepts sont généralisables ) : o l’utilisateur définit les objets dans un système de coordonnées qui lui est propre ( p.ex. coordonnées en mm pour le mécanicien, en cm pour l’architecte ) et qui est désigné comme « World Coordinate System » ( WCS ) o une première transformation dite « de Normalisation » établit les correspondances entre WCS et un système normé de coordonnées ( « Normalized Projection Coordinate » NPC ) où un « écran virtuel » carré de dimensions unitaires ( 1 x 1 ) est ainsi défini : le monde concret est ainsi transformé en un monde mathématique virtuel où des opérations de transformation d’entités ( type « Edition ») ou de zoom ou encore de découpage ( « clipping » ) pourront être réalisées selon un outillage matriciel standardisé o une seconde transformation, dite « d’appareil » établit les correspondances entre coordonnées normées NPC et coordonnées « écran » ( Device Coordinate DC ) Ne vous inquiétez pas si cette introduction très rapide aux fonctions de visualisation vous paraît difficile : ces concepts, pour être bien compris, doivent en fait faire l’objet des développements nettement plus approfondis qui seront consignés dans le fascicule relatif à l’algorithmique et, mieux encore, faire l’objet des applications pratiques qui en seront faites dans l’autre fascicule concernant les procédures d’édition des primitives graphiques. CE FASCICULE DE COURS EST DEDIE A LA MEMOIRE DU Prof. Dr. Edmond CARTON