Académique Documents
Professionnel Documents
Culture Documents
Infographie
Infographie
o si |m|> 1
Boucle de y1 à y2 , dy=1,
ALLUME (Arrondir((y-b)/m, y)
Peu efficace :
à chaque itération : 1 multiplication (ou division) + 1 addition + 1
arrondi.
Infographie
Génération de segments de droite 2D
DDA (Digital Differential Analyzer): vient de l’analyse numérique
Remarque:
Cet algorithme est généralement considéré comme lent lorsqu'il est implémenté
en machine. Ceci est dû à l'utilisation d'opérations et de nombres en virgule
flottante.
Infographie
Génération de segments de droite 2D
Algorithme de Bresenham
Calcul en entier ! (donc plus rapide)
Basé sur le choix entre deux points discrets, dépendant de leur
distance respective avec le point réel idéal.
On simplifie le problème en traitant d’abord le tracé d’un segment
dans le 1er octant càd m inférieur à 1 et positif (0<m< 1)
x
Infographie
Génération de segments de droite 2D
Généralisation aux autres octants
… interchanger les points …
• Remarques:
– L’espacement des points n’est pas uniforme (trous possibles)
– Calculs importants ( racine carré)
Infographie
Génération de cercle 2D
• Equation paramétrique (polaire) d’un cercle:
x=xc + r.cos(θ) ; y=yc + r.sin(θ)
• Remarques
– Calculs importants ( Fonctions trigonométriques)
– Si δθ grand => on complète avec des segments de droites.
Infographie
Génération de cercle 2D
Algorithme de Bresenham
Toujours basé sur le choix entre deux points discrets,
dépendant de leur distance respective
avec le point réel.
On travaille dans le 2e octant à partir de
(0,r) ainsi pour un point (xi,yi), le prochain
point sera: (xi+1,yi) ou (xi+1,yi-1).
Infographie
Génération de cercle 2D
Algorithme de Bresenham
On calcule le prochain y et les différences respectives avec les points
discrets de la façon suivante:
On considère 2 cas :
Valeur initiale:
Infographie
Génération de cercle 2D
Algorithme de Bresenham
Infographie
Génération de cercle 2D
Algorithme de Bresenham
Exemple: centre = (0,0) et r = 3.
Infographie
Extensions
Il existe d’autres algorithmes pour les tracés de
droite et de cercle, mais plus complexes
prendre en compte l’épaisseur du trait
prendre en compte l’aliassage (effet marche d’escalier)
Tracé incrémental possible pour d’autres
primitives
quadriques (ellipses, paraboles, hyperboles, ...)
Infographie
• Remplissage
Définition:
• On appelle remplissage l’opération qui consiste à
représenter des surfaces pleines
• Génération de surfaces pleines : à partir d’un ensemble
de côtés ou de sommets
• Deux approches :
– Techniques de balayage : déterminent si un point se trouve ou
non à l’intérieur d’un polygone ou d’un contour (balayage de
haut en bas).
– Techniques à partir d’un germe : partent d’un point à l’intérieur
du contour et agrandissent l’ensemble (les points adjacents)
jusqu’ à arriver au contour.
Infographie
• Remplissage
Remplissage d’un polygone : première idée
• On suppose qu’on a le contour fermé d’un polygone
• On examine chaque point de la trame et on regarde s’il est ou non à
l’intérieur du polygone
• Une amélioration : on calcule d’abord l’enveloppe convexe et on ne regarde
que les points de cette enveloppe polygones simples
• Très coûteux et beaucoup de pixels examinés pour rien
Infographie
• Remplissage
Balayage des polygones
• Des pixels adjacents (sauf les cas des bords) sont susceptibles
d’avoir les mêmes caractéristiques cohérence spatiale
• Pour la visualisation graphique, les pixels sur une même ligne
de balayage(sauf les cas des bords) sont susceptibles d’avoir
les mêmes caractéristiques cohérence de ligne
Infographie
• Remplissage
Algorithmes de la ligne de balayage (scanline)
• Algorithme à la précision image
• Travailler scanline par scanline
• Pour chaque scanline, on cherche les intersections avec le polygone
– Chaque intersection coupe la ligne en deux régions : intérieur et
extérieur du polygone
• Tracer successivement des pixels contigus ayant des caractéristiques
lumineuses similaires
Infographie
• Remplissage
Ligne de balayage (scanline) : un algorithme
Déterminer ymin et ymax
pour y = ymin à ymax faire
Initialiser xmin et xmax
pour chaque segment de la facette faire
si le segment coupe la ligne y alors
Calculer le point d’intersection x entre la ligne y et le segment
xmin = min(xmin, x)
xmax = max(xmax, x)
finsi
fin pour
pour x = xmin à xmax faire
Afficher le pixels (x, y)
fin pour
fin pour
Infographie
• Remplissage
Ligne de balayage (scanline) : Remarques
• On ne considère pas les contours horizontaux des polygones
• Problème si l’intersection est au niveau d’un sommet du
polygone : faut-il ou non allumer le pixel
• Faible coût mémoire
• Remplissage efficace des polygones
• Gère les transparences et ombrage (Gouraud, Phong)
• Gère les textures
Infographie
• Remplissage
Ligne de balayage (scanline) : un algorithme
Déterminer ymin et ymax
pour y = ymin à ymax faire
Initialiser xmin et xmax
pour chaque segment de la facette faire
si le segment coupe la ligne y alors
Calculer le point d’intersection x entre la ligne y et le segment
xmin = min(xmin, x)
xmax = max(xmax, x)
finsi
fin pour
pour x = xmin à xmax faire
Afficher le pixels (x, y)
fin pour
fin pour