INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

78
Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass [email protected] http://www.tecgraf.puc-rio.br/~abraposo/ INF1366/index.htm

description

INF 1366 – Computação Gráfica Interativa Clipping (Recorte). Alberto B. Raposo e Marcelo Gattass [email protected] http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm. Pipeline Gráfico. Cluter & Durand, MIT. Modeling Transformations. Illumination (Shading). - PowerPoint PPT Presentation

Transcript of INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Page 1: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

INF 1366 – Computação Gráfica Interativa

Clipping (Recorte)

Alberto B. Raposo e Marcelo [email protected]

http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm

Page 2: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Pipeline GráficoModeling

Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Cluter & Durand, MIT

Page 3: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Clipping (Recorte)• Partes do objeto

fora do volume de visualização(view frustum) são removidas

Modeling Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Cluter & Durand, MIT

Page 4: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Por que o recorte?

• Não perder tempo rasterizando objetos fora da janela de visualização!

• Classes de algoritmos:– Pontos– Linhas – Polígonos

Page 5: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Ponto em retângulo

xm

ym

x

y

xp

yp

2.tol

2.tol

int pontInRect(int xm, int ym, float xp, float yp, float tol) {

return ( (xp>=xm-tol) && (xp<=xm+tol) ) &&

( (yp>=ym-tol) && (yp<=ym+tol) );

}

Page 6: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Casos de clipping de linhas

A

B

C

E

(x1, y1)

(x2, y2)

D

(x’1, y’1)(x’2, y’2)

Page 7: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Casos Triviais

• Grande otimização: aceitar/rejeitar casos triviais

• Testar extremidades do segmento de reta

D. Brogan, Univ. of Virginia

Page 8: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Aceitação Trivial• Como saber se uma linha está totalmente dentro

de uma janela?• R: se ambas as extremidades estão dentro de

todas as arestas da janela, a linha está totalmente dentro da janela

Essa linha estátrivialmente dentro

Page 9: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Rejeição Trivial• Como saber se uma linha está totalmente fora de

uma janela?• R: se ambas as extremidades estão do mesmo lado

(de fora) de uma aresta da janela, a linha pode ser rejeitada

Essa linha está fora, mas não cai no caso trivial, pois as extremidades não estão do mesmo “lado“ de uma mesma aresta

Essa linha está trivialmente fora

Page 10: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Recorte de Linhas em Relação ao Viewport• Combinando casos triviais

– Aceitar (desenhar) linhas com ambos os pontos extremos dentro de todas as arestas da janela de visualização

– Rejeitar linhas com ambos extremos fora de uma mesma aresta da janela de visualização

– Reduzir outros casos aos casos triviais, encontrando intrerseções e dividindo os segmentos

D. Brogan, Univ. of Virginia

Page 11: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cohen-Sutherland Line Clipping

0000 00100001

1001

0101 0100

1000 1010

0110

ymax

xmax

– Dividir janela de visualização em regiões definidas pelas arestas da janela– Atribuir código (outcode) de 4 bits para cada região:

• Bit 1 indica que valor y dos pontos está acima de ymax

• Outros bits indicam relação com outros vértices da janela

D. Brogan, Univ. of Virginia

Page 12: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cálculo do código de um vérticeOutcode compOutCode(double x, double y, double xmin, double xmax, double ymin, double ymax){ Outcode code; code.top = 0, code.bottom = 0, code.right = 0, code.left = 0, code.all = 0; if (y > ymax) { code.top = 1; code.all += 8; } else if(y < ymin) { code.bottom = 1; code.all += 4; } if (x > xmax) { code.right = 1; code.all += 2; } else if(x < xmin) { code.left = 1; code.all += 1; } return code;}

1001 1000 1010

0001 0000 0010

0101 0100 0110

Page 13: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cohen-Sutherland Line Clipping

• Para cada segmento de reta– Atribua o outcode para cada extremo – Se ambos outcodes = 0, aceitação trivial

• if (bitwise OR = 0)– Caso Contrário

• bitwise AND para os outcodes dos vértices• if result 0, rejeição trivial

Page 14: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cohen-Sutherland Line Clipping– Se a linha não cai nos casos triviais, subdividi-la de

