Licenciatura em Engenharia Informática e de Computadores Computação Gráfica Recorte Edward Angel, Cap. 7 Apontamentos CG
Matéria Primeiro Teste 26 de Outubro 2013 Tudo até Sombreamento (inclusivé) 26/10-9h00 Alameda (Q01) e Tagus (A2)
LEIC CG Remoção de Faces Traseiras e Recorte Back-Face Culling
Faces Traseiras Requisitos Objecto é um poliedro sólido faces poligonais envolvem o volume O interior não é exposto pelo recorte Conclusão Faces traseiras não são visíveis Faces Traseiras? Solução Identificar faces traseiras Remover da cena
Faces Traseiras Requisitos Objecto é um poliedro sólido faces poligonais envolvem o volume O interior não é exposto pelo recorte Conclusão Faces traseiras não são visíveis Faces Traseiras? Solução Identificar faces traseiras Remover da cena
Identificar Faces Traseiras Como identificar faces traseiras? Calcular o ângulo entre a normal e a VPN? N N V Front-Face > 90 o < 90 o Back-Face Não é eficiente!
Identificar Faces Traseiras Como identificar faces traseiras? Usar produto interno Normal ao polígono (N) Vector de visualização (V) < 0 Polígono visível = 0 Arestas visíveis > 0 Polígono invisível (back-face) Cálculos em coordenadas de visualização (VRC) N N V Front-Face > 90 o < 90 o Back-Face
Identificar Faces Traseiras Como identificar faces traseiras? Usar produto interno ( N V > 0 back-face) Cálculos em coordenadas da câmara (VRC) É mesmo necessário calcular o produto interno? Não! Basta verificar a componente Z da normal!! N Z > 0 back-face N N Z Front-Face > 90 o < 90 o V Back-Face
Remover Faces Traseiras Cena com umpoliedro convexo RSO fica completa com back-face culling Em poliedros côncavos Algumas front-facespodem estar totalmente ocultas (E) parcialmente ocultas (C) z A B D C H E F G x
Back-Face Culling Remoção de faces traseiras Remove (aprox.) metade dos polígonos Limitações Apenas funciona em Modelos sólidos Definidos com malhas poligonais Para volumes não convexos Apenas serve como passo de pré-processamento É necessário usar outro algoritmo Objectos definidos com outra representação: Convertidos em malhas poligonais
Pipeline de Visualização 3D
Pipeline de Visualização 3D
LEIC CG Remoção de Faces Traseiras e Recorte Recorte
Volume de Visualização Sobre que volume de visualização é feito o recorte? Volume Perspectivo (Frustum)? Volume Ortogonal? Volume Canónico Perspectivo? Volume Canónico Ortogonal? Onde estamos no pipeline 3D? 2º Andar, 3º Passo Recorte de Polígonos Qual o volume de visualização Que temos neste ponto?
Recorte (2/3) Elimina primitivas fora do volume canónico Objectos, vértices, arestas e faces
Recorte (3/3) Vértices: Comparar xe ycom +/-1 zcom 0 e 1 Conservar se dentro dos limites, eliminar se fora Arestas Calcular intersecção com planos de recorte Determinar valores x, y, z na intersecção Conservar parte da aresta dentro do volume Recorte 3D extensão trivial de recorte 2D
LEIC CG Remoção de Faces Traseiras e Recorte Recorte 2D
Recorte de Linhas F D E F Rectângulo de Recorte B A G C G I D I H J H J Recorte A B C G D H (x min X X max ) e (Y min Y Y max ) ponto dentro Extremos dentro [AB]: segmento dentro Um fora outro dentro [CD] Determinar ponto de intersecção [D ] Rejeitar exterior Ambos fora [GH ou IJ]: Determinar pontos de intersecção se houver [GH], usá-los rejeitar se não [IJ]
Recorte de Linhas: Força Bruta Testar extremos contra rectângulo de recorte Tratar os casos triviais de inclusão total Casos não triviais: usar equação paramétrica da recta X = X 0 + t (X 1 - X 0 ) Y = Y 0 + t (Y 1 - Y 0 ) Resolver equações simultâneas segmento de recta (t line ) 4 lados do rectângulo (t edge ) Existe intersecção se: 0 t line 1 e 0 t edge 1
LEIC CG Remoção de Faces Traseiras e Recorte Algoritmo de Cohen-Sutherland
Algoritmo de Cohen-Sutherland (1/5) Usa Outcodes divide plano em 9 regiões 1001 1000 1010 1º Bit: Acima do lado superior (Y > Ymax) 0001 0000 0010 2º Bit: Abaixo do lado inferior (Y < Ymin) 3º Bit: À direita do lado direito (X > Xmax) 0101 0100 0110 4º Bit: À esquerda do lado esquerdo (X < Xmin) Casos triviais: OC 1 = OC 0 = 0000 => aceita OC 1 & OC 0 0000 => rejeita (semiplano ext.)
Algoritmo de Cohen-Sutherland (2/5) Restantes Casos (OC 1 & OC 0 = 0) Subdividir segmento inicial: Corte através de um lado da janela atravessado Partir de um extremo exterior Testar outcode para escolher próximo lado de recorte (bit a 1) Descartar o fragmento exterior Se fragmento interior trivialmente tratável o processo termina. Caso contrário, subdividi-lo repetir o processo.
Algoritmo de Cohen-Sutherland (3/5) Exemplo D 1000 1010 1001 0000 B A Rectangulo de Recorte 0010 0100 Recorte de [AD] Subdividir pelo lado superior [AB] e [BD]. Descartar fragmento exterior [BD]. Aceitar trivialmente [AB](OC A = OC B = 0)
Algoritmo de Cohen-Sutherland (4/5) Exemplo 1000 1010 1001 I 0000 H G Rectangulo de Recorte 0010 0100 F E Partir de E e subdividir por baixo [EF] e [FI] Descartar [EF] [FI] não trivial Subdividir [FI] pelo lado superior [FH] e [HI]. Descartar [HI] [FH] não trivial (OC H = 0010). Subdividir [FH] pelo lado direito [FG] e [GH]. Descartar [GH] Aceitar [FG](OC F = OC G = 0).
LEIC CG Recorte 2D Recorte de Polígonos
Recorte de Polígonos
Recorte de Polígonos Lados do Polígono testados com arestas de recorte Lados iniciais podem ser: trivialmente aceites, rejeitados ou subdivididos Podem surgir novos lados colineares com arestas de recorte O resultado final pode ser um ou mais polígonos
Recorte de Polígonos
Algoritmo de Sutherland-Hodgman (1/4) Abordagem Dividir para Reinar Recortes sucessivos do polígono por aresta infinita Quatro passos (um para cada aresta)
Algoritmo de Sutherland-Hodgman (2/4) Quatro passos (um para cada aresta) Em cada passo: Entrada = cadeia de vértices (V 1, V 2,, V n ) Resultado = nova cadeia de vértices (polígono recortado) Resultado do passo N= Entrada do N+1 Passo 1: LeftClip
Algoritmo de Sutherland-Hodgman (2/4) Quatro passos (um para cada aresta) Em cada passo: Entrada = cadeia de vértices (V 1, V 2,, V n ) Resultado = nova cadeia de vértices (polígono recortado) Resultado do passo N= Entrada do N+1 Passo 2: Top Clip
Algoritmo de Sutherland-Hodgman (2/4) Quatro passos (um para cada aresta) Em cada passo: Entrada = cadeia de vértices (V 1, V 2,, V n ) Resultado = nova cadeia de vértices (polígono recortado) Resultado do passo N= Entrada do N+1 Passo 3: Right Clip
Algoritmo de Sutherland-Hodgman (2/4) Quatro passos (um para cada aresta) Em cada passo: Entrada = cadeia de vértices (V 1, V 2,, V n ) Resultado = nova cadeia de vértices (polígono recortado) Resultado do passo N= Entrada do N+1 Passo 4 : BottomClip
Algoritmo de Sutherland-Hodgman (3/4) Executa o chamado pipeline clipping Quatro andares de clipping Um para cada aresta Pode-se aplicar o Cohen-Sutherland Aresta a aresta Left Clip Top Clip Bottom Clip Right Clip
Algoritmo de Sutherland-Hodgman (4/4) Inserção de pontos Interior Exterior Interior Exterior Interior Exterior Interior Exterior P S S P I I P S P S Caso 1: Caso 2: Caso 3: Caso 4: Inserir ponto P Inserir ponto I Não insere pontos Insere primeiro I Insere depois P Pode gerar falsos lados (remover a posteriori)
Algoritmo de Sutherland-Hodgman (EXEMPLO)
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 Left Clip
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 Left Clip [P 0 P 1 ] Não insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 I 0 I 0 Left Clip [P 1 ] Insere pontos I 0
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 P I 2 0 I 0 Left Clip [ ] Insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 P I 2 0 I 0 Left Clip [ P 4 ] Insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 4 P 5 P 1 I 2 I P 1 3 P I 2 0 I 0 Left Clip [P 4 P 5 ] Não insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 I 2 P I 2 0 I 0 I 2 Left Clip [P 5 ] Insere pontos I 2 e
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 I 2 P I 2 0 I 0 I 2 Left Clip [ ] Insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) P 0 P 1 P 4 P 5 P 0 P 5 P 4 P 1 I 7 I 2 P I 2 0 I 0 I 2 I 3 Left Clip [ P 0 ] Insere ponto I 3
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 0 Top Clip Resultado após Left Clip
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 0 Top Clip [I 0 ] Insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 0 Top Clip [ ] Insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 0 Top Clip [ ] Insere ponto
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 4 I 0 I 4 Top Clip [ I 2 ] Insere ponto I 4
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 4 I 5 I 0 I 4 I 5 Top Clip [I 2 ] Insere pontos I 5 e
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 4 I 5 I 0 I 6 I 4 I 5 I 6 Top Clip [ ] Insere ponto I 6
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 4 I 5 I 0 I 6 I 4 I 5 I 6 Top Clip [ I 3 ] Não insere pontos
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 0 I 2 I 3 I 3 P I 5 2 I 4 = I 7 I 5 I 0 I 0 I 6 I 4 I 5 I 6 I 7 I 0 Top Clip [I 3 I 0 ] Insere pontos I 7 e I 0
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 4 I 5 I 6 I 7 I 0 I 4 = I 7 I 5 I 6 I 0 Right Clip I 4 = I 7 I 5 I 6 I 0 I 4 I 5 I 6 I 7 I 0 Resultado após Top Clip
Algoritmo de Sutherland-Hodgman (EXEMPLO) I 4 I 5 I 6 I 7 I 0 I 4 = I 7 I 5 I 6 I 0 Bottom Clip I 4 = I 7 I 5 I 6 I 0 I 4 I 5 I 6 I 7 I 0 Resultado após Right Clip
Algoritmo de Sutherland-Hodgman (EXEMPLO)
LEIC CG Recorte Recorte 3D
Recorte em 3D (1/3) Extensão do algoritmo de Cohen-Sutherland Usar Outcodede 6 bits: bit 1: ponto em frente VV (z < 0) bit 2: ponto atrás VV (z > 1) bit 3: ponto acima Volume de Visualização (y > 1) bit 4: ponto abaixo VV (y < -1) bit 5: ponto à direita VV (x > 1) bit 6: ponto à esquerda VV (x < -1)
Recorte em 3D (2/3) 01 Volume de Visualização
Recorte em 3D (3/3) Extensão algortimo de Cohen-Sutherland: Aceitação trivial: OC1 = OC2 = 0 Rejeição trivial: OC1 & OC2 0 Calcular 6 intersecções recta-plano VV x = x 0 + t(x 1 -x 0 ) y = y 0 + t(y 1 -y 0 ) z = z 0 + t(z 1 -z 0 ), 0 t 1 Idêntico para recorte de polígonos Sutherland-Hodgman
LEIC CG Pipeline de Visualização 3D
Pipeline de Visualização 3D
Pipeline de Visualização 3D
Pipeline de Visualização 3D