36
1 Instituto de Computação - UFF Computação Computação Gráfica I Gráfica I Professor : Anselmo Montenegro www.ic.uff.br/~anse lmo Conteúdo : - Recorte 2D

Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

Embed Size (px)

Citation preview

Page 1: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

1

Instituto de Computação - UFF

Computação Gráfica IComputação Gráfica IProfessor:

Anselmo Montenegrowww.ic.uff.br/~anselmo

Conteúdo:

- Recorte 2D

Page 2: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

2

Instituto de Computação - UFF

• Quando especificamos uma janela no Quando especificamos uma janela no espaço do objeto queremos exibir somente espaço do objeto queremos exibir somente dos objetos que estejam no seu dos objetos que estejam no seu interior.interior.

• Naturalmente alguns objetos estarão Naturalmente alguns objetos estarão parcialmente visíveisparcialmente visíveis..

• A operação que determina quais partes A operação que determina quais partes dos objetos planares estão visíveis na dos objetos planares estão visíveis na janela é denominado janela é denominado recorte 2Drecorte 2D..

Recorte 2D:Recorte 2D: introdução introdução

Page 3: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

3

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: introdução introdução

Page 4: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

4

Instituto de Computação - UFF

• Problema clássico 2DProblema clássico 2D

• Entrada: Entrada: – Segmento de reta Segmento de reta PP11PP22

– Janela alinhada com eixos (Janela alinhada com eixos (xminxmin, , yminymin), (), (xmaxxmax, , ymaxymax))

• Saída: Segmento recortado (possivelmente nulo)Saída: Segmento recortado (possivelmente nulo)

• Algoritmos:Algoritmos:– Cohen-SutherlandCohen-Sutherland– Cyrus-BeckCyrus-Beck

Recorte 2D:Recorte 2D: recorte segmento de reta x recorte segmento de reta x retânguloretângulo

Page 5: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

5

Instituto de Computação - UFF

• Vértices do segmento são classificados Vértices do segmento são classificados com relação a cada semi-espaço plano com relação a cada semi-espaço plano que delimita a janelaque delimita a janela

x ≥ xminx ≥ xmin e e x ≤ xmaxx ≤ xmax ee y ≥ yminy ≥ ymin ee y ≤ ymaxy ≤ ymax

• Se ambos os vértices são classificados Se ambos os vértices são classificados como “como “forafora”, descartar o segmento ”, descartar o segmento (totalmente invisível).(totalmente invisível).

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

Page 6: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

6

Instituto de Computação - UFF

• Se ambos são classificados como “Se ambos são classificados como “dentrodentro”, ”, testar o próximo semi-espaço.testar o próximo semi-espaço.

• Se um vértice está dentro e outro fora, Se um vértice está dentro e outro fora, computar o ponto de interseção computar o ponto de interseção QQ e e continuar o algoritmo com o segmento continuar o algoritmo com o segmento recortado.recortado.

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

Page 7: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

7

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

xminxmin xmaxxmax

ymaxymax

yminymin

Page 8: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

8

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

xminxmin xmaxxmax

ymaxymax

yminymin

Page 9: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

9

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

xminxmin xmaxxmax

ymaxymax

yminymin

Page 10: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

10

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

xminxmin xmaxxmax

ymaxymax

yminymin

Page 11: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

11

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

xminxmin xmaxxmax

ymaxymax

yminymin

Page 12: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

12

Instituto de Computação - UFF

• Recorte só é necessário Recorte só é necessário qquando houver um uando houver um vértice dentro e outro foravértice dentro e outro fora..

• Classificação de cada vértice Classificação de cada vértice pode ser codificada pode ser codificada em 4 bitsem 4 bits, um para cada semi-espaço: Dentro = 0 , um para cada semi-espaço: Dentro = 0 e Fora = 1e Fora = 1

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

10001000

x=xx=x00

y=yy=y11

x=xx=x11

y=yy=y00

1010101010011001

00000000 0010001000010001

01000100 0110011001010101 tbrl

Page 13: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

13

Instituto de Computação - UFF

• Rejeição trivial: Rejeição trivial: Classif(Classif(PP1)1) andand Classif(Classif(PP2) ≠ 02) ≠ 0