forma que um ou os dois segmentos possam ser descartados

• Selecione uma aresta da janela de visualização que a linha cruza

• Ache a interseção da linha com a aresta• Descarte a parte do segmento do lado de fora da aresta e

atribua novo outcode ao novo vértice• Aplique os testes triviais; repetidamente se necessário

D. Brogan, Univ. of Virginia

Page 15: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cohen-Sutherland Line Clipping

• Se a linha não cai nos casos triviais, subdividi-la de forma que um ou os dois segmentos possam ser descartados

• Selecione uma aresta da janela de visualização que a linha cruza– Cheque as arestas na mesma ordem sempre

• Ex: top, bottom, right, left

A

B

D EC

D. Brogan, Univ. of Virginia

Page 16: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cohen-Sutherland Line Clipping

• Ache a interseção da linha com a aresta

A

B

D EC

D. Brogan, Univ. of Virginia

Page 17: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

• Descarte a parte do segmento do lado de fora da aresta e atribua novo outcode ao novo vértice

• Aplique os testes triviais; repetidamente se necessário

Cohen-Sutherland Line Clipping

A

B

DC

D. Brogan, Univ. of Virginia

Page 18: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

• Descarte a parte do segmento do lado de fora da aresta e atribua novo outcode ao novo vértice

• Aplique os testes triviais; repetidamente se necessário

Cohen-Sutherland Line Clipping

A

B

C

D. Brogan, Univ. of Virginia

Page 19: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Interseção com Janela de Visualização

– (x1, y1), (x2, y2): interseção com aresta vertical direita: xright

• yintersect = y1 + m(xright – x1)– onde m=(y2-y1)/(x2-x1)

– (x1, y1), (x2, y2): interseção com aresta horizontal de baixo: ybottom

• xintersect = x1 + (ybottom – y1)/m– onde m=(y2-y1)/(x2-x1) D. Brogan, Univ. of Virginia

Page 20: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

void CohenSutherlandLineClipAndDraw(double x0, double y0, double x1, double y1, double xmin, double xmax, double ymin, double ymax, int value){ outcode outcode0, outcode1, outcodeOut, CompOutCode(); double x, y; boolean accept = FALSE, done = FALSE;

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

do { if (outcode0.all == 0 && outcode1.all == 0) { accept = TRUE; done = TRUE; /* trivial draw and exit */ } else if((outcode0.all & outcode1.all) != 0) { done = TRUE; /* trivial reject and exit */ } else { if (outcode0.all != 0) outcodeOut = outcode0; else outcodeOut = outcode1;

if (outcodeOut.top) { x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0); y = ymax; } else if(outcodeOut.bottom) { x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0); y = ymin; } else if(outcodeOut.right) { y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0); x = xmax; } else if(outcodeOut.left) { y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0); x = xmin; } if (outcodeOut.all == outcode0.all) { x0 = x; y0 = y; outcode0 = CompOutCode(x0, y0, xmin, xmax, ymin, ymax); } else { x1 = x; y1 = y; outcode1 = CompOutCode(x1, y1, xmin, xmax, ymin, ymax); }

} /* Subdivide */ } while (!done);

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

Algoritmo de Cohen-Sutherland

Page 21: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cohen-Sutherland

– Outcodes facilitam descoberta de casos triviais• Melhor algoritmo quando casos triviais são comuns

– Os casos não triviais, por outro lado:• Têm custo elevado• Geram às vezes recortes redundantes

• Existem algoritmos mais eficientes

Page 22: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Equações Paramétricas• Equações de reta

– Explícita: y = mx + b– Implícita: Ax + By + C = 0– Paramétrica: linha definida por 2 pontos, P0 e P1

• P(t) = P0 + (P1 - P0) t, onde P é vetor [x, y]T

• x(t) = x0 + (x1 - x0) t

• y(t) = y0 + (y1 - y0) t

Page 23: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Equação Paramétrica da Reta• Descreve segmento (linha finita)

– 0 <=t <= 1• Define linha entre P0 e P1

– t < 0• Define linha antes de P0

– t > 1• Define linha depois de P1

