| Tous les supports papier sont autorisés.Les dispositifs électroniques (ordinateur, tablette, téléphone mobile, ...) sont interdits.
 On n'oubliera pas de fournir quelques commentaires sur les techniques employées.
 Question 1: Brésenham 
            
              | L'algorithme "classique" de Bresenham (ci-contre) permet de tracer un segment de droite défini entre 2 sommets
                  de coordonnées entières 2D (xi,yi) et (xf,yf). Si ces coordonnées sont telles que abs(xi-xf) > abs(yf-yi), la
                  suite de pixels tracée présente une ou plusieurs situations où plusieurs pixels sont allumés sur une même trame
                  horizontale.Adapter cet algorithme pour n'allumer qu'un seul pixel à chaque trame horizontale et pour que, à l'exception des
                  trames yi et yf où les pixels (xi,yi) et (xf,yf) sont allumés, le pixel allumé sur une trame soit le pixel central
                  de tous les pixels candidats sur cette trame.
 
                   
                   | void ligne(int xi,int yi, int xf,int yf) {
 int dx,dy,i,xinc,yinc,cumul,x,y;
 x = xi;
 y = yi;
 dx = xf - xi;
 dy = yf - yi;
 xinc = ( dx > 0 ) ? 1 : -1;
 yinc = ( dy > 0 ) ? 1 : -1;
 dx = abs(dx);
 dy = abs(dy);
 allume_pixel(x,y);
 if ( dx > dy ) {
 cumul = dx / 2;
 for ( i = 1 ; i <= dx ; i++ ) {
 x += xinc;
 cumul += dy;
 if ( cumul >= dx ) {
 cumul -= dx;
 y += yinc; }
 allume_pixel(x,y); } }
 else {
 cumul = dy / 2;
 for ( i = 1 ; i <= dy ; i++ ) {
 y += yinc;
 cumul += dx;
 if ( cumul >= dy ) {
 cumul -= dy;
 x += xinc; }
 allume_pixel(x,y); } }
 }
 |  Question 2: Cohen-Sutherland L'algorithme de Cohen-Sutherland s'applique usuellement au clipping d'un segment de droite 2D dans un rectangle
            2D à cotés parallèles aux axes.Décrire, sans la développer sous forme de code informatique, une généralisation de cet algorithme au clipping
            d'un segment de droite à l'intérieur d'un quadrilatère (polygone à 4 cotés) quelconque.
 Question 3: Mathématiques On considère un polygone à n sommets (S0 à Sn-1)
            définis en trois dimensions.Décrire une méthode mathématique permettant de tester si ce polygone est plan.
 Question 4: Modélisation OpenGL L'obtention d'un rendu d'éclairage de bonne qualité se heurte fréquemment en OpenGL 1.x à l'impossibilité de
            générer des détails d'affichage de taille inférieure à la taille des facettes. Une solution peut être alors de
            générer plus de facettes.On considère une facette F triangulaire 3D définie par ses trois sommets S1,
            S2 et S3. Développer une fonction
            d'affichage OpenGL de prototype void affichageFacette(int n, Position3D *S1, Position3D *S2, Position3D *S3);
            permettant l'affichage de la facette (S1, S2,
            S3), décomposée au niveau n de précision (n >= 0) en un ensemble de facettes
            triangulaires situées dans le plan de F selon le schéma ci-contre (n = 0, 1, 2, 3 de gauche à droite, multiplication
            par 4 du nombre de facettes à chaque niveau supplémentaire).
 
             On rappelle que la classe Position3D comporte un champ c de type tableau de 4 réels double précision permettant
            le stockage de coordonnées 3D en "coordonnées homogènes". |