Infographie
Infographie
Infographie
Jean Fruitet
[email protected]
Centre d'InfoGraphie
Université de Marne-La-Vallée
1. INTRODUCTION A L'INFOGRAPHIE 1
2. NOTIONS GEOMETRIQUES 9
3. PROJECTIONS 16
5. FENETRAGE 30
6. ESTOMPAGE 33
BIBLIOGRAPHIE 36
- la synthèse d'image (affichage de données sous forme graphique, calcul et restitution d'images
réaliste ou symbolique, visualisation de données scientifiques) sur écran cathodique (CRT) ou sur
imprimante par procédé informatique.
Nous consacrons cette seconde partie du cours de géométrie algorithmique à un survol rapide de outils
(méthodologie / structures de données / algorithmes / interfaces) pour la création de programmes
graphiques (2D et 3D).
MODELISER LE PHENOMENE
sous forme de nombres / relations / symboles
lois de comportement au cours du temps
ANIMER LE MODELE
la sensation d'animation est obtenue
en modifiant le modèle et son affichage 25 fois par seconde...
IR x IR
[0..1] x [0..1]
Primitives graphiques
Transformations géométriques
3D --> 2D
Système visuel physiologique Transformations de visualisation
Lois de l'optique Continu --> Discret
Observateur
ESPACE ECRAN
menu
message
CERVEAU
ESPACE OBJET
UNIVERS
Rétroaction
2 2
X + Y =1
IR x IR
[0..1] x [0..1]
Primitives graphiques
Transformations géométriques
3D --> 2D
Transformations de visualisation
Continu --> Discret
Interface
menu
Clavier R++
Souris
R--
Tablette à digitaliser dX
Menus / Langage de commande dY
Unité centrale
Mémoire VIDEO
UAL
Mémoire +
Compt. ordinal Mémoire d'affichage
+
Registres
Rafraichissement
Ecran
24 fois par secondes au moins
CRT
Pour simuler l'animation, il faut afficher 24 images par secondes en respectant un référentiel culturel
(métaphore de la caméra), un modèle physique simplifié (lois de l'optique et de l'électromagnétisme) et
physiologique (vision des couleurs).
Modélisation
UNIVERS ESPACE OBJET
Ce premier exemple va nous permettre de parcourir les étapes de l'affichage d'une fonction mathématique
et de définir au passage les outils pour la programmation graphique en Turbo C sur PC.
Univers
IR --> IR
x --> y = cosinus(x).
Dans l'espace objet, on peut choisir un référentiel (repère) orthogonal, normé, direct (anti-horaire 2D, ou
trigonométrique) et un système de coordonnées cartésiennes pour représenter les fonctions mathématiques
et leur graphe.
Par contre l'espace écran est défini (pour des questions technologiques... et culturelles) selon un référentiel
horaire, avec origine dans le coin supérieur gauche de l'écran. Les coordonnées entières d'écran sont
données en (colonne, ligne).
Et bien sûr si on ne dispose que de primitives point ou ligne, il faut décomposer le graphe en une
succession de segments.
IR
0,0 x
xmin, ymin
0,0
clôture Xmin, Ymin
M (X, Y)
Ox, Oy x
ESPACE IMAGE
y
XMIN,YMIN 1
M (x, y)
M' (X,Y)
0,0
X
X0,Y0
XMAX, YMAX
xmin, ymin
( x − x min) ( X − XMIN )
=
sur l'axe des X ( x max − x min) ( XMAX − XMIN
( y − y min) (Y − YMIN )
=
sur l'axe des Y ( y max − y min) (YMAX − YMIN
Il faut ensuite passer dans l'espace écran, c'est-à-dire inverser l'orientation de l'axe des Y et en
coordonnées entières !
K index
Repère global
I O J
Y
pouce
2.2. Visualisation
L'opération de visualisation est définie par la position de l'oeil de l'observateur (E) et un axe de visée V si
l'oeil est à une distance finie.
Si l'observateur est à l'infini, on parle de direction de visée.
Tous les déplacement des objets de la scène ou les déplacements de l'observateur se traduisent par le
recalcul des projections sur l'écran. Il est donc nécessaire de passer constamment d'un repère à l'autre.
Ce passage est obtenu par composition de transformations spatiales élémentaires : translations, rotations,
changements d'échelle, homothétie...
Pour des raisons d'efficacité, on cherchera à représenter ces transformations par des produits matriciels,
qui sont programmés de façon efficace et même implantés par matériel sur les machines graphiques
spécialisées.
Ecran
Z V
Xe U
Repère local
Xv
W
Oeil Yv
(main Zv
Ye gauche)
K
I J
Repère global
Y
(main
X droite)
Les transformations de IR3 dans IR3 peuvent s'exprimer par des matrices 3x3, sauf la translation. Par
contre dans IP4, l'espace projectif de IR3, toutes les transformations s'expriment par des matrices 4x4.
Les coordonnées homogènes d'un point de IR3 sont constituées d'un quadruplet (x, y, z, t).
- si t _ 0, M de coordonnées homogènes (x, y, z, t) est le point de IR3 de coordonnées cartésiennes
(x/t, y/t, z/t).
- si t = 0, le point M est "à l'infini" et le triplet (x, y, z) s'interprète comme un vecteur.
Z M3 (a, b , c, 0.5)
M2 (a, b, c, 1)
K M1 (a, b, c, 2)
J
I Y
Pour tous les points à distance finie de IR3 les quadruplets (x, y, z, t) et (x/t, y/t, z/t, 1) représentent le
même point. On choisira donc en général la seconde forme.; cependant on peut choisir une valeur de t >1
pour coder avec des entiers les coordonnées réelles.
La droite
Une droite est définie par deux points A et B
A : t(xA, yA, zA, 1);
B : t(xB, yB, zB, 1);
et un point courant par M : t(x, y, z, 1)
Segment [A B] 0< λ ²1
Le plan
Un plan est défini par un point M0 et une normale n au plan.
L'équation du plan est donc :
M0 M . n = 0 (. : produit scalaire)
x
y
[a b c d ] = 0
z
1
avec d = -(a x0 + b y0 + cz0)
Un point est intérieur à un polyèdre convexe dont toutes les normales aux faces du polyèdre sont orientées
vers l'extérieur si la puissance de ce point par rapport à toutes ces faces est négative.
Faces visibles
Une face pour laquelle la puissance de l'oeil est négative n'est pas visible par un observateur extérieur au
polyèdre... Les faces vues par l'observateur sont celles pour lesquelles PF(Oeil) >0.
Produit scalaire
a : t(xa ya za 0) b : t(xb yb zb 0)
a . b = xa xb + ya yb + za zb
Déterminant
a1 b1
D= = a1b2 − a2 b1
a2 b2
a1 b1 c1
b2 c2 b1 c1 b1 c1
D = a2 b2 c2 = a1 − a2 + a3
b3 c3 b3 c3 b2 c2
a3 b3 c3
∑
n i+j
j=1
(− 1) aij D *ij
Produit vectoriel
∑
n i+j
j=1
(− 1) aij D *ij
Les transformations géométriques usuelles en coordonnées homogènes sont représentées par des
matrices 4x4
Translation
tT : P4 --> P4
X --> X + T avec X t(x y z 1)
1 0 0 tx x
0 1 0 ty y
M(tT)= et X =
0 0 1 tz z
0 0 0 1 1
1 0 0 -tx
c : P4 --> P4
t(x y z 1) --> t(k1 x, k2 y, k3 z, 1)
k1 0 0 0
0 k2 0 0
M(c)=
0 0 k3 0
0 0 0 1
1/k1 0 0 0
0 1/k2 0 0
M-1(c)=
0 0 1/k3 0
0 0 0 1
r : P4 --> P4 d'angle α
1 0 0 0
0 cos(α) -sin(α) 0
Rx(α) =
0 sin(α) cos(α) 0
0 0 0 1
cos(α) 0 sin(α) 0
0 1 0 0
Ry(α) =
-sin(α) 0 cos(α) 0
Infographie Jean FRUITET
13 UMLV - 1995
0 0 0 1
cos(α) -sin(α) 0 0
sin(α) cos(α) 0 0
Rz(α) =
0 0 1 0
0 0 0 1
Rotations inverses autour d'un axe du repère
Il suffit de changer le signe des termes en sin(α)
Schéma général
soit u = t(a, b, c, 0)
avec a = (x2-x1)/U b = (y2-y1)/U c = (z2-z1)/U
et d = SQRT(a2+b2+c2)
0 1 0 -x1
T(-OM1) =
0 0 1 -y1
0 0 0 -z1
0 0 0 -1
1 0 0 0
Rx(α)= 0 c/d -b/d 0
0 b/d c/d 0
d 0 -a 0
Ry(β)= 0 1 0 0
a 0 d 0
0 0 0 1
cos(θ) -sin(θ) 0 0
Rz(θ)= sin(θ) cos(θ) 0 0
0 0 1 0
0 0 0 1
On obtient la matrice
M(RD) = T x Rx(α) x Ry(β) x Rz(θ) x Ry-1(β) x Rx-1(α) x T-1
Z
D"
θ
Rz (θ )
D
α β
M2
D'
u
M1
k
T(-OM1)
j Y
O
i Ry (β )
Rx (α)
Une scène est une collection d'objets virtuels en 3 dimensions vus par un observateur à travers la fenêtre
en 2 dimensions de l’écran d’ordinateur.
La visualisation implique de déterminer les objets de la scène contenus dans la pyramide de vision
(découpage), puis de projeter ces objets sur le plan image (projection perspective par exemple), et enfin
d’afficher cette image en la transformant en primitives graphiques dans l’espace écran (pixels).
PYRAMIDE DE VISION
Clôture Ecran
Observateur
L'opération de visualisation est définie dans l'espace objet par la position des objets, celle de l'observateur
et un axe de visée si l'oeil est à une distance finie. Si l'observateur est à l'infini, on parle de direction de
visée.
Tous les déplacement (objets de la scène ou observateur) se traduisent par le recalcul des projections sur
l'écran.
La fluidité des déplacements est obtenue en recalculant et en affichant l'image au moins 25 fois par
seconde.
E
W Repère de
l'observateur
Ye
K (main gauche)
I J
Repère global Y
(main droite)
Coordonnées Coordonnées
x xv
d'un point d'un point
y yv
dans le repère dans le repère
z zv
objet global local de l'observateur
Clôture
Elimination des parties
cachées dans l'espace
Projection 3D/2D objet
Primitives d'affichage
Coordonnées Interaction
entières avec l'utilisateur
de l'espace écran
Projections parallèles
Perspective cavalière
Projection cabinet
L’écran est perpendiculaire à la droite de visée (droite de l’oeil au centre du monde objet).
On connaît :
Z ECRAN
Mo XE
(x'0, y'0, z'0)
Me
Y Y'
Xe
Ye X'
Repère objet
(main droite)
Observateur
Z' (repère main gauche)
X
YE
Le point Mo (xo,yo, zo) dans le repère (OEIL, X', Y', Z') de l’observateur se projette en Me(xe,ye) dans le
repère image.
yo / ye = zo / D
xo / xe = zo / D
Y'
yo Mo
ye
Me
Z'
OEIL
D zo
X'
X 1 0 0 0 x
Y = 0 1 0 0 y
Z 0 0 1 0 x z
W 0 0 1/D 0 1
Infographie Jean FRUITET
20 UMLV - 1995
X x
=> Y = y
Z z
W z/D
XE = ρ sin(ϕ) cos(θ)
YE = ρ sin(ϕ) sin(θ)
ZE = ρ cos(ϕ)
Xv
Yv
XE
E YE
Z ZE
ϕ
ρ Zv
YE
O Y
XE
X A
Xv x
Yv =V y
Zv z
1 1
Z'
(π − ϕ) E=O'
Z Y'
ϕ Y"
X"
O Y
θ
(π/2 − θ)
X
A
3) Rotation d’axe OX pour placer l’axe OZ (O’Z’) dans la direction EO d’angle (ϕ−π)
1 0 0 0
0 -cos(ϕ) sin(ϕ) 0
Rx(ϕ−π) =
0 -sin(ϕ) -cos(ϕ) 0
0 0 0 1
4) Inversion de la direction de OX
-1 0 0 0
0 1 0 0
Myz =
0 0 1 0
0 0 0 1
Et finalement
V = T x Rz x Rx x Myz
Finalement
Une scène est déterminée par un point de vue : seuls les objets contenus dans la pyramide de vision seront
affichés, après élimination des lignes et faces cachées par d'autres objets.
Les objets sont "représentés par les arètes. C'est une représentation ambigüe.
L'élimination des lignes (arètes) cachées est adaptée aux périphériques vecteurs :
- tables à tracer
- écrans calligraphiques (vecteurs)
L'élimination des faces cachées convient aux écrans en mode mosaïque [raster]
Les algorithmes dépendent beaucoup des structures de données et de la façon dont les objets sont
représentés dans la mémoire de l'ordinateur.
3 4
Facettes triangulaires et polyèdres convexes permettent une représentation simple et efficace d'une scène
pouvant contenir plus de 10 000 facettes...
Patches ou carreaux
- de Coons
- de Bézier
- Splines
Un carreau est une partie élémentaire de surface délimitée par 4 courbes frontières.
Les courbes sont paramétrées :
Sphère
-
Cube Cylindre
Les noeuds de l'arbre sont des opérations ensemblistes, les feuilles des primitives solides.
On distingue
a) les algorithmes dans l'espace objet
b) les algorithmes dans l'espace image.
Tous utilisent la notion de tri géométrique. Il s'agit de définir un ordre de priorité sur les objets pour
déterminer ceux qui sont visibles.
Tous exploitent plus ou moins la notion de cohérence d'image pour limiter les calculs d'intersection.
Quand certains paramètres varient peu ou lentement, l'image se modifie peu d'un pixel à l'autre.
--> cohérence entre les arètes
--> cohérence entre les faces
--> cohérence d'éclairage
--> d'une ligne d'image à la suivante [scan line : ligne de balayage de l'image]
Une scène est constituée d'objets polyédriques non intersectants opaques ; chaque face a une normale
orientée vers l'extérieur. On détermine les faces arrières à l'aide des normales. On supprime les arètes
appartenant à deux faces arrières. Pour les arètes restantes, il faut tester si aucune face ne les cache.
Cet algorithme repose sur un tri des facettes selon la distance à l'observateur.
Les facettes les plus éloignées sont affichées en premier ; les facettes (opaques) les plus proches venant
recouvrir les facettes les plus éloignées...
Q'
P
Q
Une scène est constituée de polyèdres ; les faces sont des polygones classés en triant les sommets les plus
éloignés de chaque face selon leur profondeur. En cas de chevauchement, les faces sont découpées selon
le plan contenant l'autre face.
Puis on projette les faces classées sur le plan de l'écran en commençant par celles qui sont les plus
éloignées.
La force de cet algorithme est sa simplicité, mais de nombreuses faces cachées sont affichées
inutilement.
Algorithmes mixtes
Infographie Jean FRUITET
27 UMLV - 1995
Algorithme de ligne de crête
[Wright 73 - dans l'espace image] [Williamson 72 - dans l'espace objet]
Cet algorithme est utile pour visualiser les fonctions de deux variables et les MNT (modèle
numérique de terrain).
L'idée est de couper la surface à représenter par des plans d'équation x=Cte.
XMIN
X0
C'est un algorithme dans l'espace image, simple (il est souvent "câblé" sur les machines haut de
gamme), mais il est gourmand en espace mémoire et présente des difficultés d'anti-aliassage.
Z0 Z1 Z2
C = NOIR C1 C2 =
ROUGE
Z2 < Z1 donc la couleur ROUGE est affichées
On appelle fenêtrage (ou découpage) l'opération qui consiste à découper un objet graphique (segment)
selon les bords de la fenêtre de visualisation.
Pour déterminer si un segment est visible on considère les coordonnées de ses extrémités par rapport aux
droites constituant les bords de la fenêtre de diagonale ((Xmin, Ymin) (Xmax, Ymax))
D
(x4, y4)
Ymax
(x2, y2) B F
(x6, y6)
A (x1, y1)
Ymin
E
(x5, y5)
C Xmin Xmax
(x3, y3)
Avec cette codification les codes des points (x1, y1) et (x2, y2) est 0000 ;
le code de (x3, y3) est 1010 ; le code de (x4, y4) est 1001
le code de (x5, y5) est 0010 ; le code de (x6, y6) est 0100
Condition nécessaire et suffisante pour qu'un segment [AB] d'extrémités (xA, yA) et (xB, yB)soit
entièrement visible :
- les deux codes sont nuls
((code(xA, yA)==0) && ( code(xB, yB) == 0))
Le segment [EF] est en partie visible, pour déterminer quelle portion conserver, on peut procéder comme
suit :
- partager [EF] en deux segments [EM] et [MF] égaux
- rappeler récursivement l'opération de fenêtrage sur chaque nouveau segment.
Infographie Jean FRUITET
31 UMLV - 1995
La condition d'arrêt de la récursion, c’est la résolution de l’écran : un pixels d'écart entre les extrémités du
segment.
-prendre un sommet S_fin d’un arc (S_ini, S_fin). S_ini a déjà été traité. Examiner la stratégie
concernant S_fin :
intérieur extérieur
S_fin
S_ini
intérieur ajouter + 1 sommet ajouter le point d’intersection
+1 sommet
extérieur ajouter le pont d’intersection et le S_fin ne rien faire
+2 sommets +0 sommet
Il suffit de répéter cette démarche pour chaque ligne de découpe. L’algorithme s’étend au découpage par
n’importe quel polygone convexe.
a) b)
c) d)
e)
Soit une triangulation 3D et une source de lumière ponctuelle à une distance infinie. L'éclairage de chaque
facette triangulaire (assimilée à une surface mate) dépend de l'orientation de la normale à la facette par
rapport à la direction du rayon lumineux incident.
I Diffuse = I Ponctuelle (L .N )
avec L = N = 1
On peut donc exprimer l'éclairement de chaque facette, à un facteur Ip près, comme un produit mixte de
trois vecteurs :
u = AB AB ; v = BC BC ; w = L L
puisque N = u ∧ v (produit vectoriel de AB par BC normalisés )
Selon la loi de Lambert la quantité de lumière diffuse reçue par l'observateur est indépendante de la
position de celui-ci, pourvu que la facette soit visible :
Pour déterminer quelles sont les facettes visibles, il suffit d'appliquer le même raisonnement que
précédemment en calculant le produit mixte de la normale à chaque facette avec la direction de visée.
Zénith
Face en lumière
rasante
N Face éclairée
W
N
Soleil W
+W
phi
N
Rho
Nord Face non
éclairée
Est
Téta
6.1. Algorithme
1) Calculer les coordonnées de la source lumineuse (ou plutôt son coefficient directeur) en coordonnées
sphériques
x = ρ cos(θ) sin(ϕ )
w y = ρ sin(θ )sin(ϕ) avec ρ = 1 et x 2 + y 2 + z 2 = 1
z = ρ cos(ϕ )
4) Pour toutes les facette éclairées et visibles attribuer une couleur d'intensité proportionnelle à
l'éclairement I ; si on dispose de 16 couleurs (ou plutôt de 16 gris en valeur de luminosité croissante) :
Si I<=0 Couleur = 0
et si I>0
Couleur = 15 I avec I ∈ ]0,1]
5) Afficher les facettes par l’algorithme du peintre en commençant par celles qui sont le plus éloignées de
l’observateur.