• Aceitação trivial: Aceitação trivial: Classif(Classif(PP1)1) or Classif(or Classif(PP2) = 02) = 0

• Interseção com quais semi-espaços? Interseção com quais semi-espaços? Classif(Classif(PP1) xor Classif(1) xor Classif(PP2)2)

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

10001000 1010101010011001

00000000 0010001000010001

01000100 0110011001010101

10001000 1010101010011001

00000000 0010001000010001

01000100 0110011001010101

10001000 1010101010011001

00000000 0010001000010001

01000100 0110011001010101

10001000 1010101010011001

00000000 0010001000010001

01000100 0110011001010101

0000 and 0000 = 00000000 and 0000 = 0000

0000 or 0000 = 00000000 or 0000 = 0000

0000 xor 0000 = 00000000 xor 0000 = 0000

1010 and 0110 = 00101010 and 0110 = 0010

1010 or 0110 = 11101010 or 0110 = 1110

1010 xor 0110 = 11001010 xor 0110 = 1100

0001 and 0100 = 00000001 and 0100 = 0000

0001 or 0100 = 01010001 or 0100 = 0101

0001 xor 0100 = 01010001 xor 0100 = 0101

0100 and 1010 = 00000100 and 1010 = 0000

0100 or 1010 = 11100100 or 1010 = 1110

0100 xor 1010 = 11100100 xor 1010 = 1110

Page 14: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

14

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland - algoritmo Cohen-Sutherland - cálculo do código de um vérticecálculo do código de um vértice

unsigned char code(double x, double y, double xmin, double xmax, double ymin, double ymax){ unsigned char code=0; if (y > ymax) code += 8; if (y < ymin) code += 4; if (x > xmax) code += 2; if (x < xmin) code += 1; return code;}

unsigned char code(double x, double y, double xmin, double xmax, double ymin, double ymax){ unsigned char code=0; if (y > ymax) code += 8; if (y < ymin) code += 4; if (x > xmax) code += 2; if (x < xmin) code += 1; return code;}

Page 15: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

15

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cohen-Sutherland algoritmo Cohen-Sutherland

void CohenSutherlandLineClip(double x0, double y0, double x1, double y1, double xmin, double xmax, double ymin, double ymax) { unsigned char outcode0, outcode1, outcodeOut; double x, y; boolean accept = FALSE, done = FALSE;

outcode0 = code(x0, y0, xmin, xmax, ymin, ymax); outcode1 = code(x1, y1, xmin, xmax, ymin, ymax);

do { if (outcode0 == 0 && outcode1 == 0) { accept = TRUE; done = TRUE; /* trivial draw and exit */ } else if((outcode0 & outcode1) != 0) { done = TRUE; /* trivial reject and exit */ } else { /* discart an out part */ outcodeOut = (outcode0 != 0) ? outcode0 : outcode1; /* pick an out vertice */ if (outcodeOut & 8) { /* discart top */ x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0); y = ymax; } else if(outcodeOut & 4) { /* discart bottom */ x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0); y = ymin; } else if(outcodeOut & 2) { /* discart right */ y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0); x = xmax; } else if(outcodeOut & 1) { /* discart left */ y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0); x = xmin; } if (outcodeOut == outcode0) { x0 = x; y0 = y; outcode0 = code(x0, y0, xmin, xmax, ymin, ymax); } else { x1 = x; y1 = y; outcode1 = code(x1, y1, xmin, xmax, ymin, ymax); }

} } while (!done);

if (accept) DrawLineReal(x0, y0, x1, y1);}