Page 24: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Linhas Paramétricas e Clipping• Definir cada linha na forma paramétrica:

– P0(t)…Pn-1(t)

• Definir cada aresta da janela de visualização na forma paramétrica:– PL(t), PR(t), PT(t), PB(t)

• Realiza testes de interseção de Cohen-Sutherland usando linhas e arestas apropriadas

Page 25: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Equações: Line / Edge Clipping• Equações paramétricas permitem recortes mais eficientes

• Linha 0:– x0 = x0

0 + (x01 - x0

0) t0

– y0 = y00 + (y0

1 - y00) t0

• x00 + (x0

1 - x00) t0 = xL

0 + (xL1 - xL

0) tL

• y00 + (y0

1 - y00) t0 = yL

0 + (yL1 - yL

0) tL

– Resolver para t0 e/ou tL

• View Window Edge L:– xL = xL

0 + (xL1 - xL

0) tL

– yL = yL0 + (yL

1 - yL0) tL

D. Brogan, Univ. of Virginia

Page 26: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Limitações de Cohen-Sutherland

• Só funciona para janelas de visualização retangulares

• Algoritmo para recorte em janelas convexas arbitrárias:– Cyrus-Beck

Page 27: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Algoritmo de Cyrus-Beck

• Queremos otimizar o cálculo das interseções linha/linha– Começa com equação paramétrica da linha:

• P(t) = P0 + (P1 - P0) t

– E um ponto e a normal de cada aresta da janela• PL, NL

Page 28: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Algoritmo de Cyrus-Beck• Encontre t tal que:• NL [P(t) - PL] = 0

• Substitua P(t) pela equação da linha: – NL [P0 + (P1 - P0) t - PL] = 0

• Encontre t– t = NL [PL – P0] / -NL [P1 - P0]

PL

NL

P(t)Inside

P0

P1

D. Brogan, Univ. of Virginia

Page 29: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Algoritimo de Cyrus-Beck

PEi

N Ei

P0 P1

P t P P P t 0 1 0( )

