alberto raposo – puc-rio inf 1366 – computação gráfica interativa clipping (recorte) alberto...
TRANSCRIPT
![Page 1: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/1.jpg)
Alberto Raposo – PUC-Rio
INF 1366 – Computação Gráfica Interativa
Clipping (Recorte)
Alberto B. Raposo e Marcelo Gattass
[email protected]://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm
![Page 2: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/2.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/3.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/4.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/5.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/6.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/7.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/8.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/9.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/10.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/11.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/12.jpg)
Alberto Raposo – PUC-Rio
Cálculo do código de um vértice
Outcode 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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/13.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/14.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/15.jpg)
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 E
C
D. Brogan, Univ. of Virginia
![Page 16: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/16.jpg)
Alberto Raposo – PUC-Rio
Cohen-Sutherland Line Clipping
• Ache a interseção da linha com a aresta
A
B
D E
C
D. Brogan, Univ. of Virginia
![Page 17: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/17.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/18.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/19.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/20.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/21.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/22.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/23.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/24.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/25.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/26.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/27.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/28.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/29.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/30.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/31.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/32.jpg)
Alberto Raposo – PUC-Rio
Entrando ou Saindo ?
P0P1
Ei
N Ei
N P P PEEi 1 0 0
P0
P1
Ei
N Ei
N P P PLEi 1 0 0
![Page 33: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/33.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/34.jpg)
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
PLP1
PL
PE
P0
D. Brogan, Univ. of Virginia
![Page 35: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/35.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/36.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/37.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/38.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/39.jpg)
Alberto Raposo – PUC-Rio
Recorte de Polígonos
• Mais complicado
• Ainda mais quando polígono é côncavo
Cluter & Durand, MIT
![Page 40: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/40.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/41.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/42.jpg)
Alberto Raposo – PUC-Rio
Quantos lados?
•Sete…
D. Brogan, Univ. of Virginia
![Page 43: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/43.jpg)
Alberto Raposo – PUC-Rio
Tarefa complicada!!!
Polígono côncavo múltiplos polígonos
D. Brogan, Univ. of Virginia
![Page 44: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/44.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/45.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 46: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/46.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 47: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/47.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 48: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/48.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 49: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/49.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 50: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/50.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 51: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/51.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 52: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/52.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 53: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/53.jpg)
Alberto Raposo – PUC-Rio
Sutherland-Hodgman Clipping
D. Brogan, Univ. of Virginia
![Page 54: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/54.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/55.jpg)
Alberto Raposo – PUC-Rio
Sutherland - Hodgman • Clip contra uma aresta (plano) de cada vez
![Page 56: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/56.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/57.jpg)
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 outside
sp
i outputp output
D. Brogan, Univ. of Virginia
![Page 58: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/58.jpg)
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 Pguarde P
S
P
SP
guarde Iguarde I
I
S P
guarde I, Pguarde I, P
I
interno saindo externo entrando
(a) (b) (c) (d)
![Page 59: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/59.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/60.jpg)
Alberto Raposo – PUC-Rio
Clipping de polígonos(Exemplo 1)
1
23
4
56
A
B
S P Ação
1 2 x
2 3 store A,3
3 4 store 4
4 5 store 5
5 6 store B
6 1 x
![Page 61: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/61.jpg)
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 B
CDx x x x
1 45
BCDA
![Page 62: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/62.jpg)
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 B
CDx x x x
E
F
x
x
D 1 x
B, E, F, 5, C, D, 1, AB, E, F, 5, C, D, 1, A
![Page 63: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/63.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/64.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/65.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/66.jpg)
Alberto Raposo – PUC-Rio
Weiler-Atherton Clipping
• Encontre pontos de interseção
Cluter & Durand, MIT
![Page 67: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/67.jpg)
Alberto Raposo – PUC-Rio
Weiler-Atherton Clipping
• Marque os pontos onde o polígono entra na janela de recorte
Cluter & Durand, MIT
![Page 68: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/68.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/69.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/70.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/71.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/72.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/73.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/74.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/75.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/76.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/77.jpg)
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: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Clipping (Recorte) Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br abraposo/INF1366/index.htm](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc10b497959413d8c25fb/html5/thumbnails/78.jpg)
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