void CohenSutherlandLineClip(double x0, double y0, double x1, double y1, double xmin, double xmax, double ymin, double ymax) { unsigned char outcode0, outcode1, outcodeOut; double x, y; boolean accept = FALSE, done = FALSE;

outcode0 = code(x0, y0, xmin, xmax, ymin, ymax); outcode1 = code(x1, y1, xmin, xmax, ymin, ymax);

do { if (outcode0 == 0 && outcode1 == 0) { accept = TRUE; done = TRUE; /* trivial draw and exit */ } else if((outcode0 & outcode1) != 0) { done = TRUE; /* trivial reject and exit */ } else { /* discart an out part */ outcodeOut = (outcode0 != 0) ? outcode0 : outcode1; /* pick an out vertice */ if (outcodeOut & 8) { /* discart top */ x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0); y = ymax; } else if(outcodeOut & 4) { /* discart bottom */ x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0); y = ymin; } else if(outcodeOut & 2) { /* discart right */ y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0); x = xmax; } else if(outcodeOut & 1) { /* discart left */ y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0); x = xmin; } if (outcodeOut == outcode0) { x0 = x; y0 = y; outcode0 = code(x0, y0, xmin, xmax, ymin, ymax); } else { x1 = x; y1 = y; outcode1 = code(x1, y1, xmin, xmax, ymin, ymax); }

} } while (!done);

if (accept) DrawLineReal(x0, y0, x1, y1);}

Page 16: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

16

Instituto de Computação - UFF

• O algoritmo de Cohen-Sutherland calcula O algoritmo de Cohen-Sutherland calcula interseções desnecessáriasinterseções desnecessárias..

• O algoritmo de Cyrus-Beck utiliza uma O algoritmo de Cyrus-Beck utiliza uma estratégia que permite recortar um estratégia que permite recortar um segmento com menor número de segmento com menor número de interseções.interseções.

• Pode ser utilizado quando a região de Pode ser utilizado quando a região de recorte é um recorte é um polígono convexopolígono convexo..

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck algoritmo Cyrus-Beck

Page 17: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

17

Instituto de Computação - UFF

• SSe baseia na e baseia na equação paramétricaequação paramétrica da reta e da reta e no cálculo de interseções baseado nesta no cálculo de interseções baseado nesta representação.representação.

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck algoritmo Cyrus-Beck

PP00

PP11

NNii

PPEiEi

01,

,

0)(,

)()(

0

010

PPN

PPNt

PtPN

PPtPtP

i

Eii

Eii

0)(, Eii PtPN

0)(, Eii PtPN

0)(, Eii PtPN

Page 18: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

18

Instituto de Computação - UFF

• Dado um segmento Dado um segmento PP00PP11, sua reta sup, sua reta supoorte rte

intersecta as quatro retas laterintersecta as quatro retas lateraais dis doo retângulo em retângulo em quatro pontosquatro pontos ((caso geral).caso geral).

• UUsando a equação paramsando a equação paraméétrica trica calculamos os calculamos os quatro valores do parâmetro quatro valores do parâmetro tt no qual a reta no qual a reta intersecta as quatro retaintersecta as quatro retass late laterrais do retângulo de ais do retângulo de recorte.recorte.

• Após calcular o valor de Após calcular o valor de tt para as quatro retas para as quatro retas descartamos os valores de descartamos os valores de t t fora do intervalo fora do intervalo [[0,10,1]]..

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck algoritmo Cyrus-Beck

Page 19: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

19

Instituto de Computação - UFF

• Cada uma das quatro retas dCada uma das quatro retas diivide ovide o espaço em espaço em dois semi-planos.dois semi-planos.

• CChhamaremos de samaremos de seemi-planos positivos aqueles mi-planos positivos aqueles ddados pelas ados pelas eequações quações yyyy11, , yyyy00, , x x x x11, , x x xx00..

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck algoritmo Cyrus-Beck

xx xx00

yy yy11

xx xx11

yy yy00

Page 20: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

20

Instituto de Computação - UFF

• Quando a reta Quando a reta PP((tt)) entra em um dos semi- entra em um dos semi-pplanos lanos através do ponto através do ponto PP((tt00)), tal ponto é identificado com , tal ponto é identificado com

um sinal um sinal - (- (tEtE))..

• SSe o ponto for de saida indicamos com sinal e o ponto for de saida indicamos com sinal +(+(tLtL))..

• OO sinal do ponto é obtido usando o sinal do sinal do ponto é obtido usando o sinal do produto interno produto interno <<NNii,,PP11-P-P00>>..

• SSe e <<NNii,,PP11-P-P00>><0<0 então o ponto é negativo então o ponto é negativo,, cas casoo

contcontrrário é positivo.ário é positivo.

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck algoritmo Cyrus-Beck

Page 21: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

21

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck algoritmo Cyrus-Beck

CC

DD

AA

BB

x=xx=x00

y=yy=y11

x=xx=x11

y=yy=y00

EE

FF

--

--

--

++

++++ ++

Page 22: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

22

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: algoritmo Cyrus-Beck – pseudo- algoritmo Cyrus-Beck – pseudo-códigocódigo

{ Calcule Ni e escolha um PEi para cada aresta

tE = 0; tL = 1; for (cada aresta ){ if (Ni.(P1-P0)!=0 ){ /* aresta não é paralela ao segmento */ calcule t; use sign of Ni.(P1-P0) para categorizar como PE ou PL; if( PE ) tE = max(tE, t); if( PL ) tL = min(tL, t); } else { /* aresta paralela ao segmento */ if (Ni.(P0-PEi) > 0) /* está fora */ return nil; } if (tE > tL) return nil; else return P(tE) and P(tL) as true clip intersections; } }}

