12. Pipeline GraphiquePipeline Graphique
Transformations de
modélisation
Illumination
(Shading)
Transformations
Modèle de laModèle de la
scènescène
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage Image 3DImage 3D
13. Transformations de modélisationTransformations de modélisation
•Application des transformations de
composition de scène : Passage du
système de coordonnées local de
chaque objet 3D (object space) vers
Transformations de
modélisation
Illumination
(Shading)
Transformations
chaque objet 3D (object space) vers
un repère global (world space)
Object space World space
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
14. IlluminationIllumination
•Les primitives sont éclairées selon
leur matériau, le type de surface et les
sources de lumière.
•Les modèles d’illumination sont
Transformations de
modélisation
Illumination
(Shading)
Transformations •Les modèles d’illumination sont
locaux (pas d’ombres) car le calcul est
effectué par primitive : diffus, ambiant,
Gouraud, Phong, etc.
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
15. Transformations d’affichageTransformations d’affichage
•Passe des coordonnées du monde à
celles du point de vue (repère caméra ou
eye space).
•En général le repère est aligné selon z.
Transformations de
modélisation
Illumination
(Shading)
Transformations
The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.
Eye space
World space
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
16. ClippingClipping
•Passage en coordonnées normalisées
(NDC : normalized device coordinates)
Transformations de
modélisation
Illumination
(Shading)
Transformations
Eye space NDC
•Suppression des parties hors du
volume de vision.
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
17. Transformation écranTransformation écran
•Les primitives 3D sont projetées sur
l'espace image 2D (screen space)
Transformations de
modélisation
Illumination
(Shading)
Transformations
NDC
Screen
Space
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
18. RasterisationRasterisation
•Découpe des primitives 2D en pixels
•Interpole les valeurs connues aux
sommets : couleur, profondeur, etc.
pour chaque fragment affiché
Transformations de
modélisation
Illumination
(Shading)
Transformations pour chaque fragment affichéTransformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
19. Visibilité et affichageVisibilité et affichage
•Élimination des parties cachées
•Remplissage du frame buffer avec le
bon format de couleur.
Transformations de
modélisation
Illumination
(Shading)
TransformationsTransformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
20. Système de coordonnéesSystème de coordonnées
Repère objet
Repère scène
Transformations de
modélisation
Illumination
(Shading)
Transformations
Repère caméra
Espace écran
Repère caméra
normalisé (NDC)
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
21. Le pipeline graphiqueLe pipeline graphique
•Modèle géométrique : objets,
surfaces, sources de lumière…
•Modèle d’illumination : calcul des
interactions lumineuses
Transformations de
modélisation
Illumination
(Shading)
Transformations
•Caméra : point de vue et
ouverture (frustum)
•Fenêtre (viewport) : grille de pixel
sur laquelle on plaque l’image
•Couleurs, intensités convenant à
l’afficheur (ex : 24 bits, RVB)
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
22. Le pipeline graphiqueLe pipeline graphique
•Chaque primitive passe
successivement par toutes les étapes
•Le pipeline peut être implémenté de
Transformations de
modélisation
Illumination
(Shading)
Transformations
•Le pipeline peut être implémenté de
diverses manières avec des étapes en
hardware et d’autres en software
•A certaines étapes on peut disposer
d’outils de programmation (ex : vertex
ou pixel program)
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
28. ScalaireScalaire
•• Un scalaire est une grandeur totalement définie par un nombreUn scalaire est une grandeur totalement définie par un nombre
et une unité.et une unité.
•• Il a une valeur numérique mais pas d'orientation.Il a une valeur numérique mais pas d'orientation.
•• Ex :Ex :•• Ex :Ex :
•• MasseMasse
•• DistanceDistance
•• TempératureTempérature
•• VolumeVolume
•• DensitéDensité
•• Etc.Etc.
•• Les scalaires obéissent aux lois de l'algèbre ordinaireLes scalaires obéissent aux lois de l'algèbre ordinaire
30. VecteurVecteur
•• Un vecteurUn vecteur est une entité mathématique définie par n valeurs numériquesest une entité mathématique définie par n valeurs numériques
extraites du même ensemble E (par exemple N, Z, R, C,…)extraites du même ensemble E (par exemple N, Z, R, C,…)
•• Ces valeurs numériques décrivent le moduleCes valeurs numériques décrivent le module et l'orientation du vecteuret l'orientation du vecteur
•• n est appelé la dimension du vecteur.n est appelé la dimension du vecteur.
On dit que le vecteur est défini dans En.On dit que le vecteur est défini dans En.•• On dit que le vecteur est défini dans En.On dit que le vecteur est défini dans En.
•• En est un espace de dimension n.En est un espace de dimension n.
•• Exemple : dans Z2 , dans R3.Exemple : dans Z2 , dans R3.
•• Ex :Ex :
•• DéplacementDéplacement
•• VitesseVitesse
•• AccélérationAccélération
•• ForceForce
3
2
R
Z
z
y
x
y
x
31. Vecteurs unitairesVecteurs unitaires
•• Dans un repère les vecteurs sont décrit dans une base (unités de l’ensemble)Dans un repère les vecteurs sont décrit dans une base (unités de l’ensemble)
•• généralement unitairegénéralement unitaire
•• Le vecteur est représenté par l’addition des vecteurs unitaires à chaque axeLe vecteur est représenté par l’addition des vecteurs unitaires à chaque axe
de coordonnées, en multipliant chacun par la projection (composante)de coordonnées, en multipliant chacun par la projection (composante)
respective du vecteur.respective du vecteur.respective du vecteur.respective du vecteur.
kzjyixV
rrrr
''' ++=
32. VecteurVecteur
•• Les vecteurs obéissent aux lois de l'algèbre vectorielleLes vecteurs obéissent aux lois de l'algèbre vectorielle
•• Opérations élémentairesOpérations élémentaires
•• Produit scalaireProduit scalaire
•• Produit vectorielProduit vectoriel•• Produit vectorielProduit vectoriel
•• Addition de vecteursAddition de vecteurs
•• Produit vecteurProduit vecteur--scalairescalaire
•• NormalisationNormalisation
33. Produit scalaireProduit scalaire
• Le produit scalaire de deux vecteurs est le produit du module du premier par
la composante du second dans la direction du premier
B
r
B
r
θcosA
•• Produit scalaire en fonctionProduit scalaire en fonction
•• du module et de l’angle :du module et de l’angle :
•• des composantes :des composantes :
A
r
θ
A
r
θ
θcosB
θcos. BABA =
rr
zzyyxx BABABABA ++=
rr
.
34. Produit scalaireProduit scalaire
•• Propriétés :Propriétés :
•• CommutativitéCommutativité
DistributivitéDistributivité par l’additionpar l’addition wvwuwvu ...)( +=+
uvvu .. =
•• DistributivitéDistributivité par l’additionpar l’addition
•• Distributivité par un scalaireDistributivité par un scalaire
wvwuwvu ...)( +=+
).()(. vukvku ×=×
35. Produit scalaireProduit scalaire
•• Angle entre deux vecteursAngle entre deux vecteurs
θcos. BABA
rrrr
=
zzyyxx BABABABA ++=
rr
. BA
BABABA zzyyxx
rr
++
=⇒ θcos
•• Signe du produit scalaireSigne du produit scalaire
zzyyxx BABABABA ++=.
°<<°−⇒> 90900. θBA
rr
°±=⇒= 900. θBA
rr
°<<°°−<<°−⇒< 18090901800. θθ ouBA
rr
36. Produit scalaireProduit scalaire
•• ApplicationApplication
•• Projection d’un vecteur sur un autreProjection d’un vecteur sur un autre
•• Élimination des faces cachéesÉlimination des faces cachées
•• Calcul d’angle entre deux vecteursCalcul d’angle entre deux vecteurs
•• Calcul de la quantité de lumière perçue par une faceCalcul de la quantité de lumière perçue par une face
•• OmbrageOmbrage
•• Etc.Etc.
37. Produit vectorielProduit vectoriel
• Le module du produit vectoriel de
deux vecteurs est le produit du module
du premier par la composante du
second qui est perpendiculaire au
premier.
θθθ
rrrrrrrr
===×
A
r
B
r
θ
θsinB
A
r
B
r
θ
θsinA
• Le produit vectoriel est un vecteur
perpendiculaire à A et à B dont le
sens est donné par la règle de la
main droite.
• Le produit vectoriel est nul si les deux
vecteur sont parallèles et maximal s’ils sont
perpendiculaires.
θθθ sin)sin()sin( BAABBABA
rrrrrrrr
===×
nuBABA
rrrrr
)sin( θ=× A
r
B
r
θ
BA
rr
×
nu
r
38. Produit vectoriel en fonction des composantes:
Produit vectorielProduit vectoriel
yx
yx
zx
zx
zy
zy
zyx
BB
AA
k
BB
AA
j
BB
AA
i
BBB
AAA
kji
BA
rrr
rrr
rr
+−+==×
( ) ( )( ) ( )( ) ( )( )
:
2 4 1 4 1 2
1 2 4
1 5 3 5 3 1
3 1 5
2 5 1 4 1 5 3 4 1 1 3 2
6 17 7
Exemple
i j k
A B i j k
A B i j k
A B i j k
− −
× = − = + − +
− −
−
× = × − − × − − × − × − + × − − ×
× = − −
rr r
rr r r r
rr r r r
rr r r r
yxzxzy
zyx BBB
)()()( yxyxzxzxzyzy ABBAkABBAjABBAiBA −+−−−=×
rrrrr
39. Produit vectorielProduit vectoriel
•• PropriétésPropriétés
•• AnticommutativitéAnticommutativité
•• Distributivité sur l'additionDistributivité sur l'addition
)()( uvvu ×−=×
wvwuwvu ×+×=×+ )(•• Distributivité sur l'additionDistributivité sur l'addition
•• Distributivité par un scalaireDistributivité par un scalaire
•• NonNon--associativitéassociativité
wvwuwvu ×+×=×+ )(
kvkukvu ...)( +=+
)()( wvuwvu ××≠××
41. Addition de deux vecteursAddition de deux vecteurs
•• L’addition de deux vecteurs obéit à la règle du parallélogramme.L’addition de deux vecteurs obéit à la règle du parallélogramme.
A
r
BA
rr
+
•• Algébriquement cela se met en oeuvre en additionnant lesAlgébriquement cela se met en oeuvre en additionnant les
composantes individuellement.composantes individuellement.
B
r
kbjbibB
kajaiaA
zyx
zyx
rrrr
rrrr
++=
++=
kbajbaibaBA zzyyxx
rrrrr
)()()( +++++=+
42. Addition de deux vecteursAddition de deux vecteurs
Un vecteur A peut être décomposé en ses
composantes rectangulaires Ax et Ay.
cos
sin
x A
y A
A A
A A
θ
θ
=
=
Il est possible d’additionner des vecteurs en
additionnant les composantes de ces vecteur.
2 2
cos sin
cos sin
x A y A
x B y B
x x x y y y
y
x y R
x
A A A A
B B B B
R A B R A B
R
R R R tg
R
θ θ
θ θ
θ
= =
= =
= + = +
= + =
43. NormeNorme
•• La norme d’un vecteur est sa taille.La norme d’un vecteur est sa taille.
•• Cette taille est calculée par le théorème de Pythagore, puisque les composantesCette taille est calculée par le théorème de Pythagore, puisque les composantes
d’un vecteur forment toujours des triangles rectangles deux à deux.d’un vecteur forment toujours des triangles rectangles deux à deux.
jyixV
rrr
'' +=
•• Pour la dimension n on applique le même principe, en faisant que les deux côtés duPour la dimension n on applique le même principe, en faisant que les deux côtés du
triangle rectangle soient les projections du vecteur dans un soustriangle rectangle soient les projections du vecteur dans un sous--espace de dimensionespace de dimension
nn––1 et dans l’axe de la dimension manquante.1 et dans l’axe de la dimension manquante.
•• La norme d'un vecteur AB est la distance de A à BLa norme d'un vecteur AB est la distance de A à B
ix
r
'
jy
r
'
V
r
22
)'()'( yxV +=
r
222
)'()'()'( zyxV ++=
r
44. Normalisation d’un vecteurNormalisation d’un vecteur
•• La normalisation fait qu’un vecteur devienne unitaire, c’estLa normalisation fait qu’un vecteur devienne unitaire, c’est--àà--dire, avecdire, avec
la norme 1.la norme 1.
•• Pour normaliser un vecteur il suffit de diviser toutes ses composantesPour normaliser un vecteur il suffit de diviser toutes ses composantes
par sa norme.par sa norme.
222
)'()'()'(
'''
zyx
kzjyix
V
V
++
++
=
rrr
r
r
)
)'()'()'(
'
,
)'()'()'(
'
,
)'()'()'(
'
(
222222222
zyx
z
zyx
y
zyx
x
Vn
++++++
=
r
)'()'()'( zyxV ++
V
r
nV
r
nVVV
rrr
.=
45. MatriceMatrice
•• On appelle matrice M un tableau à deux indices de n*m valeursOn appelle matrice M un tableau à deux indices de n*m valeurs
numériques extraites du même ensemble E.numériques extraites du même ensemble E.
mmmmm
mmmmm
1514131211
•• Exemple :Exemple : n = 4, m = 5.n = 4, m = 5.
•• Usuellement n et m sont le nombre de lignes et le nombre de colonnesUsuellement n et m sont le nombre de lignes et le nombre de colonnes
de la matrice.de la matrice.
•• Si n = m la matrice est dite carrée.Si n = m la matrice est dite carrée.
R
mmmmm
mmmmm
mmmmm
4444434241
3434333231
2424232221
47. Produit matrice par vecteurProduit matrice par vecteur
•• Soient :Soient :
•• un vecteur de dimension n (vi, 1 <= i <= n)un vecteur de dimension n (vi, 1 <= i <= n)
•• une matrice carrée de dimension m x n (mij, 1 <= i <= m, 1 <= j <= n).une matrice carrée de dimension m x n (mij, 1 <= i <= m, 1 <= j <= n).
•• Le vecteur produit de par est :Le vecteur produit de par est :
•• On calcule le produit de chaque ligne de la matrice par le vecteur colonne.On calcule le produit de chaque ligne de la matrice par le vecteur colonne.
VMW
rr
.=W
r
M V
r
V
r
M
•• On calcule le produit de chaque ligne de la matrice par le vecteur colonne.On calcule le produit de chaque ligne de la matrice par le vecteur colonne.
nivmw
n
k kiki ≤≤=∑ =
1.1
m x nm x n n x 1n x 1 m x 1m x 1
49. Produit matrice par matriceProduit matrice par matrice
•• Soient deux matrices et de dimensions respectives :Soient deux matrices et de dimensions respectives :
•• n x m (m1ij, 1 <= i <= n, 1 <= j <= m)n x m (m1ij, 1 <= i <= n, 1 <= j <= m)
•• m x p (m2ij, 1 <= i <= m, 1 <= j <= p)m x p (m2ij, 1 <= i <= m, 1 <= j <= p)
•• La matrice M produit de M1 par M2 est de dimension n x p est calculée par la formuleLa matrice M produit de M1 par M2 est de dimension n x p est calculée par la formule
suivante :suivante :
1M 2M
suivante :suivante :
)1,1(2.11
pjnimmm
m
k kjikij ≤≤≤≤=∑ =
n x mn x m m x pm x p n x pn x p
56. TransformationsTransformations
•• Similitudes : 7 DDLSimilitudes : 7 DDL
•• Rotation (3DDL), Translation (3DDL), HomothétieRotation (3DDL), Translation (3DDL), Homothétie
isotrope (1DDL)isotrope (1DDL)
•• PropriétésPropriétés
•• Préservent les anglesPréservent les angles•• Préservent les anglesPréservent les angles
•• Préservent lPréservent les rapports de longueurs
•• PréserventPréservent les rapports de surfaces
•• Préservent lPréservent le parallélisme
• Préservent les formes (un cercle reste un cercle, un
carré reste un carré, etc.)
• Généralisation des transformations Euclidiennes
et Homothétie
58. TransformationsTransformations
•• Transformations linéaires : 9DDLTransformations linéaires : 9DDL
•• Rotation (3DDL), Homothétie (3DDL),Rotation (3DDL), Homothétie (3DDL), ReflectionReflection (3DDL)(3DDL)
•• PropriétésPropriétés
• Préservent les rapports de longueurs sur une droite
• Préservent les parallèles
• Préservent le centre de gravité
• Préservent le plan à l’infini
• Préservent le rapports d’aire
•• Transformations dans espace vectorielTransformations dans espace vectoriel
60. TransformationsTransformations
• Transformations affines : 12 DDL
•• Rotation (3DDL), Translation (3DDL), Homothétie (3DDL),Rotation (3DDL), Translation (3DDL), Homothétie (3DDL), ReflectionReflection
(3DDL)(3DDL)
• Propriétés
Préservent les rapports de longueurs sur une droite• Préservent les rapports de longueurs sur une droite
• Préservent les parallèles
• Préservent le centre de gravité
• Préservent le plan à l’infini
• Préservent le rapports d’aire
• Transformation dans un espace affine
62. TransformationsTransformations
•• Transformations projectives ou homographie : 15 DDLTransformations projectives ou homographie : 15 DDL
•• Rotation (3DDL), Translation (3DDL), Homothétie (3DDL),Rotation (3DDL), Translation (3DDL), Homothétie (3DDL), ReflectionReflection (3DD(3DD
L), Projection (3DDL)L), Projection (3DDL)
•• PropriétésPropriétés
•• Préservent les droites (Colinéarité)Préservent les droites (Colinéarité)Préservent les droites (Colinéarité)Préservent les droites (Colinéarité)
•• Préservent le birapportPréservent le birapport
•• Préservent les intersectionsPréservent les intersections
•• Préservent l’incidencePréservent l’incidence
63. Transformations de modélisationTransformations de modélisation
•Application des transformations de
composition de scène : Passage du
système de coordonnées local de
chaque objet 3D (object space) vers
Transformations de
modélisation
Illumination
(Shading)
Transformations
chaque objet 3D (object space) vers
un repère global (world space)
Object space World space
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
65. TransformationsTransformations
•• Utilisations :Utilisations :
•• Déplacement d'un objet dans une scèneDéplacement d'un objet dans une scène
•• Déplacement d'un observateur par rapport a une scèneDéplacement d'un observateur par rapport a une scène
•• Réplication d'un motif ou d'un objetRéplication d'un motif ou d'un objet
•• Déformation d'un objetDéformation d'un objet
•• ProjectionProjection
•• etc.etc.
66. TransformationsTransformations
•• Un objet est décrit par un ensemble de sommetsUn objet est décrit par un ensemble de sommets
•• Appliquer une transformation à un objet revient à l’appliquer à tousAppliquer une transformation à un objet revient à l’appliquer à tous
ses sommetsses sommets
T+RT+R
67. TransformationsTransformations
•• On utilise la notation vectorielleOn utilise la notation vectorielle
•• Les sommets sont représentés sous forme de vecteursLes sommets sont représentés sous forme de vecteurs
= i
i
i y
x
p
=
i
ii
z
yp
68. TransformationsTransformations
•• Translation :Translation :
•• Ajouter aux coordonnées du sommet la valeur de la translationAjouter aux coordonnées du sommet la valeur de la translation
ixi
yTy
xTx
+=
+=
'
'
•• Notation matricielleNotation matricielle
•• Addition du vecteur de translationAddition du vecteur de translation
+
=
i
i
i
z
y
x
i
i
i
z
y
x
T
T
T
z
y
x
'
'
'
izi
iyi
zTz
yTy
+=
+=
'
'
T
p(x,y)
p’(x’,y’)
Tx
Ty
69. TransformationsTransformations
•• Rotation par rapport à l’origine autour de l’axe ZRotation par rapport à l’origine autour de l’axe Z
•• Calcul à l’aide de l’algèbre vectorielleCalcul à l’aide de l’algèbre vectorielle
zizii
yxy
yxx
−=
−=
cos.sin.'
sin.cos.'
θθ
θθ
zθ
•• Notation matricielleNotation matricielle
•• Multiplication par la matrice de rotationMultiplication par la matrice de rotation
ii
zizii
zz
yxy
=
−=
'
cos.sin.' θθ
−
=
i
i
i
zz
zz
i
i
i
z
y
x
z
y
x
100
0cossin
0sincos
'
'
'
θθ
θθ
p(x,y)
p’(x’,y’)
xx’
y’
y
θz
70. TransformationsTransformations
•• HomothétieHomothétie
•• Multiplication par les facteurs d’échellesMultiplication par les facteurs d’échelles
iyi
ixi
ySy
xSx
.'
.'
=
=
•• Notation matricielleNotation matricielle
•• Multiplication par la matrice d’HomothétieMultiplication par la matrice d’Homothétie
=
i
i
i
z
y
x
i
i
i
z
y
x
S
S
S
z
y
x
00
00
00
'
'
'
izi zSz .' =
p(x,y)
p’(x’,y’)
xSx. x
Sy. y
y
71. TransformationsTransformations
•• La notation matricielleLa notation matricielle
•• Permet une notation simple, concisePermet une notation simple, concise
•• Mais pas vraiment unifiéeMais pas vraiment unifiée
•• Addition ou bien multiplication en fonction de la transformation (traAddition ou bien multiplication en fonction de la transformation (tra
nslation, rotation…)nslation, rotation…)nslation, rotation…)nslation, rotation…)
•• On veut une notation uniqueOn veut une notation unique
•• concaténer plusieurs transformationsconcaténer plusieurs transformations
•• permette de noter aussi les combinaisons de transformationspermette de noter aussi les combinaisons de transformations
73. Coordonnées homogènesCoordonnées homogènes
•• Ainsi, si (x,y,z) sont les coordonnées d'un point de la scène à transformer etAinsi, si (x,y,z) sont les coordonnées d'un point de la scène à transformer et MMHH
la matrice 4*4 de coordonnées homogènes, on effectuera la multiplication :la matrice 4*4 de coordonnées homogènes, on effectuera la multiplication :
MMHH ** [[ x y zx y z 11 ]]
[[•• Ce qui donnera comme résultatCe qui donnera comme résultat [[X Y Z HX Y Z H ].].
•• Les coordonnées du point transformé seront alors (Les coordonnées du point transformé seront alors (x’ y’ z’) =x’ y’ z’) = ((X/H,Y/H,Z/HX/H,Y/H,Z/H).).
•• La matrice 4*4 des coordonnées homogènes peut être considérée commeLa matrice 4*4 des coordonnées homogènes peut être considérée comme
étant composée de 4 sousétant composée de 4 sous--matrices, chacune d'elle étant associée à un typematrices, chacune d'elle étant associée à un type
de transformation.de transformation.
74. Manipulations géométriquesManipulations géométriques
•• Soit un pointSoit un point
•• Soit une transformation géométrique définie par la matrice donnée en coordonnéeSoit une transformation géométrique définie par la matrice donnée en coordonnée
s homogènes.s homogènes.
•• Le Point transformé de par la matrice est :Le Point transformé de par la matrice est :
p
M
'p M pMp .'=•• Le Point transformé de par la matrice est :Le Point transformé de par la matrice est :
•• Transformations :Transformations :
•• TranslationTranslation
•• RotationRotation
•• Changements d’échelleChangements d’échelle
•• SymétriesSymétries
•• ProjectionProjection
•• Affinités orthogonalesAffinités orthogonales
•• etc.etc.
'p M pMp .'=
77. Rotations (angles d’Euler)Rotations (angles d’Euler)
•• Règles pour la construction de la matrice de rotation d’angleRègles pour la construction de la matrice de rotation d’angle Ө
• Ligne 1 associée à x, ligne 2 à y et ligne 3 à z
• 1 sur la diagonale pour l’axe de rotation et la coordonnée
homogéne
cos(Ө) sur la diagonale pour les deux autres axes• cos(Ө) sur la diagonale pour les deux autres axes
• sin(Ө) sur les diagonales supérieure et inférieure pour
“compléter le carré”
• Sur la ligne suivant celle de l’axe de rotation, le sinus est précédé
d’un signe ‘-’
79. Homothétie : Affinités orthogonalesHomothétie : Affinités orthogonales
=
=
×
××
10
0
1000
000
000
000
31
1333S
S
S
S
R
z
y
x
xSxS .000
PS
zS
yS
xS
z
y
x
S
S
S
PSP
z
y
x
z
y
x
.
1
.
.
.
1
.
1000
000
000
000
.' =
=
==
1000
0100
0010
000xS
1000
000
0010
0001
zS
1000
0100
000
0001
yS
Affinité d'axe x par rapportAffinité d'axe x par rapport
au plan yOzau plan yOz
Affinité d'axe y par rapportAffinité d'axe y par rapport
au plan xOzau plan xOz
Affinité d'axe z par rapportAffinité d'axe z par rapport
au plan xOyau plan xOy
80. GlissementGlissement
•• Appelée aussiAppelée aussi shearshear ou cisaillement : étirement suivant un axeou cisaillement : étirement suivant un axe
•• La matrice d'un glissement parallèle à x et de rapport k est :La matrice d'un glissement parallèle à x et de rapport k est :
0100
0010
001 k
•• La matrice d'un glissement parallèle à x, de rapport k et de ligne de base y = yLa matrice d'un glissement parallèle à x, de rapport k et de ligne de base y = yrefref est :est :
1000
0100
−
1000
0100
0010
0.1 refykk
refy
85. p’ = M . p et p" = M’. p’
=>
Cas général
Composition de Transformations
=>
p" = M’ . M . p
ou
p" = M" . p avec M" = M’ . M
86. Ordre d’Application
Composition de Transformations
p" = M’ . M . p => M puis M’
On applique M à P, puis M’ au résultat :On applique M à P, puis M’ au résultat :
l’ordre dl’ordre d ’application des transformations se lit de’application des transformations se lit de
droite à gauchedroite à gauche, et non dans le sens de la lecture, et non dans le sens de la lecture
87. Composition de Transformations
•• Les transformations élémentaires sont définies parLes transformations élémentaires sont définies par
rapport à l’origine du repère de la scènerapport à l’origine du repère de la scène
•• Pour se placer d’un points quelconque , on doit :Pour se placer d’un points quelconque , on doit :
1.1.Revenir à l’origine du repère (translation) : TRevenir à l’origine du repère (translation) : TPP-->O>O1.1.Revenir à l’origine du repère (translation) : TRevenir à l’origine du repère (translation) : TPP-->O>O
2.2.Faire la(les) transformation(s) voulue(s)Faire la(les) transformation(s) voulue(s)
3.3.Se remettre au point de départ (translation) : TSe remettre au point de départ (translation) : TOO-->P>P
88. Exemple 1 :
On désire établir la transformation consistant à effectuer une
rotation de Өz radians autour de l'axe colinéaire à z passant
par le point P de coordonnées (Tx,Ty,Tz).
Composition de Transformations
par le point P de coordonnées (Tx,Ty,Tz).
ZZ
XX
YY
R(θz)
89. Cette transformation M est réalisée en amenant p à l'origine par une
translation T de -p, puis en effectuant une rotation R d'angle Өz autour de
l'axe Oz, et enfin en ramenant p à sa position initiale par une translation T'
de p :
p’ = (T(x,y,z) . R(θz) . T(-x,-y,-z) ) . p = M . p
Composition de Transformations
ZZ
XX
YY
( z )
ZZ
XX
YY
T(-x,-y,-z)
T(x,y,z)
R(θz)
90. Composition de Transformations
−
−
−
−
=
1000
100
010
001
.
1000
0100
00cossin
00sincos
.
1000
100
010
001
z
y
x
zz
zz
z
y
x
T
T
T
T
T
T
M
θθ
θθ
++−
++−−
=
−
+−
+−−
=
1000
0100
cossin0cossin
sincos0sincos
1000
100
cossin0cossin
sincos0sincos
.
1000
100
010
001
100010001000
yzyzxzz
xzyzxzz
z
zyzxzz
zyzxzz
z
y
x
TTT
TTT
M
T
TT
TT
T
T
T
M
θθθθ
θθθθ
θθθθ
θθθθ
91. Composition de Transformations
•• Les compositions de transformations servent àLes compositions de transformations servent à
Décrire une hiérarchie de transformations : graphe de scèneDécrire une hiérarchie de transformations : graphe de scène•• Décrire une hiérarchie de transformations : graphe de scèneDécrire une hiérarchie de transformations : graphe de scène
•• Changement de repèreChangement de repère
92. Modélisation hiérarchiqueModélisation hiérarchique
•• Un modèle hiérarchique permet de décrire facilement desUn modèle hiérarchique permet de décrire facilement des
objets complexes composés d’objets simplesobjets complexes composés d’objets simples
•• La scène est organisée dans un arbreLa scène est organisée dans un arbre
•• Les objets ne sont plus définis par leur transformation absolueLes objets ne sont plus définis par leur transformation absolue
par rapport au repère global, mais par leur transformationpar rapport au repère global, mais par leur transformationpar rapport au repère global, mais par leur transformationpar rapport au repère global, mais par leur transformation
relative dans cet arbre :relative dans cet arbre :
•• Le repère associé à la racine est le repère de la scèneLe repère associé à la racine est le repère de la scène
•• A chaque nœud est associé un repèreA chaque nœud est associé un repère
•• A chaque arc est associée une transformation géométrique qui poA chaque arc est associée une transformation géométrique qui po
sitionne l’objet fils dans le repère de son pèresitionne l’objet fils dans le repère de son père
•• Un objet peut être inclus plusieurs fois dans la hiérarchie :Un objet peut être inclus plusieurs fois dans la hiérarchie :
•• la structure de données est un Graphe Orienté Acyclique (DAG)la structure de données est un Graphe Orienté Acyclique (DAG)
94. Modélisation hiérarchiqueModélisation hiérarchique
•• Construction du graphConstruction du graph
•• On commence par un processus descendant ("topOn commence par un processus descendant ("top--down") dansdown") dans
lequel on effectue une décomposition récursive du modèlelequel on effectue une décomposition récursive du modèle
géométrique en objets plus simples jusqu'à aboutir à des objetsgéométrique en objets plus simples jusqu'à aboutir à des objets
élémentaires (primitives géométriques)élémentaires (primitives géométriques)élémentaires (primitives géométriques)élémentaires (primitives géométriques)
•• On construit la chaine cinématique (graph) depuis la racine pourOn construit la chaine cinématique (graph) depuis la racine pour
aboutir aux nœudsaboutir aux nœuds
98. Changement de repèreChangement de repère
•• Permet de transformer les coordonnées d'un point expriméesPermet de transformer les coordonnées d'un point exprimées
dans un premier repère en coordonnées exprimées dansdans un premier repère en coordonnées exprimées dans
deuxième repèredeuxième repère
•• Utile lorsque :Utile lorsque :
•• Les objets manipulés sont définis dans des repères locauxLes objets manipulés sont définis dans des repères locaux
•• Animation, modélisation, etc.Animation, modélisation, etc.
•• la modélisation des caméras.la modélisation des caméras.
99. Changement de repèreChangement de repère
•• Soient deux repèresSoient deux repères RR11 etet RR22
•• SoitSoit MM la matrice de passage du repèrela matrice de passage du repère RR22 au repèreau repère RR11
•• SoientSoient (x(x22, y, y22, z, z22, 1), 1) les coordonnées deles coordonnées de pp22 dansdans RR22
•• SoientSoient (x(x11, y, y11, z, z11, 1), 1) les coordonnées deles coordonnées de pp11 dansdans RR11
ZZ XX
RR11
ZZ11
YY11
XX11
RR22
ZZ22
YY22
XX22
MM
100. Changement de repèreChangement de repère
12 .pMp =
21312111 x xTRRRx
21
1
.
10001
2
2
12
333231
232221
1
1
R
z
y
R
z
y
TRRR
TRRR
z
y
=
→
12
333231
232221
131211
1000 →
=
z
y
x
TRRR
TRRR
TRRR
M
105. Transformation écranTransformation écran
•Les primitives 3D sont projetées sur
l'espace image 2D (screen space)
Transformations de
modélisation
Illumination
(Shading)
Transformations
NDC
Screen
Space
Transformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
106. La projectionLa projection
•• La projection est une réduction du nombre de dimensions.La projection est une réduction du nombre de dimensions.
•• L’infographie est concernée par les projections de 3L’infographie est concernée par les projections de 3--D vers 2D vers 2--D.D.
AAAA
BB
aa
bb
107. XXXX
•• On note que la projection d'une droite en 3D est une droite en 2D.On note que la projection d'une droite en 3D est une droite en 2D.
•• Il est suffisant de projeter les sommets d'une droite 3D et puis de tracer la droiteIl est suffisant de projeter les sommets d'une droite 3D et puis de tracer la droite
2D entre ces projections.2D entre ces projections.
108. La projectionLa projection
•• LesLes projectionsprojections desdes objetsobjets sontsont forméesformées parpar lesles intersectionsintersections dede ligneslignes
appeléesappelées projecteursprojecteurs avecavec unun planplan appeléappelé planplan dede vuevue ouou planplan dede projectionprojection..
•• LesLes projecteursprojecteurs sontsont desdes ligneslignes partantpartant d’und’un pointpoint arbitrairementarbitrairement appeléappelé
centrecentre dede projectionprojection (CP),(CP), enen traversanttraversant chaquechaque pointpoint d’und’un objetobjet..
SiSi lesles projecteursprojecteurs sontsont desdes ligneslignes droites,droites, etet queque lele planplan dede projectionprojection estest plat,plat,•• SiSi lesles projecteursprojecteurs sontsont desdes ligneslignes droites,droites, etet queque lele planplan dede projectionprojection estest plat,plat,
lala projectionprojection estest uneune projectionprojection géométriquegéométrique 22DD..
ProjecteursProjecteurs
Centre de projectionCentre de projection
(CP)(CP)
Plan de projectionPlan de projection AA
BB
aa
bb
109. Les projectionsLes projections
•• Si le centre de projection (CP) est localisé à un point fini de l’esSi le centre de projection (CP) est localisé à un point fini de l’es
pace tridimensionnel, le résultat est une projection en perspectipace tridimensionnel, le résultat est une projection en perspecti
ve.ve.
Si le CP est localisé à l’infini, tous les projecteurs sont parallèlesSi le CP est localisé à l’infini, tous les projecteurs sont parallèles•• Si le CP est localisé à l’infini, tous les projecteurs sont parallèlesSi le CP est localisé à l’infini, tous les projecteurs sont parallèles
et le résultat est une projection parallèle.et le résultat est une projection parallèle.
AA
BB
aa
bb
AA
BB
aa
bb
Projection perspectiveProjection perspective projection parallèleprojection parallèle
110. Les projectionsLes projections
•• Deux familles de projections :Deux familles de projections :
•• Projections parallèles.Projections parallèles.
•• Projections perspectives.Projections perspectives.
1 point 2 points 3 points
111. Projections parallèlesProjections parallèles
•• Conditions :Conditions :
•• La projection se fait dans le plan de projection suivant une direction deLa projection se fait dans le plan de projection suivant une direction de
projection (DP).projection (DP).
•• Les lignes parallèles restent parallèlesLes lignes parallèles restent parallèles
•• PropriétésPropriétés
•• Les projections parallèles conservent les rapports des distances selon uneLes projections parallèles conservent les rapports des distances selon une•• Les projections parallèles conservent les rapports des distances selon uneLes projections parallèles conservent les rapports des distances selon une
direction donnéedirection donnée
•• Pas réaliste mais peut être utilisée pour des mesures exactesPas réaliste mais peut être utilisée pour des mesures exactes
•• Il existe deux types de projections parallèles dépendant du fait que la directionIl existe deux types de projections parallèles dépendant du fait que la direction
de projection soit perpendiculaire au plan de projection :de projection soit perpendiculaire au plan de projection :
•• Projections orthographiquesProjections orthographiques
•• Projections obliquesProjections obliques
objetobjet
projetéprojeté
projectionprojection
de l’objetde l’objet
DPDP
112. Projections parallèlesProjections parallèles
•• Projection orthographiqueProjection orthographique
•• Projecteurs parallèles entre euxProjecteurs parallèles entre eux
•• Projecteurs perpendiculaires au plan imageProjecteurs perpendiculaires au plan image
•• Projection ObliqueProjection Oblique
•• Projecteurs parallèles entre euxProjecteurs parallèles entre eux
•• Projecteurs NON perpendiculaires au plan imageProjecteurs NON perpendiculaires au plan image
Plan de projectionPlan de projection
Plan de projectionPlan de projection
114. Projection orthographiqueProjection orthographique
•• La projection orthographique consiste à supprimer uneLa projection orthographique consiste à supprimer une
dimensiondimension
•• La dimension supprimée est celle suivant laquelle on réaliseLa dimension supprimée est celle suivant laquelle on réalise
la projectionla projection
Axe de projectionAxe de projection
ZZ
XX
XX
ppP’P’
Plan de projectionPlan de projection
116. Projection orthographiqueProjection orthographique
•• Vues de devant, d’en haut et de côté : la projection est faite sur un deVues de devant, d’en haut et de côté : la projection est faite sur un de
s plans perpendiculaires aux axes des coordonnées en mettant une des plans perpendiculaires aux axes des coordonnées en mettant une de
s coordonnées du point à 0.s coordonnées du point à 0.
=
=
=
1000
0000
0010
0001
1000
0100
0000
0001
1000
0100
0010
0000
PZPYPX MMM
Elimination de la dimension suivant la quelle nous réalisons la projectionElimination de la dimension suivant la quelle nous réalisons la projection
117. Projection orthographiqueProjection orthographique
•• Projection orthographique axonométriqueProjection orthographique axonométrique
•• Le plan de projection n’est pas perpendiculaire aux axes desLe plan de projection n’est pas perpendiculaire aux axes des
coordonnés, donc plusieurs facettes de l’objet sont montrées encoordonnés, donc plusieurs facettes de l’objet sont montrées en
même temps.même temps.même temps.même temps.
118. Projection obliqueProjection oblique
•• Direction de la projection n’est pas perpendiculaire au planDirection de la projection n’est pas perpendiculaire au plan
de projectionde projection
•• DP coupe le plan de projection en faisant un angle obliqueDP coupe le plan de projection en faisant un angle oblique
avec celuiavec celui--ci.ci.avec celuiavec celui--ci.ci.
•• Une projection cavalière est obtenue quand l’angle est de 45ºUne projection cavalière est obtenue quand l’angle est de 45º
•• Pour une projection cabinet l’angle est de 63.4º.Pour une projection cabinet l’angle est de 63.4º.
•• La matrice de projection est une combinaison de transformaLa matrice de projection est une combinaison de transforma--
tions d’étirement et de projection orthographique.tions d’étirement et de projection orthographique.
121. Projection perspectiveProjection perspective
•• Réaliste : La taille de la projection d’un objet varie inversementRéaliste : La taille de la projection d’un objet varie inversement
avec sa distance de CPavec sa distance de CP
|ab| = d0 . 1/d . |AB|
•• Ne maintient pas la forme et les mesures exactesNe maintient pas la forme et les mesures exactes
•• Les projections perspectives ne conservent pas le parallélismeLes projections perspectives ne conservent pas le parallélisme•• Les projections perspectives ne conservent pas le parallélismeLes projections perspectives ne conservent pas le parallélisme
des droites non parallèles au plan de projectiondes droites non parallèles au plan de projection
•• La projection de n’importe quel ensemble de lignes parallèlesLa projection de n’importe quel ensemble de lignes parallèles
non parallèles au plan de projection convergent vers un mêmenon parallèles au plan de projection convergent vers un même
pointpoint
•• Le point de fuite.Le point de fuite.
AA
BB
aa
bb
dd
dd00
122. Projection perspectiveProjection perspective
•• Point de fuitePoint de fuite
•• Si une droite D coupe le plan de projection, il existe un point F,Si une droite D coupe le plan de projection, il existe un point F,
appelé point de fuite appartenant à la projection de toute droiteappelé point de fuite appartenant à la projection de toute droiteappelé point de fuite appartenant à la projection de toute droiteappelé point de fuite appartenant à la projection de toute droite
parallèle à D.parallèle à D.
123. Projection perspectiveProjection perspective
•• On différencie les projections en perspective par le nombreOn différencie les projections en perspective par le nombre
de points de fuite pour les directions des axes du repère.de points de fuite pour les directions des axes du repère.
Projection à un point de fuiteProjection à un point de fuite Projection à des points de fuiteProjection à des points de fuite Projection à trois points de fuiteProjection à trois points de fuite
125. Projection perspectiveProjection perspective
•• Calcul d’une perspective de point de fuite uniqueCalcul d’une perspective de point de fuite unique
XX Plan dePlan de⇒
+−
=
fz
x
f
xp
--zz++dd
xx
xxpp
ffzz
ZZ
Plan dePlan de
projectionprojection
Centre deCentre de
projectionprojection
1
.
+−
=
⇒
+−
=
⇒
+−
=
f
z
x
x
fz
fx
x
fzf
p
p
126. Projection perspectiveProjection perspective
•• Calcul d’une perspective de point de fuite uniqueCalcul d’une perspective de point de fuite unique
YY Plan dePlan de⇒
+−
=
fz
y
f
yp
yy
yypp
ff
--zz++dd
zz
ZZ
Plan dePlan de
projectionprojection
Centre deCentre de
projectionprojection
1
.
+−
=
⇒
+−
=
⇒
+−
=
f
z
y
y
fz
fy
y
fzf
p
p
127. Projection perspectiveProjection perspective
•• Représentation en forme matricielle :Représentation en forme matricielle :
⇒
+−
=
+−
=
1
,
1
f
z
y
y
f
z
x
x pp
⇒
−=
+−+−
1
.
1000
1
100
0010
0001
'
'
'
'
11
z
y
x
f
w
z
y
x
ff
129. Projection perspectiveProjection perspective
Plan dePlan de
projectionprojection
ffzz
ZZ
Centre deCentre de
projectionprojection
z’z’
La taille de la projection varie en fonction de la distance de l’objet au plan de projectionLa taille de la projection varie en fonction de la distance de l’objet au plan de projection
130. Projection perspectiveProjection perspective
Plan dePlan de
projectionprojection
ff22
zz
ZZ
Centre deCentre de
projectionprojection
ff11
La taille de la projection varie en fonction de la distance du centre de projectionLa taille de la projection varie en fonction de la distance du centre de projection
au plan de projectionau plan de projection
131. Projection perspectiveProjection perspective
• Plus f est large, plus la projection tend vers une projection
parallèle, où la profondeur a un petit effet dans les points
projetés et moins de sensation dans la perspective obtenue.
• Plus f est petit, plus la projection diverge de la projection
parallèle. La profondeur a une influence considérable sur les
points projetés à la limite de créer des effets de perspective
exagérés.
136. Projection perspectiveProjection perspective
01312110010001
cx xrrrt
Passage du repère monde au plan imagePassage du repère monde au plan image
=
1
.
1000
0333231
0232221
0131211
.
1000
100
010
001
.
1
1
00
0100
0010
0001
.
1111
111
001
1
0
0
c
c
c
z
y
x
z
y
x
rrr
rrr
rrr
t
t
t
f
v
u
v
u
=
1
.
1000
333231
232221
131211
.
1111
01
00
1
0
0
c
c
c
z
y
x
z
y
x
trrr
trrr
trrr
vf
uf
v
u
137. RasterisationRasterisation
•Découpe des primitives 2D en pixels
•Interpole les valeurs connues aux
sommets : couleur, profondeur, etc.
pour chaque fragment affiché
Transformations de
modélisation
Illumination
(Shading)
Transformations pour chaque fragment affichéTransformations
d’affichage
Clipping
Transformation écran
((Projection)
Pixelisation
(Rasterization)
Visibilité / Affichage
138. RasterisationRasterisation
•• Traçage :Traçage :
Segments de droitesSegments de droites•• Segments de droitesSegments de droites
•• CerclesCercles
•• EllipsesEllipses
•• Remplissage des primitives projetéesRemplissage des primitives projetées
139. Tracé de segments de droitesTracé de segments de droites
•• Algorithme de base pour beaucoup de traitements de l'InformatiqueAlgorithme de base pour beaucoup de traitements de l'Informatique
Graphique:Graphique:
•• dessin en fil de fer,dessin en fil de fer,
•• remplissage,remplissage,
•• élimination des parties cachées,élimination des parties cachées,•• élimination des parties cachées,élimination des parties cachées,
•• ......
Bons tracés Mauvais tracés Mauvais tracés
140. Tracé de segments de droitesTracé de segments de droites
•• Trois impératifs:Trois impératifs:
•• Tout point du segment discret est traversé par le segment continu.Tout point du segment discret est traversé par le segment continu.
•• Tout point du segment discret touche au moins un autre point soitTout point du segment discret touche au moins un autre point soit
par l'un de ses cotés (4par l'un de ses cotés (4--connexité), soit par un de ses sommetsconnexité), soit par un de ses sommetspar l'un de ses cotés (4par l'un de ses cotés (4--connexité), soit par un de ses sommetsconnexité), soit par un de ses sommets
(8(8--connexité).connexité).
•• On trace le moins de points possibles.On trace le moins de points possibles.
4-connexité 8-Connexité
141. Tracé de segments par l'équationTracé de segments par l'équation
cartésiennecartésienne
•• Le tracé d’un segment entre deux pointsLe tracé d’un segment entre deux points (x(x11,y,y11)) etet (x(x22,y,y22)) dede RR22..
•• On pose comme hypothèse simplificatrice :On pose comme hypothèse simplificatrice :
xx22>x>x11, y, y22>y>y11 etet (x(x22--xx11) >= (y) >= (y22--yy11))
•• Tous les autres cas peuvent s'y rapporter.Tous les autres cas peuvent s'y rapporter.•• Tous les autres cas peuvent s'y rapporter.Tous les autres cas peuvent s'y rapporter.
•• On utilise l’équation cartésienne de la droite :On utilise l’équation cartésienne de la droite :
11
12
12
)(
)(
axyb
xx
yy
a
avec
baxy
+=
−
−
=
+=
142. Tracé de segments par l'équationTracé de segments par l'équation
cartésiennecartésienne
DroiteSimple(int xDroiteSimple(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
a = ya = y22 –– yy11 / x/ x22 –– xx11 ;;
b = yb = y11 –– a . xa . x11 ;;b = yb = y11 –– a . xa . x11 ;;
xx <<-- xx11 ;;
while (x < xwhile (x < x11))
{{
xx <<-- xx11+1 ;+1 ;
AfficherPixel(x, (int) a.x+b) ;AfficherPixel(x, (int) a.x+b) ;
}}
}}
143. Tracé de segments par l'équationTracé de segments par l'équation
cartésiennecartésienne
•• Incrémentation suivant l’axe xIncrémentation suivant l’axe x
DroiteSimple(int xDroiteSimple(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
a = ya = y22 –– yy11 / x/ x22 –– xx11 ; // a = 1.25; // a = 1.25
b = yb = y –– a . xa . x ;; // b =// b = --0.250.25
Tracé : (1,1) à (5,6)
b = yb = y11 –– a . xa . x11 ;; // b =// b = --0.250.25
xx <<-- xx11 ;;
while (x < xwhile (x < x22)) // x : 1// x : 1 -->> 55
{{
xx <<-- xx11+1 ;+1 ;
AfficherPixel(x, (int) a.x+b) ;AfficherPixel(x, (int) a.x+b) ;
}}
}}
xx
yy
(1,1)
(2,2)
(3,3)
(4,4)
(5,6)
144. Tracé de segments par l'équationTracé de segments par l'équation
cartésiennecartésienne
•• Incrémentation suivant l’axe yIncrémentation suivant l’axe y
DroiteSimple(int xDroiteSimple(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
a = ya = y22 –– yy11 / x/ x22 –– xx11 ; // a = 1.25; // a = 1.25
b = yb = y –– a . xa . x ;; // b =// b = --0.250.25
Tracé : (1,1) à (5,6)
b = yb = y11 –– a . xa . x11 ;; // b =// b = --0.250.25
xx <<-- xx11 ;;
while (y < ywhile (y < y22)) // y : 1// y : 1 -->> 66
{{
yy <<-- yy11+1 ;+1 ;
AfficherPixel((int) (yAfficherPixel((int) (y--b)/a, y) ;b)/a, y) ;
}}
}}
xx
yy
(1,1)
(1,2)
(2,3)
(3,4)
(4,5)
(5,6)
145. Tracé de segments par l'équationTracé de segments par l'équation
cartésiennecartésienne
•• Il faut switcher entre les deux versions en fonction de lIl faut switcher entre les deux versions en fonction de l
a pente de la droitea pente de la droite
•• Pente < 1 : version xPente < 1 : version x
•• Pente > 1 : version yPente > 1 : version y
version : yversion : y
version : xversion : x
146. Tracé de segments par l'équationTracé de segments par l'équation
cartésiennecartésienne
•• Caractéristiques:Caractéristiques:
•• Simplicité algorithmiqueSimplicité algorithmique•• Simplicité algorithmiqueSimplicité algorithmique
•• Lenteur due à l'utilisation de réels, d'une divisionLenteur due à l'utilisation de réels, d'une division
et de multiplications et d’opérations d’arrondissement (cast)et de multiplications et d’opérations d’arrondissement (cast)
152. Algorithmes de BresenhamAlgorithmes de Bresenham
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
xx <<-- xx11 ;;
yy <<-- yy11 ;;
e = 2 . dye = 2 . dy -- dx ;dx ;
IncH = 2 . dy ;IncH = 2 . dy ;IncH = 2 . dy ;IncH = 2 . dy ;
IncD = 2 . (dyIncD = 2 . (dy –– d x) ;d x) ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
x = x + 1;x = x + 1;
if (e > 0)if (e > 0)
{{
y = y + 1;y = y + 1;
e = e + IncD ;e = e + IncD ;
}}
elseelse
e = e + IncH ;e = e + IncH ;
}}
}}
153. Algorithmes de BresenhamAlgorithmes de Bresenham
Principe :
• Paramètre de décision : e (distance pixel -> droite)
• Si e < 0.5 pixel = > activer le pixel E
• Si e > 0.5 pixel = > activer le pixel NE
Pixel NEPixel NE
Pixel EPixel E
Pixel NEPixel NE
Pixel EPixel E
ee ee
177. Algorithmes de BresenhamAlgorithmes de Bresenham
•• Algorithme de baseAlgorithme de base
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
a = dy / dx ;a = dy / dx ;
xx <<-- xx11 ;;
<<--
xx xx ;;
yy <<-- yy11 ;;
e = 0 ;e = 0 ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
e = e + a ;e = e + a ;
x= x + 1;x= x + 1;
if (e > 0.5)if (e > 0.5)
{{
y =y + 1;y =y + 1;
e =ee =e -- 1;1;
}}
}}
}}
178. Algorithmes de BresenhamAlgorithmes de Bresenham
•• supprimer la division parsupprimer la division par ddxx
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
xx <<-- xx11 ;;
yy <<-- yy11 ;;
e = 0 ;e = 0 ;e = 0 ;e = 0 ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
e = e + dy ;e = e + dy ;
x = x + 1;x = x + 1;
if (e > dx/2)if (e > dx/2)
{{
y = y + 1;y = y + 1;
e = ee = e -- dx;dx;
}}
}}
}}
179. Algorithmes de BresenhamAlgorithmes de Bresenham
•• division par 2 à supprimerdivision par 2 à supprimer
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
xx <<-- xx11 ;;
yy <<-- yy11 ;;
e = 0 ;e = 0 ;e = 0 ;e = 0 ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
e = e + 2 . dy ;e = e + 2 . dy ;
x = x + 1;x = x + 1;
if (e > dx)if (e > dx)
{{
y = y + 1;y = y + 1;
e = ee = e –– 2 . dx;2 . dx;
}}
}}
}}
180. Algorithmes de BresenhamAlgorithmes de Bresenham
•• optimisations pour rendre l'algorithme plus rapideoptimisations pour rendre l'algorithme plus rapide : tester le signe de e au lieu de le comparer à: tester le signe de e au lieu de le comparer à
un autre nombreun autre nombre
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
xx <<-- xx11 ;;
yy <<-- yy ;;yy <<-- yy11 ;;
e =e = -- dx ;dx ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
e = e + 2 . dy ;e = e + 2 . dy ;
x = x + 1;x = x + 1;
if (e > 0)if (e > 0)
{{
y = y + 1 ;y = y + 1 ;
e = ee = e –– 2 . dx ;2 . dx ;
}}
}}
}}
181. Algorithmes de BresenhamAlgorithmes de Bresenham
•• modifier e qu'une seule fois lors de chaque itérationmodifier e qu'une seule fois lors de chaque itération
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
xx <<-- xx11 ;;
yy <<-- yy11 ;;
e = 2 . dye = 2 . dy -- dx ;dx ;e = 2 . dye = 2 . dy -- dx ;dx ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
x = x + 1;x = x + 1;
if (e > 0)if (e > 0)
{{
y = y + 1;y = y + 1;
e = e + 2 . (dye = e + 2 . (dy –– d x) ;d x) ;
}}
elseelse
e = e + 2 . dy ;e = e + 2 . dy ;
}}
}}
182. Algorithmes de BresenhamAlgorithmes de Bresenham
•• calculer d'avance les deux incréments possibles pour e : déplacement horizontal ou diagonalcalculer d'avance les deux incréments possibles pour e : déplacement horizontal ou diagonal
DroiteBresenham(int xDroiteBresenham(int x11,,int xint x22,,int yint y11,,int yint y22))
{{
dx = / xdx = / x22 –– xx11
dy = ydy = y22 –– yy11
xx <<-- xx11 ;;
yy <<-- yy11 ;;
e = 2 . dye = 2 . dy -- dx ;dx ;
IncH = 2 . dy ;IncH = 2 . dy ;IncH = 2 . dy ;IncH = 2 . dy ;
IncD = 2 . (dyIncD = 2 . (dy –– d x) ;d x) ;
while (x < xwhile (x < x22))
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
x = x + 1;x = x + 1;
if (e > 0)if (e > 0)
{{
y = y + 1;y = y + 1;
e = e + IncD ;e = e + IncD ;
}}
elseelse
e = e + IncH ;e = e + IncH ;
}}
}}
183. Algorithmes de BresenhamAlgorithmes de Bresenham
•• Caractéristiques :Caractéristiques :
•• Plus grande complexité algorithmique.Plus grande complexité algorithmique.
•• Rapidité due àRapidité due à
•• Utilisation exclusive d'entiers courts (valeurs maximales de l'ordreUtilisation exclusive d'entiers courts (valeurs maximales de l'ordre
de la résolution de l'écrande la résolution de l'écran --> petites valeurs)> petites valeurs)
•• Opérations arithmétiques simples sur ces entiers (additions,Opérations arithmétiques simples sur ces entiers (additions,
soustractions et comparaisons).soustractions et comparaisons).
196. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
• On suppose le centre à l’origine
• Le rayon r est un entier
• On trace seulement le deuxième octant
• Les autres octants tracés par symétrie• Les autres octants tracés par symétrie
(x,y)
(y,x)
(x,-y)
(y,-x)
(-x,y)
(-y,x)
(-y,-x)
(-x,-y)
200. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• Forme implicite du cercle :Forme implicite du cercle : f(x,y) = x² + y²f(x,y) = x² + y² -- r²r²
0),( >yxf
0),( =yxf
0),( <yxf
201. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite
(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
202. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite MM
E
Q
(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
MM
SE
203. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite
(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
204. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite MM
E(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
MM
SE
Q
205. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite
(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
206. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite
(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
MM
SE
E
Q
207. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• On calcule la valeur deOn calcule la valeur de f(x,y)f(x,y) au pointau point MM, noté, noté eeii ::
•• eeii = f (x= f (xii + 1, y+ 1, yii --1/2 ) = (x1/2 ) = (xii + 1)²+ 1)² -- (y(yii --1/2 )²1/2 )² -- r²r²
e ≥ 0: M est au-dessus de la droite
(x(xii, y, yii))
• ei ≥ 0: M est au-dessus de la droite
• Q est sous M on va à SE
• ei < 0: M est sous la droite
• Q est au-dessus de M on va à E
208. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
•• Le calcul de l’erreur se fait manière incrémentaleLe calcul de l’erreur se fait manière incrémentale
•• Pour chaque pixel activé (en cours de trainement) nous calculons le paramètre dePour chaque pixel activé (en cours de trainement) nous calculons le paramètre de
décision du pixel suivantdécision du pixel suivant
eeii = f (x= f (xii + 1, y+ 1, yii --1/2 )1/2 )
•• SiSi eeii > 0> 0 ((MM à l’extérieur) alors le pixel à afficher est SEà l’extérieur) alors le pixel à afficher est SESiSi ee > 0> 0 ((MM à l’extérieur) alors le pixel à afficher est SEà l’extérieur) alors le pixel à afficher est SE
•• Le prochain point milieu seraLe prochain point milieu sera (x(xii + 2, y+ 2, yii --3/2 )3/2 )
•• eei+1i+1 == f (xf (xii + 2, y+ 2, yii --3/2 ) = e3/2 ) = eii + 2 . x+ 2 . xii –– 2 . y2 . yii + 5+ 5
•• SiSi eeii < 0< 0 ((MM à l’intérieur) alors le pixel à afficher est Eà l’intérieur) alors le pixel à afficher est E
•• Le prochain point milieu seraLe prochain point milieu sera (x(xii + 2, y+ 2, yii --1/2 )1/2 )
•• eei+1i+1 == f (xf (xii + 2, y+ 2, yii --1/2 ) = e1/2 ) = eii + 2 . x+ 2 . xii + 3+ 3
MM
SE
E
Q
(x(xii, y, yii))
209. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
CerclePointMilieu(int r)CerclePointMilieu(int r) // le center du cercle est à l’origine// le center du cercle est à l’origine
{{
int x = 0 ;int x = 0 ;
int y = rint y = r
double e = 5.0/4.0double e = 5.0/4.0 –– r ;r ; // point de départ(0,r) => point intermédiaire (1,r// point de départ(0,r) => point intermédiaire (1,r--1/2)1/2)
AfficherPixel(x, y) ;AfficherPixel(x, y) ;AfficherPixel(x, y) ;AfficherPixel(x, y) ;
While (y > x) {While (y > x) { // octant 2// octant 2
if(e < 0)if(e < 0) // pixel suivant E// pixel suivant E
e = e + 2 . x + 3 ;e = e + 2 . x + 3 ;
else{else{ // pixel suivant SE// pixel suivant SE
e = e + 2 . xe = e + 2 . x –– 2 . y + 5 ;2 . y + 5 ;
y = yy = y –– 1 ;1 ;
}}
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
x = x + 1 ;x = x + 1 ;
}}
}}
210. •• La généralisation aux huit octants se fait en remplaçant la procLa généralisation aux huit octants se fait en remplaçant la proc
édure AfficherPixel() de l’algorithme par la procédure suivante :édure AfficherPixel() de l’algorithme par la procédure suivante :
AfficherPixelCercle(x, y)AfficherPixelCercle(x, y)
{{
(x,y)(-x,y)
{{
AfficherPixel(x, y) ;AfficherPixel(x, y) ;
AfficherPixel(x,AfficherPixel(x, --y) ;y) ;
AfficherPixel(AfficherPixel(--x, y) ;x, y) ;
AfficherPixel(AfficherPixel(--x,x, --y) ;y) ;
AfficherPixel(y, x) ;AfficherPixel(y, x) ;
AfficherPixel(y,AfficherPixel(y, --x) ;x) ;
AfficherPixel(AfficherPixel(--y, x) ;y, x) ;
AfficherPixel(AfficherPixel(--y, xy, x--) ;) ;
}}
(y,x)
(x,-y)
(y,-x)
(-y,x)
(-y,-x)
(-x,-y)
211. •• OptimisationOptimisation
•• Au départAu départ
•• ee00 = 5.0/4.0= 5.0/4.0 –– r = 1.25r = 1.25 –– rr
•• Si eSi eii < 0 alors on va à «< 0 alors on va à « EE »»
•• eei+1i+1 = e= eii + 2 . x+ 2 . xii + 3 ;+ 3 ;
•• Sinon eSinon eii > 0 alors on va à «> 0 alors on va à « SESE »»
•• eei+1i+1 = e= eii + 2 . x+ 2 . xii –– 2 . y2 . yii + 5 ;+ 5 ;
212. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
• Si on pose hi = ei – 0.25, on peut remplacer l’initialisation par:
h0 = 1 – r
• On devrait donc aussi modifier la comparaison « if(e < 0)if(e < 0) »» par :if(e < 0)if(e < 0) »»
if (hi < - 0.25){
• Cependant, on remarque que hi sera toujours un entier donc :
hi < - 0.25 => hi < 0
• On peut donc seulement changer l’initialisation et remplacer ei par hi ailleurs
213. Algorithmes de BresenhamAlgorithmes de Bresenham
pour le tracé de cerclespour le tracé de cercles
CerclePointMilieu(int r)CerclePointMilieu(int r) // le center du cercle est à l’origine// le center du cercle est à l’origine
{{
int x = 0 ;int x = 0 ;
int y = rint y = r
double h = 1double h = 1 –– r ;r ; // point de départ(0,r) => point intermédiaire (1,r// point de départ(0,r) => point intermédiaire (1,r--1/2)1/2)
AfficherPixelCercle(x, y) ;AfficherPixelCercle(x, y) ;AfficherPixelCercle(x, y) ;AfficherPixelCercle(x, y) ;
While (y > x) {While (y > x) { // octant 2// octant 2
if(h < 0)if(h < 0) // pixel suivant E// pixel suivant E
h = h + 2 . x + 3 ;h = h + 2 . x + 3 ;
else{else{ // pixel suivant SE// pixel suivant SE
h = h + 2 . xh = h + 2 . x –– 2 . y + 5 ;2 . y + 5 ;
y = yy = y –– 1 ;1 ;
}}
AfficherPixelCercle(x, y) ;AfficherPixelCercle(x, y) ;
x = x + 1 ;x = x + 1 ;
}}
}}
216. Anticrenelage (antialiasing)Anticrenelage (antialiasing)
•• Les deux principales solutions :Les deux principales solutions :
•• SurSur--échantillonnage de l’imageéchantillonnage de l’image
•• Algorithmes de tracé de segments corrigésAlgorithmes de tracé de segments corrigés