Remoção de Faces Traseiras Recorte Edward Angel, Cap. 7 Instituto Superior Técnico Computação Gráfica 2009/2010 1
Na última aula... Câmara Virtual Simples Transformação de Visualização Volumes canónicos Transformações de Normalização Transformação de Projecção
Sumário Remoção de Faces Traseiras Back-face Culling Recorte
Computação Gráfica Câmara Virtual Simples
Câmara Virtual Simples Parâmetros de entrada posição (VRP) orientação (VPN, VUV ) localização do plano de visualização (D) dimensões da janela de visualização w, h, RA e FOV (vertical e horizontal) planos de recorte através das distâncias F e B sobre VPN projecção ortográfica ou perspectiva 5
Câmara Virtual Simples B ângulos de abertura (FOVs) D VUV (view up vector) F VRP VPN-direcção de visualização (view plane normal) plano de recorte anterior plano de recorte posterior Janela de visualização 2w x 2h 6
Computação Gráfica Pipeline de Visualização 3D
Pipeline de Visualização 3D 8
Pipeline de Visualização 3D 9
Computação Gráfica Remoção de Faces Traseiras
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 Em poliedros convexos RSO fica completa com back-face culling Em poliedros côncavos Algumas front-faces podem 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 Objectos definidos com outra representação: Convertidos em malhas poligonais Apenas serve como passo de pré-processamento É necessário usar outro algoritmo
Computação Gráfica Pipeline de Visualização 3D
Pipeline de Visualização 3D 18
Pipeline de Visualização 3D 19
Computação Gráfica 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? 21
Recorte (1/3) Usa volume canónico ortogonal Paralelepípedo z [0..1], x,y [-1..1] (-1, 1, 0) y (-1, 1, 1) plano de recorte posterior (z = 1) plano de recorte anterior (z = 0) (-1, -1, 0) x (1, -1, 0) (1, 1, 1) z (-1, -1, 1) (1, -1, 1)
Recorte (2/3) Elimina primitivas fora do volume canónico Objectos, vértices, arestas e faces
Recorte (3/3) Vértices: Comparar x e y com +/- 1 z com 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
Computação Gráfica 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
Computação Gráfica Recorte 2D 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 C B 0000 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 1001 1000 1010 I Rectangulo de Recorte 0000 G 0010 H 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).
Algoritmo de Cohen-Sutherland (5/5) Eficiente em duas situações: Janelas rectangulares grandes Rectângulo abrange quase toda as linhas Grande parte dos segmentos trivialmente aceites Pick (selecção de objectos), Rectângulo de recorte pequeno Centrado na posição do cursor Muitos segmentos trivialmente rejeitados
Próxima Aula Recorte Algoritmo de Cyrus-Beck Algoritmo de Sutherland-Hodgman 35