{ Calcule Ni e escolha um PEi para cada aresta

tE = 0; tL = 1; for (cada aresta ){ if (Ni.(P1-P0)!=0 ){ /* aresta não é paralela ao segmento */ calcule t; use sign of Ni.(P1-P0) para categorizar como PE ou PL; if( PE ) tE = max(tE, t); if( PL ) tL = min(tL, t); } else { /* aresta paralela ao segmento */ if (Ni.(P0-PEi) > 0) /* está fora */ return nil; } if (tE > tL) return nil; else return P(tE) and P(tL) as true clip intersections; } }}

Page 23: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

23

Instituto de Computação - UFF

• Inclui o problema de recorte de segmentos de reta.Inclui o problema de recorte de segmentos de reta.– Polígono resultante tem vértices que são:Polígono resultante tem vértices que são:

• Vértices da janela,Vértices da janela,

• Vértices do polígono original, ouVértices do polígono original, ou

• Pontos de interseção aresta do polígono/aresta da janelaPontos de interseção aresta do polígono/aresta da janela

• Dois algoritmos clássicosDois algoritmos clássicos– Sutherland-HodgmanSutherland-Hodgman

• Figura de recorte pode ser qualquer polígono convexo.Figura de recorte pode ser qualquer polígono convexo.

– Weiler-AthertonWeiler-Atherton• Figura de recorte pode ser qualquer polígono.Figura de recorte pode ser qualquer polígono.

Recorte 2D:Recorte 2D: recorte de polígono x retângulo recorte de polígono x retângulo

Page 24: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

24

Instituto de Computação - UFF

• Casos SimplesCasos Simples

• Casos ComplicadosCasos Complicados

Recorte 2D:Recorte 2D: recorte de polígono x retângulo recorte de polígono x retângulo

Page 25: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

25

Instituto de Computação - UFF

• Idéia é semelhante a do algoritmo de Cohen-Idéia é semelhante a do algoritmo de Cohen-Sutherland.Sutherland.

– Recortar o polígono sucessivamente contra Recortar o polígono sucessivamente contra todos os semi-espaços planos da figura de todos os semi-espaços planos da figura de recorte.recorte.

Recorte 2D:Recorte 2D: Algoritmo Sutherland-Hodgeman Algoritmo Sutherland-Hodgeman

Page 26: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

26

Instituto de Computação - UFF

• Polígono é dado como uma lista circular de vértices.Polígono é dado como uma lista circular de vértices.

• Vértices e arestas são processados em seqüência e Vértices e arestas são processados em seqüência e classificados contra o semi-espaço plano corrente.classificados contra o semi-espaço plano corrente.

– Vértice:Vértice:• Dentro: copiar para a saída.Dentro: copiar para a saída.

• Fora: ignorar.Fora: ignorar.

– ArestaAresta• Intercepta semi-espaço plano (vértice anterior e posterior Intercepta semi-espaço plano (vértice anterior e posterior

têm classificações diferentes): copiar ponto de interseção têm classificações diferentes): copiar ponto de interseção para a saída.para a saída.

• Não intercepta: ignorar.Não intercepta: ignorar.

Recorte 2D:Recorte 2D: Algoritmo Sutherland-Hodgeman Algoritmo Sutherland-Hodgeman

