dim102 1 algoritmos de varrimento avançados para desenho de primitivas 2d 24t12 – sala 3f5 bruno...

27
DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

Upload: internet

Post on 17-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM102 1

Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D

24T12 – Sala 3F5

Bruno Motta de Carvalho

DIMAp – Sala 15 – Ramal 327

Page 2: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1022

Recorte

Recorte (clipping) é o processo de determinação da(s) porção(ões) de uma primitiva internas à uma área de recorte (clip region)

Scissoring (tesourando?)

Page 3: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1023

Algoritmo de Nicholl-Lee-Nicholl Algoritmos podem calcular as 4 interseções da

linha com a janela de recorte e compará-las aos pontos finais da linha

O Algoritmo de NLN determina onde o ponto inicial (P) e o ponto final (Q) estão

Essas posições determinam quais arestas a linha intersecta

Regiões são nomeadas de acordo com quais arestas intersectadas pelas linhas que passam por elas

Page 4: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1024

Algoritmo de Nicholl-Lee-Nicholl

Linha PQ é testada para se saber se está a direita ou a esquerda das linhs P(x

min,y

max) e P(x

max,y

max)

Como os cálculos destes testes e das interseções são similares, alguns valores são armazenados para reutilização

Page 5: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1025

Recorte de Polígonos

Ambiguidade: inclusão ou não de arestas não-pertencentes (degenerated) ao polígono original

Podem causar problemas caso o polígono recortado seja utilizado para definir uma polilinha

Page 6: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1026

Algoritmo de Liang-Barsky

Polígonos são uma sequência de pontos P1,

P2, ..., Pn e as arestas do polígono são P1P2,

P2P3, ..., PnP1

P(t)=(1-t)Pi + tPi+1, onde 0<t<=1

Regiões são classificadas de acordo com os planos definidos pela linhas de recorte

Posições finais de arestas determinam quais linhas de recorte podem ser interceptadas pela próxima aresta

Page 7: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1027

Algoritmo de Liang-Barsky

A aresta que entra em uma das 4 regiões dos cantos adiciona o vértice do canto

Usando-se a formulação paramétrica, computa-se os valores t

in1, t

in2, t

out1 e

tout2

Page 8: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1028

Algoritmo de Liang-Barsky Duas possibilidades (abaixo) – t

in1 e t

out2 são a

primeira e última interseções

Se a aresta é visível então 0<tout1

e 1>tin2

Casos especiais para linhas verticais e horizontais

Page 9: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM1029

Algoritmo de Liang-Barsky

Uma etapa de pós-processamento é necessária para remover arestas não desejáveis geradas pelo algoritmo

Page 10: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10210

Algoritmo para Polígonos de Weiler

Permite efetuar o recorte de um polígono (A) contra outro (B)

Algoritmo encontra grupos de polilinhas fechadas que são bordas de regiões disjuntas

O polígono recortado corresponde as regiões pertencentes a A e B

Interseções de arestas dos dois polígonos resultam na adição de novos vértices

As arestas são repetidas, gerando contornos

Page 11: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10211

Algoritmo para Polígonos de Weiler

Page 12: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10212

Algoritmo para Polígonos de Weiler

Cada aresta gera dois contornos Reorganização de contornos para que eles

formem as bordas das regiões disjuntas As áreas classificadas como pertencentes a

AB formam o polígono recortado Algoritmo funciona com um número arbitrário

de polígonos e consiste em:Achar interseções de arestas de A e BSeparar as regiõesSelecionar regiões que estão em A e B

Page 13: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10213

Algoritmo para Polígonos de Weiler

Reorganizando contornos em: Interseções

transversas Interseções não-

transversas (arestas coincidentes)

Interseções tangenciais

Page 14: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10214

Algoritmo para Polígonos de Weiler

Page 15: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10215

Algoritmo para Polígonos de Weiler

Árvore utilizada para descrever relacionamento entre os contornos