N P t PEi Ei 0

)(tP

Produto escalar de 2 vetores

Page 30: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Algoritimo de Cyrus-Beck

PEi

N Ei

P0 P1

P t P P P t 0 1 0( )

0 EiEi PtPN

N P t PEi Ei 0 N P t PEi Ei 0

N P t PEi Ei 0

tN P P

N P PEi Ei

Ei

0

1 0

Page 31: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Algoritmo de Cyrus-Beck• Compute t para a interseção da linha com todos as

arestas da janela• Descarte todos (t < 0) e (t > 1)• Classifique as interseções restantes em

– Potentially Entering (PE)– Potentially Leaving (PL)

• NL [P1 - P0] > 0 implica PL

• NL [P1 - P0] < 0 implica PE

Page 32: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Entrando ou Saindo ?

P0 P1

Ei

N Ei

N P P PEEi 1 0 0

P0

P1

Ei

N Ei

N P P PLEi 1 0 0

Page 33: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cálculo das interseções

PL

PEPL

PE

PE

PE

PL

PL

C

B

A

PE

PE

PL

PL

Page 34: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

• Para cada reta:– Ache o PE com maior t– Ache o PL com menor t

• Recorte nesses 2 pontos

Algoritmo de Cyrus-Beck

PE

PL P1

PL

PE

P0

D. Brogan, Univ. of Virginia

Page 35: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Cyrus-Beck - caso geral{ 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 36: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Caso particular: Liang e Barsky• Janela retangular: linhas de recorte horizontais e

verticais:– Normais: (-1, 0), (1, 0), (0, -1), (0, 1)

• Soluções para t: -(x0 - xleft) / (x1 - x0) (x0 - xright) / -(x1 - x0) -(y0 - ybottom) / (y1 - y0) (y0 - ytop) / -(y1 - y0)

Page 37: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Liang e Barsky

Ei NEi PEi t

left: x = xmin (-1, 0) (xmin, y) -(x0-xmin)(x1-x0)

right: x = xmax (1, 0) (xmax, y) (x0-xmax)-(x1-x0)

bottom: y = ymin (0,-1) (x, ymin)-(y0-ymin)(y1-y0)

top: y = ymax (0, 1) (x, ymax)(y0-ymax)-(y1-y0)

xmin xmax

ymin

ymax

x

y

Page 38: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Comparação• Cohen-Sutherland

– Clipping repetitivo é caro– Melhor utilizado quando a maioria das linhas se encaixam nos casos

de aceitação e rejeição triviais• Cyrus-Beck

– Cálculo de t para as interseções é barato– Computação dos pontos (x,y) de corte é feita apenas uma vez– Algoritmo não considera os casos triviais– Melhor usado quando a maioria das linhas precisa ser recortada

D. Brogan, Univ. of Virginia

Page 39: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Recorte de Polígonos

• Mais complicado

• Ainda mais quando polígono é côncavo

Cluter & Durand, MIT

Page 40: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Recorte de Polígonos• Mais complexo que corte de linhas

– Input: polígono– Output: polígono original, novo(s) polígono(s), ou

nada• A melhor otimização são os casos de aceitação ou

rejeição trivial…

Page 41: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

• O que pode acontecer com um triângulo?• Possibilidades:

triângulo triângulo

Tarefa complicada!!!

triângulo quad triângulo 5-gon

• Quantos lados pode ter um triângulo recortado? D. Brogan, Univ. of Virginia

Page 42: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Quantos lados?

•Sete…

D. Brogan, Univ. of Virginia

Page 43: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Tarefa complicada!!!

Polígono côncavo múltiplos polígonos

D. Brogan, Univ. of Virginia

Page 44: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Algoritmo de Sutherland-Hodgman• Idéia básica:

– Considerar cada aresta da janela de visualização individualmente

– Recortar o poligono pela equação de cada aresta

D. Brogan, Univ. of Virginia

Page 45: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 46: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 47: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 48: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 49: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 50: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 51: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 52: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 53: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping

D. Brogan, Univ. of Virginia

Page 54: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping• Idéia básica:

– Considerar cada aresta da janela de visualização individualmente

– Recortar o poligono pela equação de cada aresta– Depois de fazer isso para todas as arestas, o polígono está

completamente recortado

D. Brogan, Univ. of Virginia

Page 55: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland - Hodgman • Clip contra uma aresta (plano) de cada vez

Page 56: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping• Input/output do algoritmo

– Input: lista ordenada dos vértices do polígono – Output: lista dos vértices recortados, com alguns

vértices originais (possivelmente) e outros novos (possivelmente)

D. Brogan, Univ. of Virginia

Page 57: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping• Aresta de s a p se enquadra em um dos 4 casos:

(Linha azul pode ser reta ou plano)

inside outside

s

p

p output

inside outside

s

p

no output

inside outside

sp

i output

inside outsidesp

i outputp output

D. Brogan, Univ. of Virginia

Page 58: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Clipping de polígonos(Hodgman & Suterland)

• Para cada aresta (plano) teste um segmento de cada vez• Existem quatro casos possiveis para um vértice e seu antessessor

S

P

guarde P

S

P

SP

guarde I

I

S P

guarde I, P

I

interno saindo externo entrando

(a) (b) (c) (d)

Page 59: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Sutherland-Hodgman Clipping• 4 casos:

– s e p dentro do plano• Coloque p para output (guarde p)• Nota: s já estaria no output pela aresta anterior

– s dentro do plano e p fora• Ache ponto de interseção i• guarde i

– s e p fora do plano • Não coloque nada no output

– s fora do plano e p dentro• Ache ponto de interseção i• guarde i, e também p D. Brogan, Univ. of Virginia

Page 60: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Clipping de polígonos(Exemplo 1)

1

23

4

56

A

B

S P Ação

1 2 x2 3 store A,33 4 store 44 5 store 55 6 store B6 1 x

Page 61: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Clipping de polígonos(Exemplo 2)

1

S P Ação1 2 store A2 3 x3 4 store B,44 5 store 55 6 store C6 1 store D,1

32

45

6A BCD

x x x x

1 45

BCDA

Page 62: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Clipping de polígonos(Exemplo 2)

1

S P Ação

1 A store 1, A

A B store BB 4 store E4 5 store F,55 C store CC D store D

45

A BCD

x x x xE

F

x

x

D 1 x

B, E, F, 5, C, D, 1, A

Page 63: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Teste Point-to-Plane• Teste geral para verificar se ponto p está “dentro” de

um plano P, definido por q e n:(p - q) • n < 0: p “dentro” de P(p - q) • n = 0: p exatamente em P(p - q) • n > 0: p “fora” de P

Lembrar que: p • n = |p| |n| cos () = ângulo entre p e n

P

np

q

P

np

q

P

np

q

D. Brogan, Univ. of Virginia

Page 64: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Interseção Linha-Plano• Aresta intercepta plano P onde L(t) está em P

– q é ponto em P– n é a normal ao plano P

(L(t) - q) • n = 0

(L0 + (L1 - L0) t - q) • n = 0

t = [(q - L0) • n] / [(L1 - L0) • n]

– O ponto de interseção i = L(t) para o valor de t encontrado acima

D. Brogan, Univ. of Virginia

Page 65: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping• Estratégia: “caminhar” pelas bordas do

polígono e da janela• Polígonos são orientados no sentido anti-

horário (CCW)

Cluter & Durand, MIT

Page 66: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping

• Encontre pontos de interseção

Cluter & Durand, MIT

Page 67: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping

• Marque os pontos onde o polígono entra na janela de recorte

Cluter & Durand, MIT

Page 68: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping• Enquanto houver interseção de

entrada não processada:– “caminhar” pelas bordas do polígono

ou da janela

Cluter & Durand, MIT

Page 69: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Regras da “caminhada”• Par In-to-out:

– Grave o ponto de interseção– Caminhe pela aresta do polígono (ccw)

• Par Out-to-in:– Grave o ponto de interseção– Caminhe pela aresta da janela (ccw)

Cluter & Durand, MIT

Page 70: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Regras da “caminhada”• Par In-to-out:

– Grave o ponto de interseção– Caminhe pela aresta do polígono (ccw)

• Par Out-to-in:– Grave o ponto de interseção– Caminhe pela aresta da janela (ccw)

Page 71: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Regras da “caminhada”• Par In-to-out:

– Grave o ponto de interseção– Caminhe pela aresta do polígono (ccw)

• Par Out-to-in:– Grave o ponto de interseção– Caminhe pela aresta da janela (ccw)

Cluter & Durand, MIT

Page 72: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Regras da “caminhada”• Par In-to-out:

– Grave o ponto de interseção– Caminhe pela aresta do polígono (ccw)

• Par Out-to-in:– Grave o ponto de interseção– Caminhe pela aresta da janela (ccw)

Page 73: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping• Enquanto houver interseção de

entrada não processada:– “caminhar” pelas bordas do polígono

ou da janela

Cluter & Durand, MIT

Page 74: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping• Enquanto houver interseção de

entrada não processada:– “caminhar” pelas bordas do polígono

ou da janela

Cluter & Durand, MIT

Page 75: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping• Enquanto houver interseção de

entrada não processada:– “caminhar” pelas bordas do polígono

ou da janela

Cluter & Durand, MIT

Page 76: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Weiler-Atherton Clipping• Enquanto houver interseção de

entrada não processada:– “caminhar” pelas bordas do polígono

ou da janela

Cluter & Durand, MIT

Page 77: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Dificuldades• E se um vértice do polígono está na borda da

janela?• E se estiver “quase” na borda?

– Problema de precisão• Welcome to the real world of geometry!

Cluter & Durand, MIT

Page 78: INF 1366 – Computação Gráfica Interativa Clipping (Recorte)

Alberto Raposo – PUC-Rio

Informações Adicionais

• Peter Shirley. Fundamentals of Computer Graphics, A K Peters, Ltd., Natick, MA, USA, 2002.

• Foley, J. D., Van Dam, A., Feiner, S. K., e Huhes, J. F., Phlips, L. R., Introduction to Computer Graphics,  Addison-Wesley, 1995.

• D. F. Rogers, Procedural Elements for Computer Graphics, McGraw-Hill, 1988.

• Marcelo Gattass: notas de aula. http://www.tecgraf.puc-rio.br/~mgattass/cg.html