Conteúdos da cadeira

Rasterização 2D

Algoritmo do ponto médio para linhas e preenchimento de regiões por varrimento.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

No fim da pipeline, a geometria já está achatada no plano do ecrã e falta a última conversão: decidir que píxeis acendem. A rasterização faz exatamente isto, com aritmética inteira rápida em vez de equações caras. É o fecho da abordagem de cima para baixo da cadeira: do 3D até ao píxel.

Linhas pelo ponto médio

Desenhar o segmento de (0,0)(0, 0) a (5,2)(5, 2) parece pedir a reta y=0,4xy = 0{,}4x com arredondamentos, mas o algoritmo do ponto médio (variante de Bresenham) decide cada píxel com somas inteiras. Para declive entre 00 e 11, avança uma coluna de cada vez e escolhe entre o píxel leste (E) e o nordeste (NE), consoante o ponto médio entre eles fica acima ou abaixo da reta. A variável de decisão começa em d=2ΔyΔxd = 2\Delta y - \Delta x e atualiza-se com +2Δy+2\Delta y após E e +2(ΔyΔx)+2(\Delta y - \Delta x) após NE.

Aqui Δx=5\Delta x = 5 e Δy=2\Delta y = 2, logo dd começa em 2×25=12 \times 2 - 5 = -1. Segue os passos a partir de (0,0)(0, 0):

xxdd antesEscolhaPíxeldd depois
11-1E(1,0)(1, 0)1+4=3-1 + 4 = 3
233NE(2,1)(2, 1)36=33 - 6 = -3
33-3E(3,1)(3, 1)3+4=1-3 + 4 = 1
411NE(4,2)(4, 2)16=51 - 6 = -5
55-5E(5,2)(5, 2)5+4=1-5 + 4 = -1

Os píxeis acesos são (0,0)(0, 0), (1,0)(1, 0), (2,1)(2, 1), (3,1)(3, 1), (4,2)(4, 2) e (5,2)(5, 2). Confirma com a reta: em x=2x = 2, y=0,8y = 0{,}8 arredonda para 11; em x=4x = 4, y=1,6y = 1{,}6 arredonda para 22. O algoritmo nunca calculou 0,80{,}8 nem 1,61{,}6: seguiu o sinal de dd com inteiros. Para outros octantes troca-se o eixo de avanço ou o sinal, mas a estrutura é a mesma.

Regiões por varrimento

Preencher um polígono faz-se por varrimento (scanline): para cada linha horizontal, interseta a linha com as arestas, ordena as interseções e preenche entre pares. A regra dos pares garante que buracos e concavidades saem certos sem casos especiais.

Toma o triângulo de vértices (1,1)(1, 1), (5,1)(5, 1) e (3,4)(3, 4) e a linha y=2y = 2. A aresta esquerda vai de (1,1)(1, 1) a (3,4)(3, 4) com declive Δx/Δy=2/3\Delta x / \Delta y = 2/3, logo cruza y=2y = 2 em x=1+2/31,67x = 1 + 2/3 \approx 1{,}67. A aresta direita vai de (5,1)(5, 1) a (3,4)(3, 4) com declive 2/3-2/3 e cruza em x=52/34,33x = 5 - 2/3 \approx 4{,}33. Preenchem-se os píxeis inteiros entre elas: x=2x = 2, 33 e 44. Repete para cada linha e o triângulo fica sólido. As extremidades partilhadas entre arestas tratam-se com uma convenção fixa (por exemplo, contar o mínimo e excluir o máximo) para não pintar nem falhar a fronteira duas vezes.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

Álgebra, lógica e uma ideia de cada vez.

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.