24
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Embed Size (px)

Citation preview

Page 1: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Computação Gráfica – Visibilidade

Profa. Mercedes Gonzales Márquez

Page 2: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Tópicos

Visibilidade Algoritmos de Visibilidade

Page 3: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

O sistema de visão humana usa vários recursos para perceber a profundidade. Um deles é a oclusão de objetos, ou seja, objetos mais distantes em relação a um observador ao longo de um raio de visão são escondidos pelos objetos opacos mais próximos.

Na Figura, a superfície SA é visível em relação ao observador e as outras ficam escondidas, em inglês hidden.

Visibilidade

Page 4: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Visibilidade

Page 5: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Como diferenciar as distâncias das superfícies em relação ao seu centro de projeção, “limitando” à “visão” somente para as superfícies mais próximas?.

A essência dos algoritmos de visibilidade é muito simples: remover as partes que “não devem ser vistas” pelo computador na produção de uma imagem sintética.

Problema de Visibilidade

Page 6: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Quais primitivas transformadas e projetadas contribuem para os pixels da imagem?

Problema de Visibilidade

Page 7: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Problema de Visibilidade

Em geral resolve-se o problema oposto: Quais as superfícies invisíveis que:

estão fora do campo de visão são faces de trás num poliedro fechado estão ocultas por outras faces mais próximas da

câmara

Page 8: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

São classificados em três grandes grupos: (a) técnicas baseadas em espaço de imagem,

(b) técnicas baseadas em espaço do objeto ou da cena e

(c) técnicas mistas.

Algoritmos de Visibilidade

Page 9: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

A determinação de visibilidade por técnicas baseadas no espaço de imagem tem resolução a nível de pixels.

As baseadas em espaço da cena tem resolução a nível do espaço de representação das figuras geométricas.

Algoritmos de Visibilidade

Page 10: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Alguns métodos:– Detecção das faces de trás (back-face culling) - Técnica

baseada no espaço da cena.– Depth-buffer (z-buffer) – Técnica baseada no espaço da

imagem.– Painter’s algorithm (Algoritmo do Pintor) - Técnica baseada

no espaço da cena.

Algoritmos de Visibilidade

Page 11: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling(Escolha das faces de trás) Este método pode ser aplicado em um único poliedro

convexo fechado na cena.

Não pode ser aplicado : - Em poliedros côncavos - ou quando existem mais objetos

Page 12: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling

As faces cujas normais estão na direcção contrária ao observador não são visíveis. Elas estão numa parte do poliedro cuja visibilidade e bloqueada por outras faces mais próximas ao observador.

E

Usa-se o conceito de vetor normal da face apontando para fora do volume.

Page 13: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling

Esse conceito não pode ser aplicado para um poliedro côncavo como o da figura, observe que a face pintada de vermelho tem vetor normal na mesma direção do observador.

E

Page 14: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling

Como determinar se a face é da frente?

Fase da frente – Fase da frente – o ângulo o ângulo θθ formado pelo vetor formado pelo vetor da linha de vista E e o vetor normal N é menor ou da linha de vista E e o vetor normal N é menor ou igual a 90igual a 90o o

Page 15: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling

Resumindo– E.N ≥ O → Face da

frente– E.N < O → Face de trás

ou E.N ≥ O

Page 16: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling

Como determinar o vetor normal n da face com pontos P1, P2 e P3?

1232, PPvePPuondevun

P3

P2

P1

n

)23)(21()21)(23(

)23)(21()21)(23(

)23)(21()21)(23(

yyxxyyxxz

xxzzxxzzy

zzyyzzyyx

PPPPPPPPn

PPPPPPPPn

PPPPPPPPn

Page 17: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Backface Culling

Veja o programa visibilidade.c no qual cada vez que um cubo é rotacionado são exibidas somente as faces visíveis detetadas pelo algoritmo backface culling. Responda as seguintes perguntas:

– Como são construídas as faces do cubo?– Como são feitas as rotações do cubo, por quê não é usado o comando glRotatef?– Qual é o trecho de código que determina os vetores normais das faces do cubo?– Qual é o trecho de código que determina o vetor da direção de vista. Qual é a posição do observador?– Mude a posição do observador para cima do cubo e para um lado do cubo e observe os novos resultados de visibilidade.

Page 18: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Z-Buffer

• Método que opera no espaço da imagem• Mantém para cada pixel um valor de profundidade (z-buffer ou

depth buffer) • Ao início fazemos:

z-buffer = profundidade máxima Buffer de cor = cor de fundo

• Durante a rasterização de cada polígono, cada pixel passa por um teste de profundidade Se a profundidade do pixel for menor que a registrada no z-

buffer• Pintar o pixel (atualizar o buffer de cor)• Atualizar o buffer de profundidade

Caso contrário, ignorar

Page 19: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Z-Buffer

Page 20: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Z-Buffer

• OpenGL: Habilitar o z-buffer:

glEnable (GL_DEPTH_TEST);

Não esquecer de alocar o z-buffer → GLUT_DEPTH• Número de bits por pixel depende de implementação /

disponibilidade de memória

Ao gerar um novo quadro, limpar também o z-buffer:glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)

Ordem imposta pelo teste de profundidade pode ser alteradaglDepthFunc(…)

• Veja os exemplos em OpenGL: hidplanes.c, planes.c e triangles.c

Page 21: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Z-Buffer

• Exercícios:

(1) As diferentes opções para o parâmetro do comando glDepthFunc estão na página 290 do livro Redbook. Teste cada uma das opções nos três programas (hidplanes.c, planes.c, triangles.c) e relate os resultados.

(2) Desenhe com polígonos (faces) o seguinte cenário mostrado na vista frontal e vista de topo. Aplique as duas técnicas de visibilidade (z-buffer e back face culling) e discuta os resultados visuais após observar o cenário de vários pontos de vista.

Page 22: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Algoritmo do Pintor

• Também conhecido como algoritmo de prioridade em Z (depth priority)

• Idéia é pintar objetos mais distantes (background) antes de pintar objetos próximos (foreground)

Técnica de pintores : as montanhas distantes foram pintadas em primeiro lugar, o gramado mais próximo foi adicionado e, finalmente, as árvores foram acrescidas.

Page 23: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Algoritmo do Pintor

Basicamente, o procedimento envolve três passos:

1. ordenar, de forma decrescente, os polígonos pelas distâncias, ou profundidades, em relação ao observador;

2. resolver as ambiguidades na ordenação, dividindo os polígonos; e

3. desenhar na memória de exibição os polígonos, dos mais distantes para os mais próximos, sendo os valores gravados anteriormente sempre sobrescritos pelos novos valores.

Page 24: Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez

Algoritmo do Pintor

Exemplo de Ambiguidade na ordenação: (a) Sobreposição cíclica;

(b) solução

(a) (b)