Resultado é obtido selecionando-se a sub-árvore que contém os contornos que pertencem a A e B

Page 16: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10216

Desenhando primitivas

Atributos: Estilos de linha, fim-de-linha, preenchimento e junção-de-linhas, e largura de linha

Atributos são tratados como geométricos ou cosméticos

Modelo de referência determina a semântica de um sistema gráfico

Page 17: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10217

Algoritmos de Linha, Polilinha e Círculo

Linhas com pontos finais não-inteiros Polilinhas com ângulos muito agudos

(problemas com xor) Círculos com raio e centro não inteiros (sem

simetria) Algoritmo do ponto médio tem de ser

modificado, alterando-se a inicialização e diferenças parcias

Page 18: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10218

Primitivas Largas

Formato dos pontos finais de linhas e junções em polilinhas

Geralmente vários estilos são implementados em sistemas gráficos

Page 19: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10219

Primitivas preenchidas

Estratégias de preenchimento: Par-ímpar Não-exterior Nonzero winding

Nonzero winding Traçe uma reta do ponto para o exterior do

polígono. Adicione 1 para as arestas cruzadas em uma

direção e subtraia 1 para a outra direção Se o número de winding não é 0 o ponto é

interno

Page 20: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10220

Antialiasing (linhas)

Calculando interseções de linhas de larguras diferentes

Como lidar com os pontos finais das linhas?

Problemas com interseções de linhas

Como tratar cores em linhas cruzadas?

Acumulação das primitivas antes do desenho

Page 21: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10221

Antialiasing (Círculos)

Interseção com filtro cônico de raio 1 também depende do raio do círculo

Tabelas individuais para raios menores e uma para raios maiores

Para círculos de raio não-inteiro, interpola-se os valores das tabelas

Page 22: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10222

Antialiasing (Pontos Fins de Linhas, Retângulos, Polígonos)

No caso de pequenos retângulos, a interseção é calculada pela subtração de duas interseções com retângulos maiores

Fins de linhas arredondados podem ser calculados como meios-círculos

Polígonos podem ser tratados como se fossem retângulos, i.e., com ângulos de 90o (aproximação falha em alguns casos)

Tabelas extras para 45o e 135o propiciam um melhor resultado

Page 23: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10223

Problemas com Texto

Especificações subpixel (superamostragem) Armazenamento das fontes em diferentes

fases (translações no subgrid) aumenta a quantidade de memória necessária

Mover e aumentar definições de letras baseadas em splines

Filtros passa-baixa borram as letras, eliminando pimples, pequenos buracos e imperfeições. Técnicas para diminuição do custo computacional são necessárias

Page 24: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10224

Álgebra de Formas

Decomposição de formas em regiões retangulares disjuntas

Estrutura de dados armazena os spans

Facilmente combinadas usando-se operações Booleanas (importante em Geometria Construtiva de Sólidos - CSG)

Page 25: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10225

Álgebra de Formas

Pode-se usar um algoritmo de conversão de scans para criar formas de primitivas mais complexas

Pode-se usar tabelas de arestas ativas para armazenar os retângulos (neste caso linhas) que compõem a forma

Page 26: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10226

Álgebra de Formas - Interseções

A interseção é calculada buscando-se por retângulos que se sobrepõem

Checa-se por ordem: as extensões das formas em y, os intervalos dos spans em y e em x

Algoritmo pode ser combinado com preenchimento

Page 27: DIM102 1 Algoritmos de Varrimento Avançados para Desenho de Primitivas 2D 24T12 – Sala 3F5 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 327

DIM10227

Álgebra de Formas

Algumas primitivas não produzem formas compactas (linhas inclinadas), então pode ser vantajoso usar recorte analítico

Formas podem ficar fragmentadas após várias operações, tornando-se necessário fazer uma condensação de formas

Para acelerar o uso desta técnica é vantajoso que se implemente rotinas de interseção-e-preenchimento, eliminando-se a necessidade da estrutura de dados mencionada anteriormente