Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Bonjour et bienvenue à la conférence numéro 27 dans le cours infographie. Nous discutons du pipeline graphique 3D, comme vous pouvez le rappeler, il a 5 étapes et nous avons déjà discuté de 4 étapes dans les détails et actuellement nous en sommes à la cinquième étape. Alors, laissez-nous simplement revoir rapidement les 5 étapes.
Comme vous pouvez le voir dans cette figure. Nous avons déjà discuté de la première étape des détails, de la représentation des objets, puis de la transformation de la modélisation de la deuxième étape, de l'éclairage de la troisième étape ou de l'attribution de la couleur, de la quatrième étape du pipeline de visualisation et, actuellement, nous sommes à la cinquième étape de la conversion ou du rendu.
Maintenant, dans la conversion de scan ce que nous faisons, nous essayons essentiellement de mapper la description d'une image donnée dans le système de coordonnées de l'appareil à une description sur la grille de pixels qui signifie, set up pixels. Ainsi, dans les conférences précédentes, nous avons couvert les méthodes qui sont suivies pour un tel mappage, pour le point, la ligne et le cercle.
Et nous avons vu comment nous pouvons améliorer l'efficacité de ces méthodes en introduisant de meilleures approches telles que l'algorithme de dessin de ligne de Bresenham utilisé pour la conversion d'analyse de ligne, l'algorithme de point milieu pour la conversion d'analyse circulaire et ainsi de suite. Aujourd'hui, nous allons discuter d'une autre technique de conversion d'analyse liée aux zones de remplissage, de même que nous allons également discuter de la façon dont nous affichons des caractères qui signifient les lettres, les nombres etcetera à l'écran. Nous allons essayer d'avoir une idée générale sur le rendu des caractères.
Commençons par le rendu de la zone de remplissage. Alors, d'abord, essayons de comprendre ce qui est une zone de remplissage.
Ce que nous avons discuté jusqu'à présent, comment déterminer les pixels qui définissent une ligne ou une limite de cercle.
Parfois, ce n'est peut-être pas le cas, parfois nous pouvons connaître les pixels qui font partie d'une région. Et nous pouvons vouloir appliquer une couleur spécifique à toute cette région. Alors, plus tôt ce que nous avons fait? Nous avons déterminé les pixels qui font partie d'une seule ligne ou de la limite du cercle, mais parfois il peut y avoir des situations où nous pouvons aller pour attribuer des couleurs à la région plutôt qu'à une ligne ou à une frontière.
Maintenant, c'est la même que de dire que nous voulons remplir une région avec une couleur spécifiée. Donc, c'est le rendu de la zone de remplissage, un des sujets de notre discussion aujourd'hui. Donc, quand nous parlons de la zone de remplissage, nous faisons référence à une région et notre objectif est de remplir cette région entière qui signifie les pixels qui font partie de cette région avec une couleur spécifiée. Cela contraste avec ce que nous avons appris plus tôt où notre objectif était de trouver des pixels et bien sûr leur attribuer des couleurs qui font partie d'une ligne ou de la limite d'un cercle.
Essayons de comprendre ce concept avec un exemple. Considérons un système de peinture interactif, donc dans ce système ce que nous faisons? Nous pouvons essayer de dessiner n'importe quelle forme arbitraire et ensuite nous souhaiterions peut-être assigner certaines couleurs à cette forme, c'est-à-dire assigner des couleurs à l'intérieur de la limite de cet ensemble. De plus, nous pouvons vouloir changer la couleur, la première chose est que nous pouvons vouloir la colorier, couleur que nous avons dessiné de façon arbitraire.
Maintenant, quand nous disons que nous essayons de colorier certaines formes, cela signifie que nous voulons colorier les limites ainsi que l'intérieur. Nous pouvons aussi vouloir changer de couleur et aussi interactivement, c'est-à-dire sélectionner une couleur à partir d'un menu, cliquer à l'intérieur de la forme pour indiquer que la nouvelle couleur à appliquer à cette forme. Si vous avez utilisé un système de peinture interactif, vous connaissez peut-être déjà ces choses.
Par exemple, supposons que c'est notre toile et ici nous avons dessiné quelque chose comme ça, puis il peut y avoir un menu de couleur ou une palette de couleurs, donc nous pouvons choisir ce menu, par exemple, cette couleur cliquez sur le pointeur de la souris ou touchez un point à l'intérieur de cette forme, puis la couleur du centre est appliquée à l'intérieur de cette forme. Donc, c'est une coloration interactive d'une forme. Et ici comme vous pouvez le voir, nous nous préoccupons de colorer une région plutôt que seulement la frontière, contrairement à ce que nous avons fait lorsque nous avons essayé de déterminer les pixels ainsi que leurs couleurs pour les lignes ou les limites du cercle La question est de savoir comment nous pouvons réaliser une telle coloration ou remplissage de la région? Maintenant, cela dépend de la façon dont les régions sont définies, de sorte qu'il peut y avoir différentes façons de définir une région et, en fonction de cette définition, nous pouvons avoir des approches de remplissage des régions.
Il y a généralement deux définitions d'une région, l'une est la définition de niveau pixel, c'est la définition géométrique.
Dans le cas d'une définition de niveau pixel, nous définissons une région en termes de pixels qui signifie que nous pouvons définir la région en termes de pixels limites ou nous pouvons définir la région en termes de pixels à l'intérieur d'une frontière. Dans le premier cas, lorsque nous définissons une région en termes de pixels limites ou de l'ensemble de pixels qui définissent la frontière, cette définition est appelée frontière définie.
Dans l'autre cas, nous ne définissons pas explicitement une frontière mais un ensemble de pixels qui définit l'ensemble de la région dans ce cas que nous appelons intérieur défini. Ainsi, de telles définitions de pixels sont utiles lorsque nous traitons avec des régions ayant des frontières complexes ou comme nous venons de voir des applications comme des systèmes de peinture interactifs. Donc, pour des formes complexes, il est difficile de traiter la frontière, donc leur définition de niveau de pixel peut être utile. De plus, dans les systèmes interactifs, les définitions de niveau pixel sont très utiles.
L'autre type de définition de zone de remplissage est la définition géométrique, ici nous définissons une région en termes de primitives géométriques telles que des arêtes et des sommets que nous avons déjà vues auparavant lors de nos techniques de représentation de l'objet. Cette approche particulière est principalement destinée aux régions polygonales. Et ces définitions sont communément utilisées dans les paquets graphiques généraux, que nous avons déjà mentionnés précédemment.
Ainsi, des définitions essentiellement géométriques signifient, en définissant une région en termes de primitives géométriques telles que des arêtes, des sommets, si vous pouvez nous souvenir que nous avons discuté de ce genre de choses lors de notre discussion sur la représentation objective dans laquelle nous avons utilisé la liste de sommets, la liste de bords pour définir des objets ou des régions. Et lorsque nous avons affaire à des définitions géométriques, elles sont principalement destinées à définir des régions qui sont polygonales en forme.
Maintenant, avec cette connaissance de deux grandes définitions des régions, essayons de comprendre les différentes régions de remplissage des algorithmes de conversion d'analyse. Nous allons commencer par une approche simple appelée algorithme de remplissage de graines. Alors, ce qu'il nous laisse essayer de comprendre.
Donc, l'idée est très simple pour un algorithme de remplissage de graines, nous commençons avec un pixel intérieur et colorier progressivement la région, c'est une idée simple.
De toute évidence, nous supposons ici une définition de niveau pixel, en particulier, une définition de limite d'une région, où les pixels de frontière sont spécifiés. Et nous supposons aussi que nous connaissons au moins un pixel intérieur, maintenant que le pixel est appelé pixel de départ et si on connaît les pixels limites on peut décider sur n'importe quel pixel de départ, c'est facile, parce que nous avons affaire à un pixel de départ, donc l'algorithme est nommé algorithme de remplissage de graines. Donc, nous avons un pixel de départ et nous avons des définitions limites de la région en termes de pixels.
Suivant cet algorithme, il est également supposé que les pixels intérieurs sont connectés à d'autres pixels de l'une ou l'autre des deux façons, soit ils peuvent être connectés à 4 pixels qui sont appelés 4 connectés ou ils peuvent être connectés à 8 pixels, ce qui est appelé 8 connecté. Maintenant, ce sont les pixels voisins, par exemple, supposons qu'il s'agit d'un pixel de départ et qu'il y a des pixels autour, si c'est la grille, où le cercle affiche les pixels, puis ces pixels peuvent être supposés être connectés à 4 pixels voisins ou à tous les 8 pixels voisins.
En conséquence, la nature de la connexion est appelée 4 connectée ou 8 connectée. Donc, quand nous parlons de 4 connectés, nous supposons essentiellement que de redessiner à nouveau la figure, supposons que ce sont les pixels de ces points d'intersection de la grille, c'est un pixel, maintenant dans le cas de 4 connectés les 4 voisins les pixels sont définis en haut, en bas, à gauche et à droite ce qui signifie que c'est le sommet, c'est le fond, c'est juste et c'est à gauche.
Alors que lorsque nous traitons avec 8 pixels connectés, nous traitons avec les 8 voisins en haut, en haut à gauche, voici la partie supérieure gauche, puis en haut à droite ici, puis à gauche, droite, bas, en bas à gauche c'est ici et en bas à droite ici. Donc, l'une ou l'autre de ces connexions que nous pouvons assumer. En conséquence, l'algorithme est exécuté.
Donc, l'idée de base est simple, nous maintenons une pile, le pixel de départ est d'abord poussé dans la pile, puis une boucle exécutée jusqu'à ce que la pile n'est pas vide. Maintenant, à chaque étape, nous pop le pixel du haut de la pile et nous assignons la couleur voulue à ce pixel.
L'algorithme est affiché ici. Alors, quel est notre point de vue? La couleur des pixels limites, la couleur spécifiée, que nous voulons assigner à la région et le pixel de la graine ou de l'intérieur, n'importe qui de pixel et la sortie est les pixels intérieurs avec la couleur spécifiée qui est notre objectif. Nous commençons par pousser le pixel de départ vers une pile, puis nous entrons dans une boucle où nous avons mis le pixel en cours pour être le pixel top de la pile en le popping de la pile, appliquer la couleur spécifiée à ce pixel, puis nous utilisons la propriété connectée.
Donc, si nous supposons qu'il s'agit d'un pixel connecté, alors pour chacun des 4 pixels connectés ou si nous supposons qu'il est 8 pixels connectés alors pour chacun des 8 pixels connectés du pixel actuel, ce que nous faisons? Nous véritons si la couleur des pixels connectés n'est pas égale à la couleur limite, ce qui signifie que nous n'avons pas atteint la limite ou que la couleur des pixels connectés n'est pas égale à la couleur spécifiée, ce qui signifie que nous n'avons pas encore l'attribution de la couleur, puis nous la poussons à la pile.
Donc, pour chaque pixel on pousse soit 4 pixels connectés à la pile, soit 8 pixels connectés à la pile en fonction de la nature de la connectivité que nous supposons. Et puis nous revenons ici et la boucle continue encore la pile est vide, ce qui signifie que nous avons atteint la frontière ou nous avons assigné des couleurs à tous les pixels intérieurs. C'est la simple idée de l'algorithme de remplissage des graines. Ensuite, nous discuterons d'une autre approche appelée "remplissage d'inondation". L'idée est presque similaire avec quelques variations mineures. Voyons comment ça marche.
Maintenant, en cas d'algorithme de remplissage d'inondation, nous supposons une définition différente qui est une définition intérieure qui signifie que les pixels intérieurs sont connus. Plus tôt, nous avons supposé une définition de frontière avec un seul pixel intérieur, c'est-à-dire le pixel de départ. Maintenant, nous supposons ici une définition intérieure, c'est-à-dire que tous les pixels de l'intérieur sont connus. Et notre objectif est de colorier ou recolore la région avec une couleur spécifique.
L'idée est semblable au remplissage de graines, avec une certaine différence. Maintenant, dans ce cas, les décisions sont prises en fonction de la couleur intérieure originale des pixels actuels au lieu de la couleur des pixels limitrophes. D'autres choses restent les mêmes, c'est-à-dire utiliser une pile et utiliser les éléments de la pile d'une façon particulière, les colorant d'une façon particulière reste la même.
Donc, l'algorithme est à nouveau montré ici l'entrée est la couleur de l'intérieur des pixels, la couleur spécifiée et le pixel de l'intérieur ou le pixel de la graine, c'est encore plus facile ici parce que nous connaissons déjà les pixels de l'intérieur et nous pouvons choisir au hasard un pixel et la sortie est après avoir assigné des couleurs à tous les pixels l'ensemble de pixels.
Maintenant, nous poussons les pixels de départ à la pile et comme avant, nous entrons dans une boucle, d'abord nous pop la pile et la fixons au pixel en cours d'application de la couleur spécifiée, puis en supposant la connectivité comme nous l'avons fait auparavant, nous traitons avec 4 ou 8 pixels connectés et pour chaque pixel que nous faisons le contrôle, maintenant ici le contrôle est légèrement différent par rapport à ce que nous avons fait plus tôt. Ici on vérifie si la couleur du pixel connecté est la couleur de l'intérieur.
Ce n'est que dans ce cas que nous poussons le pixel connecté, car ici nous ne pouvons pas vérifier la couleur des limites, il n'y a pas de limite spécifiée. Et puis nous continuons comme avant que la pile soit vide. Donc, dans les deux cas, nous commençons avec un pixel de départ, mais dans un cas nous avons affaire à une définition de frontière de pixels, dans d'autres cas nous avons affaire à une définition intérieure de la région en termes de pixels. Par conséquent, notre algorithme change légèrement sinon l'idée générale reste la même.
Nous allons discuter d'une troisième approche, qui s'appuie sur une définition géométrique, appelée algorithme de remplissage de polygone d'analyse. Ainsi, les premières approches de remplissage de graines ou de remplissage dépendent des définitions de pixels. Dans le cas de l'algorithme de remplissage de polygone de balayage, nous dépendons de la définition géométrique.
Donc, nous supposons ici que la région est définie en termes de sommets et de bords, bien sûr ici l'hypothèse implicite est que la région est polygonale et que les sommets sont arrondis vers les pixels les plus proches. Ce sont les choses que nous supposons.
Nous allons d'abord discuter de l'algorithme puis essayer de le comprendre en termes d'exemple. Donc, ici l'entrée est un ensemble de sommets et la sortie est les pixels, les pixels de l'intérieur avec la couleur spécifiée. A partir des sommets ce que nous faisons est de déterminer le maximum, les lignes de balayage minimum, c'est-à-dire les valeurs y maximales et minimales pour le polygone.
Donc, par exemple ici supposons que c'est notre grille de pixels et nous avons une forme comme celle-ci, donc nous avons besoin de connaître le minimum y qui est ici ymin et maximum y qui dit ici ymax. Donc, ce maximum et ce minimum que nous déterminons, puis nous commençons à partir de la ligne de balayage minimum, c'est le plus bas ici.
Puis nous entrons dans une boucle et nous continuons dans la boucle jusqu'à ce que nous atteions la ligne de balayage maximale comme indiqué dans cette condition de boucle. Alors, dans la boucle ce que nous faisons? Pour chaque arête ou la paire de sommets du polygone si vous allez pour une vérification si la ligne d'analyse se trouve dans une certaine plage définie par les coordonnées y du bord, alors nous déterminons le point d'intersection de la ligne d'analyse de bord.
Après ces étapes, que faisons-nous? Nous trions les points d'intersection par ordre croissant de coordonnées x, c'est-à-dire que nous essayons d'abord de déterminer les points d'intersection puis de les trier dans l'ordre croissant, puis d'appliquer la couleur spécifiée aux pixels qui se trouvent à l'intersection des points d'intersection tous les pixels intermédiaires que nous appliquons la couleur et ensuite nous allons à la prochaine ligne de balayage, c'est l'idée générale.
Ainsi, d'abord, nous déterminons le minimum et le maximum que nous commençons par le minimum et que nous continuons le traitement jusqu'à ce que la ligne de balayage maximale soit atteinte. A chaque étape du traitement ou de chaque exécution de boucle ce que nous faisons? Nous déterminons ces deux points d'intersection de l'arête avec les lignes de balayage pour obtenir les deux extrêmes sur une seule ligne d'analyse, puis assignons la couleur spécifiée à tous les pixels qui se trouvent dans ces extrêmes, c'est-à-dire la simple idée. Essayons maintenant de le comprendre en termes d'un seul exemple.
Nous allons suivre un exemple pour obtenir plus de clarté sur l'algorithme.
Considérons ce chiffre. Ici, il y a une zone de polygone ou de remplissage spécifiée avec 4 sommets A, B, C et D comme indiqué ici. Maintenant, nous avons suivi une convention de dénomination des vertex anti-horaire, donc il y a 4 arêtes AB, BC, CD et DA.
Dans un premier temps, nous déterminons l'étendue minimale et maximale des lignes de balayage. Ici, c'est 1 est le minimum comme vous pouvez voir ici et 6 est la ligne de scan maximale, ce que nous déterminons comme la première étape.
Puis on commence la boucle. Donc, on commence par 1 et on continue jusqu'à 6 et dans chaque exécution de la boucle on traite une ligne d'analyse. Donc, lorsque nous commençons par 1, notre objectif est de déterminer les points d'intersection de la ligne d'analyse y égale à 1 avec les 4 arêtes dans la boucle interne de l'algorithme qui est des lignes 6 à 10.
Si vous exécutez les lignes, vous trouverez que pour le bord AB le cas si la condition est satisfaite et que le point d'intersection est A, pour BC et les arêtes de CD la condition n'est pas satisfaite, encore une fois pour DA la condition est satisfaite et nous obtenons A à nouveau, donc le point d'intersection est seulement A.
Comme il s'agit déjà d'un sommet, il ne peut y avoir de pixels intermédiaires. Donc, nous obtenons 2 points d'intersection, qui est le même sommet A, donc c'est le seul pixel et nous appliquons la couleur spécifiée.
Ensuite, nous allons à l'itération suivante en définissant une ligne d'examen égale à 2 et en vérifiant que 2 n'est pas la ligne de balayage maximale qui est 6, donc nous réexécutez la boucle.
Dans la seconde itération de la boucle, que faisons-nous? Nous véritons pour les points d'intersection comme avant avec les arêtes et la ligne de balayage y égale à 2, c'est-à-dire cette ligne d'analyse.
Maintenant, pour y égal à 2 et si nous véritons les bords, nous voyons que pour AB si la condition est satisfaite, cela signifie qu'il y a un point d'intersection, en utilisant l'équation de la ligne de bord et l'équation de la ligne de balayage, nous pouvons obtenir le point d'intersection comme celui-ci, ce point, pour BC et CD, la condition if ne satisfait pas pour la BC et le CD, donc il n'y a pas d'intersection.
Et pour DA, la condition satisfait, encore une fois. Donc, c'est pour le point d'intersection AB, c'est pour le point d'intersection DA et ce point d'intersection DA que nous pouvons trouver (3, 2) en utilisant l'équation de ligne pour le bord ainsi que l'équation de ligne de balayage. Donc, ce point est un point d'intersection, ce point est un autre point d'intersection.
Ensuite, nous effectuons un tri comme mentionné dans l'algorithme et obtenez ces deux points d'intersection dans un ordre trié comme celui-ci. Il s'agit donc d'un point d'intersection et c'est l'autre point d'intersection. Entre les pixels sont là comme vous pouvez le voir, c'est un pixel entre les pixels, puis nous avons ce pixel, qui est (4, 2) et ensuite nous avons (5, 2).
Notez que l'autre point d'intersection n'est pas un pixel en soi car il implique un nombre réel comme coordonnée. Donc, nous avons trouvé les 3 pixels, qui sont là entre les deux points d'intersection, puis nous appliquons la couleur spécifiée à ces pixels. Ensuite, nous avons réinitialisé la ligne de scan sur 3 et vérifié si 3 est la ligne de balayage maximale, ce n'est pas si nous réentrez à nouveau la boucle.
Et de façon similaire, on traite les lignes de balayage y= 3, y= 4, y= 5 till y=6. Donc, c'est l'idée de l'algorithme. Donc, pour résumer ici dans cet algorithme de remplissage de polygone de balayage, ce que nous faisons? Nous supposons une représentation géométrique de la région, de la région polygonale en termes d'arêtes ou de sommets. Ensuite, pour chaque ligne d'analyse qui se trouve entre les lignes de balayage minimum et maximum, ce que nous faisons? Nous déterminons les points d'intersection des bords avec ces lignes de balayage, trions les points pour obtenir deux points d'intersection extrêmes, identichez les points entre les pixels et colorier ces pixels. Et ce que nous faisons pour toutes les lignes de scan qui sont là entre les lignes de balayage minimum et maximum.
Maintenant, il y a deux choses qui nécessitent un peu d'élaboration dans l'algorithme.
Tout d'abord, comment pouvons-nous déterminer le point d'intersection de la ligne 8, que je pense que vous savez tous que nous pouvons utiliser l'équation de ligne que nous pouvons déterminer par les deux noeuds finaux et que nous pouvons utiliser l'équation de la ligne de balayage pour obtenir le point d'intersection. Donc, cette équation de ligne peut être évaluée avec la valeur de la ligne d'analyse pour obtenir le point d'intersection, ce qui est une approche très simple et je pense que vous pouvez tous déjà savoir comment faire ça.
Deuxièmement, comment déterminer les pixels à l'intérieur de deux points d'intersection? Ceci est encore très simple, nous commençons par la gauche la plupart des pixels qui est soit le point d'intersection soit juste à côté du point d'intersection, puis continuer le long de la ligne de balayage jusqu'à ce que nous obtenons une valeur de pixel qui est moins que le point d'intersection de droite. La coordonnée Pixel x nous permet de vérifier tous ces contrôles. Donc, les deux sont simples, mais le second point qui est de savoir comment déterminer les pixels à l'intérieur de deux points d'intersection n'est pas aussi simple qu'il semble. Et pourquoi c'est ainsi?
Si nous supposons que nous avons un polygone concave, alors il y a un problème. Ainsi, toute explication donnée est basée sur l'hypothèse que nous avons affaire à des polygones convexes. Pour les polygones concaves, il n'est pas si facile de déterminer les pixels intermédiaires, il y a des problèmes supplémentaires qui doivent être résolus avant de déterminer les pixels intérieurs.
Prenons un exemple, ici dans cette figure, comme vous pouvez le voir, c'est un polygone concave, donc quand nous avons affaire à ces deux points d'intersection extrêmes, certains pixels se trouvent à l'extérieur du polygone, bien que si nous suivons l'approche que nous avons décrite plus tôt que nous allons juste bouger sur cette ligne pour obtenir tous les pixels intermédiaires, alors les pixels de l'extérieur seront aussi traités comme des pixels intérieurs, ce que nous ne voulons absolument pas. Nous devons donc adopter une approche différente lorsque nous avons affaire à des polygones concaves. Ce que nous devons faire c'est, nous devons déterminer explicitement en pixels, les pixels qui se trouvent à l'intérieur du polygone. Comme vous pouvez le voir à partir de la figure qui n'est pas si évidente pour les polygones concaves.
Donc, dans ce cas, nous avons besoin d'effectuer un test intérieur extérieur pour chaque pixel qui est bien sûr une surcharge supplémentaire.
Et comment on peut faire ça? Donc, pour chaque pixel p ce que nous pouvons faire, c'est déterminer la boîte englobante du polygone qui est la valeur maximale et minimale x et y des sommets des polygones. C'est la première étape, puis dans la seconde étape, on choisit un pixel arbitraire, on le dénote par p0, en dehors de la boîte englobait.
Donc, dans ce cas, ceci peut être notre boîte de résonance, comme vous pouvez le voir couvre tous les sommets du polygone. Ensuite, nous choisissons un pixel en dehors de cette boîte de résonance quelque part par exemple ici, c'est-à-dire choisir un point (x, y) qui se trouve en dehors de la min et de la plage maximale des coordonnées du polygone. Dans la troisième étape, nous créons une ligne en joignant p et p0.
Donc, nous créons une ligne entre le pixel qui est à l'intérieur qui est notre pixel d'inquiétude et le point qui se trouve à l'extérieur de la boîte englobait. Dans la dernière étape, nous allons pour quelques vérifications, si la ligne croise les bords du polygone même nombre de fois, p est à l'extérieur, sinon elle est à l'intérieur. Donc, comme vous pouvez le voir, nous avons un pixel ici et ces deux pixels si on se joint à elle croise une fois, c'est un nombre impair de temps, donc ce pixel est à l'intérieur.
Alors que, si nous avons affaire à un pixel ici et que nous nous joignant à cela, comme vous pouvez voir ici l'intersection est deux fois plus le nombre de fois, donc ces pixels sont à l'extérieur. De même, ces pixels si nous rejoinons ces deux lignes, nous voyons qu'il n'intersecte pas les bords du polygone, donc c'est 0, alors dans ce cas aussi il est à l'extérieur.
Mais bien sûr, toutes ces vérifications prennent du temps, de sorte qu'il s'agit d'une surcharge supplémentaire lorsque nous avons affaire à des polygones concaves. Sinon, l'algorithme de remplissage de polygone de balayage pour polygones convexes est assez simple. Nous avons donc discuté d'algorithmes de remplissage de différentes régions, tant pour les définitions de niveaux de pixels que pour les définitions géométriques.
Pour les définitions de niveaux de pixels que nous avons apprises au sujet de l'algorithme de remplissage des graines et de l'algorithme de remplissage des crues, les deux sont semblables avec des variations mineures. Pour les définitions géométriques que nous avons apprises au sujet de l'algorithme de remplissage de polygone de lignes de balayage, cet algorithme est assez simple et direct lorsque nous avons affaire à un polygone convexe, mais nécessite des vérifications supplémentaires lorsque nous avons affaire à des polygones concaves. Maintenant, essayons de comprendre comment les caractères sont affichés sur l'écran de l'ordinateur. Alors, comment rendre les personnages?
Ici, le caractère signifie des caractères alphanumériques.
Maintenant, le rendu de caractère est bien sûr comme nous le savons tous est un problème important, par exemple, considérons cette diapositive, ici nous voyons beaucoup de caractères alphanumériques affichés. Il s'agit donc clairement d'une question importante et il s'agit des éléments constitutifs de tout contenu textuel, de sorte que toute application portant sur l'affichage des textes doit être prise en charge pour le rendu des caractères. Et comment ça se fait?
Comme nous le savons tous lorsque nous avons affaire à une application de traitement de texte, il est généralement nécessaire d'afficher une grande quantité de texte en peu de temps. Par exemple, si nous considérons le défilement, maintenant avec chaque action de défilement, l'ensemble des caractères est redessiné et cela doit être fait très rapidement. Ainsi, le rendu efficace des caractères est une question très importante en infographie.
Maintenant, avant d'essayer de comprendre le rendu des caractères, regardons rapidement la police d'idée et nous savons déjà probablement déjà entendu parler de ce terme, donc voyons ce qui est une police et comment elle est traitée dans les graphiques d'ordinateur.
Donc, quand nous parlons de police, la police ou la police de caractères dénote le style de design général des personnages et il y a beaucoup de telles polices que nous utilisons probablement tous les jours comme Times New Roman, Courier, Arial, etc. Ainsi, ces polices ou caractères indiquent le style de conception des personnages qu'ils regardent.
Maintenant, chaque police peut être rendue avec une apparence variable. Ainsi, l'apparence peut être différente, elle peut être en caractères gras, elle peut être en italique ou elle peut être à la fois en gras et en italique.
En plus de ce qu'il y a un autre concept appelé taille, la taille ou le petit le caractère apparaît à l'écran. Ainsi, cela est signalé par un point, par exemple une police de 10 points, une police de 12 points et ainsi de suite qui est une grande hauteur de caractère en pouces et ce terme est emprunté à la typographie, mais dans les graphiques d'ordinateur nous n'utilisons pas la mesure originale.
Au lieu de cela, nous supposons que le point est équivalent à 1/72 de pouce ou environ 0,0139 pouce. Et ceci est aussi connu sous le nom de DTP ou de bureau de publication ou de post-script. Donc, quand on parle d'un point, on suppose qu'il est de 1/72 de pouce ou d'environ 0,0139 pouce, ce qui indique la hauteur du personnage.
Maintenant, avec cette connaissance de base, essayons de comprendre comment les caractères sont rendus.
Donc, il y a généralement deux façons de rendre les caractères, on est bitmap est décrit.
En cas de police bitmap, nous définissons une grille de pixels pour chaque caractère, par exemple, considérons cette grille 8 par 8 pixels et nous pouvons définir la grille pour le caractère B dans la capitale, où les pixels qui font partie des caractères sont marqués ON et d'autres sont OFF. Ainsi, lorsque la grille est affichée pour B, seuls ces pixels seront illuminés d'autres pixels ne seront pas illuminés. Les cercles noirs ici indiquent les pixels ON comme vous pouvez le voir ici et les boîtes blanches indiquent les pixels OFF. Donc, nous pouvons avoir ce type de grille pour chaque caractère lorsque nous avons affaire à la police bitmap.
En revanche, lorsque nous traitons avec la police de contour, l'approche est totalement différente, ici les caractères sont définis à l'aide de primitives géométriques telles que des points et des lignes. Donc, peu de pixels peuvent être fournis et les autres pixels seront déterminés en utilisant les techniques de conversion pour les points, les lignes et les cercles.
Donc, essentiellement peu de pixels sont fournis et en utilisant ces pixels, l'ordinateur va dessiner les primitives comme les lignes ou les cercles pour construire un personnage comme créer une image. Ainsi, en cas de police bitmap, nous spécifions déjà tous les pixels alors que dans le cas de la police de contour nous ne spécifions pas tous les pixels, peu de pixels sont spécifiés et l'utilisation de la forme globale est calculée ou créée en suivant les techniques de conversion d'analyse.
Il est clair que les polices bitmap sont simples à définir et d'abord à rendre car ici aucun calcul n'est impliqué. Nous n'avons pas besoin de calculer les pixels qu'ils sont déjà spécifiés, mais il y a quelques problèmes.
De toute évidence, cela nécessitera un stockage supplémentaire, une grande quantité de stockage, parce que pour chaque caractère nous stockons des informations de grille de pixels et ensuite si nous voulons redimensière ou remodère pour générer différents effets stylisés de la police, alors ce n'est pas facilement possible avec les définitions bitmap et la police qui en résulte peut sembler mauvaise.
La troisième préoccupation est que la taille de la police dépend de la résolution de l'écran, car nous fixons la grille de pixels. Donc, si la résolution change, alors le rendu peut ne pas être bon. Par exemple, supposons que nous ayons défini une bitmap haute de 12 pixels, elle produira un caractère de 12 points dans une résolution de 72 pixels par pouce. Maintenant, si nous changeons la résolution à 96 pixels par pouce, alors la même bitmap produira un caractère à 9 points que nous ne voulons pas. Donc, selon la résolution, le résultat peut changer.
D'autre part, les polices vecelles calculent les pixels intermédiaires, elles ne stockent pas tout, donc elle nécessite moins de stockage, elle peut effectuer des transformations géométriques avec effet satisfaisant pour remodère et toutes les redimensières, de sorte que la distorsion sera moindre et qu'elle ne dépend pas de la résolution.
Mais d'autre part le rendu de telles polices est lent, ce qui est assez évident parce que les calculs sont impliqués, nous avons besoin de créer la forme, nous avons besoin de scanner convertir la forme avant de rendre. Par conséquent, en raison de ces calculs, le rendu est plus lent par rapport aux polices bitmap. Ainsi, les deux approches ont leurs côtés positifs et négatifs et, en fonction des ressources utilisées et du résultat souhaité, nous pouvons choisir une approche particulière.
Quoi que j'en ai discuté aujourd'hui se trouve dans ce livre, vous pouvez passer par le chapitre 9 section 9.3 et 9.4 pour plus de détails sur les sujets que nous avons couverts aujourd'hui. Lors de la prochaine conférence, nous discuterons d'une question intéressante dans la conversion de la numérisation, qui est appelée effet d'aliasing jusqu'alors merci et au revoir.