Page 27: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

27

Instituto de Computação - UFF

ForaFora

ss

pp

Copiar pCopiar p

DentroDentro ForaFora

sspp

Copiar iCopiar i

DentroDentro ForaFora

ss

pp

IgnorarIgnorar

DentroDentro ForaFora

sspp

Copiar i,pCopiar i,p

ii

ii

DentroDentro

Recorte 2D:Recorte 2D: Algoritmo Sutherland-Hodgeman Algoritmo Sutherland-Hodgeman

Page 28: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

28

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: Algoritmo Sutherland-Hodgeman - Algoritmo Sutherland-Hodgeman - exemploexemplo

Page 29: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

29

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: Algoritmo Sutherland-Hodgeman - Algoritmo Sutherland-Hodgeman - exemploexemplo

Page 30: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

30

Instituto de Computação - UFF

• Distinguir os pontos de interseção Distinguir os pontos de interseção gerados:gerados:– De dentro para fora: rotular como do tipo De dentro para fora: rotular como do tipo ..– De fora para dentro: rotular como do tipo De fora para dentro: rotular como do tipo ββ..

• IniciarIniciar o percurso de algum vértice o percurso de algum vértice ““forafora”.”.

• Ao encontrar um ponto de interseção Ao encontrar um ponto de interseção , ligar com o último , ligar com o último ββ visto visto..

• Resultado pode ter mais de uma Resultado pode ter mais de uma componente conexacomponente conexa..

ForaDentro

β

Recorte 2D:Recorte 2D: eliminando arestas fantasmas eliminando arestas fantasmas

Page 31: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

31

Instituto de Computação - UFF

Recorte 2D:Recorte 2D: eliminando arestas fantasmas - eliminando arestas fantasmas - exemploexemplo

Page 32: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

32

Instituto de Computação - UFF

vdvd00

00

vdvd22 vdvd33

001111

vdvd11

vfvf0 0 0 0 vdvd0 0 0 0 vfvf1 1 vfvf2 2 11vdvd1 1 vdvd2 2 vdvd3 3 1 1 vfvf33vfvf00

vfvf00vfvf33

vfvf11 vfvf22

0 0 vdvd0 0 0 0 0 0 ee 1 1 vdvd1 1 vdvd2 2 vdvd3 3 1 1 1 1

Recorte 2D:Recorte 2D: eliminando arestas fantasmas - eliminando arestas fantasmas - exemploexemplo

Page 33: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

33

Instituto de Computação - UFF

vdvd00

00

vdvd22 vdvd33

001111

vdvd11

Recorte 2D:Recorte 2D: eliminando arestas fantasmas - eliminando arestas fantasmas - exemploexemplo

Page 34: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

34

Instituto de Computação - UFF

vdvd11

vdvd00

vdvd33 vfvf22

vdvd22vfvf33vfvf00

vfvf1100

00

Recorte 2D:Recorte 2D: eliminando arestas fantasmas - eliminando arestas fantasmas - exemploexemplo

Page 35: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

35

Instituto de Computação - UFF

vdvd11

vdvd00

vdvd33

vdvd22

00

00

Recorte 2D:Recorte 2D: eliminando arestas fantasmas - eliminando arestas fantasmas - exemploexemplo

Page 36: Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro anselmo Conteúdo: - Recorte 2D

36

Instituto de Computação - UFF

• Facilmente generalizável para 3D.Facilmente generalizável para 3D.

• Pode ser adaptado para implementação em hardware.Pode ser adaptado para implementação em hardware.– Cada vértice gerado pode ser passado pelo Cada vértice gerado pode ser passado pelo pipelinepipeline para o para o

recorte contra o próximo semi-espaço plano.recorte contra o próximo semi-espaço plano.

• Pode gerar arestas “fantasma”Pode gerar arestas “fantasma”

– Irrelevante para propósitos de desenho.Irrelevante para propósitos de desenho.– Podem ser eliminadas com um pouco mais de trabalho.Podem ser eliminadas com um pouco mais de trabalho.

Recorte 2D:Recorte 2D: algoritmo Sutherland-Hodgman - algoritmo Sutherland-Hodgman - resumoresumo