Informatique Graphique Cours 12 - Projections Introduction En général, une projection est une fonction qui permet de transformer un point dans système de coordonnées à N dimensions, en un point dans un système de coordonnées à M dimensions tel que M<N. En informatique graphique les projections sont utilisées (entre autres) pour la visualisation d'objets 3D sur un écran 2D. En général, l'objet 3D est d'abord clippé par rapport à un volume, puis les coordonnées obtenues sont projetées par rapport à un plan de projection. Les coordonnées du point 2D ainsi obtenues sont alors transformées en cordonnées écran pour afficher le point. figure 6.1. page 230. Nous nous intéresserons dans la suite uniquement aux projections planes c'est à dire que nous considérerons toujours un plan de projection et non une surface courbe (les projections non planes sont utilisées en cartographie). Il existe deux grandes classes de projections : les projections perspectives et les projections parallèles. Remarque La projection d'un segment AB est également un segment (A'B'). Il suffira par conséquent de projeter uniquement les extrémités A et B. Les points A' et B' ainsi obtenus définiront alors le segment correspondant à la projection du segment AB. Les projections perspectives Les projections perspectives sont définies par un centre de projection C et un plan de projection P. La projection d'un point A de l'objet 3D est le point d'intersection A' entre la droite D (passant par A et le centre de projection C) et le plan de projection P. figure 6.2 (a). page 230. L'effet visuel des projections perspectives est similaire à celui des photographies ou à la vision humaine. Cependant, les longueurs et les angles ne sont pas conservés, en général. Par exemple la longueur d'un segment A'B' correspondant à la projection d'un segment AB, n'est pas égale à la longueur du segment AB. De même, l'angle formé par deux segments AB et BC est différent de l'angle formé par les segments A'B' et B'C' (projections de AB et BC) sauf si AB et BC sont situés dans un plan qui est parallèle au plan de projection. De même, la projection de deux segments parallèles ne donnera pas forcément deux segments parallèles
C'est pourquoi, dans les cas où on désire préserver les longueurs, c'est la projection parallèle qui est utilisée, bien que moins réaliste (les angles ne sont quand même pas, en général, préservés mais la projection de lignes parallèles donne des lignes parallèles). Point de fuite Considérons deux lignes L1 et L2 parallèles entre elles mais non parallèles au plan de projection. Considérons maintenant les projections L'1 et L'2 de ces deux lignes. Vu que L1 et L2 ne sont pas parallèles au plan de projection, les lignes L'1 et L'2 vont donc se croiser. Leur point d'intersection est appelé point de fuite. A chaque direction de deux droites parallèles (et non parallèles au plan de projection) va correspondre un point de fuite. Il existe par conséquent une infinité de point de fuite, chacun correspondant à une direction donnée. Si les deux lignes L1 et L2 sont parallèles à l'un des axes X, Y ou Z, le point de fuite de ces deux lignes est alors appelé point de fuite axial. Le nombre de point de fuite axiaux est déterminé par la position du plan de projection. Si le plan de projection intersecte uniquement un axe (donc il est orthogonal a cet axe, sinon il couperait un autre axe) il y a 1 point de fuite axial. Si le plan de projection intersecte deux axes, il y a 2 points de fuite axiaux. Si le plan de projection intersecte les trois axes, il y a 3 points de fuite axiaux. Les types de projections perspectives Les types de projections perspectives sont déterminées par le nombre de points de fuite axiaux. Il existe donc trois types de projections perspectives : à un point (fig. 6.3, pp. 232), à deux points (fig. 6.5, pp. 233) et à trois points. Les premières (1 et 2 points) sont les plus utilisées. Les projections parallèles Les projections parallèles peuvent être vues comme des projections perspectives pour lesquelles le centre de projection est situé à l'infini. La projection parallèle est alors définie non plus par un centre de projection mais une direction (en plus du plan de projection bien sûr). La projection d'un point A de l'objet 3D est le point d'intersection A' entre la droite D (passant par A et parallèle à la direction de projection) et le plan de projection P. figure 6.2 (b). page 230. Les types de projection parallèles Les projections parallèles sont divisées en deux classes selon la direction de la projection : si la direction de la projection est perpendiculaire au plan de projection, la projection est dite orthogonale sinon elle est dite oblique. Les projections orthogonales Les projections orthogonales les plus utilisées sont celles pour lesquelles le plan de projection est perpendiculaire à l'un des trois axes (la direction de la projection correspond alors à la direction de l'axe en question). fig. 6.6, pp. 234.
Ces projections sont très utilisées en dessin industriel car elles sont pratiques pour la mesure des longueurs et des angles. Cependant elles ne permettent de voir qu'une face de l'objet. Les projections orthogonales pour lesquelles le plan de projection n'est perpendiculaire à aucun des trois axes sont dites axonométriques. Elles permettent de voir plusieurs faces de l'objet. Les projections obliques Les projections obliques combinent en quelque sorte les propriétés des différents types de projection orthogonales. Ici le plan de projection est perpendiculaire à l'un des axes mais la direction de projection n'est pas perpendiculaire à ce plan. fig. 6.9, pp. 235. Les projections des faces qui sont parallèles au plan de projection permettent la mesure aussi bien des longueurs que des angles. Les projections des autres faces permettent uniquement la mesure des longueurs. Toutefois on a une vue de plusieurs faces de l'objet. Les projections cavalières sont un type particulier de projection oblique. La propriété qui les caractérise est que l'angle formé par la normale au plan de projection et la direction de projection est de 45. Ceci a pour conséquences qu'une ligne L et sa projection L' ont les mêmes longueurs si la ligne L est perpendiculaire au plan de projection. Fig: Faire une figure montrant une ligne L (perpendiculaire au plan de projection) et sa projection L', et montrant que la tg(alpha=45 )= L'/L=1 ==> L=L'. Récapitulatif Reprendre la fig. 6.13, pp. 237 en enlevant les projections isométrique et cabinet. Représentation matricielle des projections Les projections peuvent être exprimées sous forme matricielle dans l'espace des coordonnées homogènes. Les matrices de projections peuvent être combinées avec les matrices de transformations vues au chapitre précédent, par simple multiplication. Projection perspective avec plan de projection orthogonal à l'axe Z Considérons pour l'instant, une projection perspective avec un plan de projection orthogonal à l'axe Z. Supposons que le plan se trouve à une distance d du centre de projection. Pour simplifier les calculs plaçons l'origine de notre repère sur le centre de projection. (fig. 6.42), pp. 254. Etant donné un point P(x,y,z), calculons les coordonnées du point P'(x',y',z') projection de P. D'après la figure, on voit que : tg(a) = x' / d = x / z => x' = (x * d) / z = x / (z / d) tg(b) = y' / d = y / z => y' = (y * d) / z = y / (z / d) z' = d = z / (z / d)
Ces équations peuvent s'écrire sous la forme matricielle suivante : X' 1 0 0 0 x Y' = 0 1 0 0. y Z' 0 0 1 0 z W ' 0 0 1/d 0 1 Le quadruplet (X', Y', Z', W') est donc égal à (x, y, z, z/d). Or on sait qu'avec les coordonnées homogènes le quadruplet (X',Y',Z',W') représentent le même point que le quadruplet (X'/W', Y'/W', Z'/W', 1) c'est-à-dire (x/(z/d), y/(z/d), d, 1) ce qui correspond bien au point (x', y', z'). On remarque que la 4ème ligne de la matrice permet d'introduire le facteur de division. Autre formulation Si on place maintenant l'origine de notre repère dans le plan Z, le centre de projection se trouve alors à une distance -d de l'origine (toujours sur l'axe Z cependant), et le plan à z=0. fig. 6.43, pp. 255. on a cette fois-ci : tg(a) = x' / d = x / (d + z) => x' = (x * d) / (d + z) = x / (1 + (z / d)) tg(b) = y' / d = y / (d + z) => y' = (y * d) / (d + z) = y / (1 + (z / d)) z'=0 La matrice s'écrit cette fois : X' 1 0 0 0 x Y' = 0 1 0 0. y Z' 0 0 0 0 z W ' 0 0 1/d 1 1 Le quadruplet (X', Y', Z', W') est donc égal à (x, y, 0, 1 + (z / d)) qui représente donc bien le point (x / (1 + (z / d)), y / (1 + (z / d)), 0) c'est-à-dire (x', y', z'). Exercice Retrouvez cette matrice à partir de la matrice précédente en appliquant les transformations nécessaires. Remarque Cette seconde matrice permet de faire tendre le centre de projection vers l'infini en faisant tendre d vers l'infini. On obtient alors la matrice correspondant à une projection parallèle orthogonale sur le plan XY : 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 Ce qui correspond tout simplement à : x' = x y' = y z' = 0
Projection perspective avec centre de projection quelconque On s'intéresse maintenant au cas général. Le plan de projection est toujours perpendiculaire à l'axe Z, mais le centre de projection est quelconque. fig. 6.44, pp. 256 Soient : P(x, y, z) un point de l'espace et P'(x', y', z') son transformé par la projection ; C le centre de projection ; I(0, 0, z') le point d'intersection du plan de projection avec l'axe Z ; D la distance entre C et I ; U (ux, uy, uz) le vecteur de norme 1 dirigé de I vers C. Détermination de la matrice Le point P' se trouve sur le segment PC. L'équation paramétrique de ce segment est : C + t * (P - C) avec 0 t 1 Or les coordonnées de C peuvent être exprimées de la manière suivante : C = I + D * U C = (0, 0, z') + D * (ux, uy, uz) = (D * ux, D * uy, z' + D * uz) (On peut démontrer cette égalité à partir de la figure en considérant le sinus et le cosinus de l'angle formé par l'axe Z et IC.) En remplaçant C dans l'équation paramétrique, on obtient les coordonnées d'un point quelconque du segment IC (0 t 1) : X = D * ux + t * (x - D * ux) Y = D * uy + t * (y - D * uy) Z = z' + D * uz + t * (z - z' - D * uz) On peut alors calculer les coordonnées du point P' en remplaçant Z par z' dans la troisième équation (puisque P' est sur le plan de projection) ce qui permet de déterminer la valeur du paramètre t : t = -D * uz / (z - z' - D * uz) t = D * uz / (D * uz + z' - z) t = 1 / (1 + (z' - z) / (D * uz)) En remplaçant maintenant t par sa valeur dans les deux premières équations on obtient : x' = (x - z * (ux / uz) + z' * (ux / uz)) / (1 + (z' - z) / (D * uz)) y' = (y - z * (uy / uz) + z' * (uy / uz)) / (1 + (z' - z) / (D * uz)) Il ne reste plus maintenant qu'à réecrire z' de telle manière à faire apparaître le même dénominateur que pour x' et y' : z' = z' En multipliant le z' de droite par une fraction dont le numérateur est égal au dénominateur, soit (1 + (z' - z) / (D * uz)), on obtient : z' = (-z * z' / (D * uz) + (z' 2 + z' * D * uz) / (D * uz)) / (1 + (z' - z) / (D * uz)) En posant x' = X' / W' y' = Y' / W' z' = Z' / W'
on obtient l'expression de (X', Y', Z', W') comme combinaison linéaire de (x, y, z, w) avec w = 1 (terme constant de chaque expression) : X' = x - z * (ux / uz) + z' * (ux / uz) Y' = y - z * (uy / uz) + z' * (uy / uz) Z' = -z * z' / (D * uz) + (z' 2 + z' * D * uz) / (D * uz) W' = 1 + (z' - z) / (D * uz) La matrice de projection est donc : 1 0 -ux/uz z'*(ux/uz) 0 1 -uy/uz z'*(uy/uz) 0 0 -z'/(d*uz) z'+z' 2 /(D*uz) 0 0-1/(D*ux) 1+z'/(D*uz) On peut maintenant à partir de cette matrice générale retrouver les matrices de certaines projections particulières. Il suffit d'affecter les bonnes valeurs à z', D, dx, dy et dz. Exercice Retrouvez les matrices précédentes correspondant à : la projection othogonale sur le plan XY : z' = 0, D = infini, dx = 0, dy = 0, dz = -1. la projection perspective avec plan orthogonal à l'axe Z et centre de projection à l'origine : z' = d, D = d, dx = 0, dy = 0, dz = -1. la projection perspective avec plan orthogonal à l'axe Z et passant par l'origine, et centre de projection sur l'axe Z à une distance -d de l'origine : z' = 0, D = d, dx = 0, dy = 0, dz = -1 et la matrice correspondant à : la projection oblique : z' = 0, Q = infini, dx = cos(a), dy = sin(a), dz = -1. la projection cavalière : z' = 0, Q = infini, dx = cos(a)/2, dy = sin(a)/2, dz = -1. Calcul du point de fuite Lorsque D ne tend pas vers l'infini, la matrice correspond à une projection perspective à un point de fuite. Le calcul du point de fuite s'effectue en calculant le transformé d'un point situé à l'infini sur l'axe Z, ce qui correspond en fait au transformé du point représenté par le quadruplet (0,0,1,0), soit : xf = D * ux yf = D * uy zf = z'