Computação Gráfica Interativa - Gattass

Slides:



Advertisements
Apresentações semelhantes
Visualização do OpenGL
Advertisements

Continuidade: sem interrupções
RECORTE DE FIGURAS Algoritmo proposto para Recorte de Segmentos (atribuído a Ivan Sutherland e Dan Cohen) Para o entendimento do algoritmo a ser proposto,
Real Time Rendering.
Computação Gráfica I Conteúdo: Professor:
Rasterização, Anti-aliasing e Preenchimento
Recursividade Prof. Alex F. V. Machado
Computação Gráfica I Conteúdo: Professor: - Recorte 2D
Introdução a OpenGL (parte final).
Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica Recorte
O que é Iluminação? Fenômeno físico resultante da interação de fótons com uma superfícieFenômeno físico resultante da interação de fótons com uma superfície.
Parte 1 – Conceitos de Real Time Rendering. a. Pipeline Gráfico.
Algoritmos de Varrimento para Desenho de Primitivas 2D
Navegador de cenas com openGL e rastreamento de raios
Recorte e seleção de linhas e polígonos
Rasterização de linhas e polígonos
Algoritmo de Rastreamento de Raios
MGattass Algoritmo de Rastreamento de Raios. MGattass Registros da camera obscura (latim) 1.Mo-Ti (V século antes de Cristo) – quarto escuro com pequeno.
INF 1366 – Computação Gráfica Interativa Clipping (Recorte)
Linha de produção de imagens com o OpenGL™ (OpenGL Rendering Pipeline)
Descarte por visibilidade
MGattass Algoritmo de Rastreamento de Raios. MGattass Registros da camera obscura (latim) 1.Mo-Ti (V século antes de Cristo) – quarto escuro com pequeno.
Alberto B. Raposo e Marcelo Gattass
Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) Visualização 3D Incluir no FrameWork Básico (na página da disciplina), as.
Computação Gráfica: Rendering e Rasterização
Rasterização de linhas e polígonos
Laboratório de Programação de Computadores II 2S/2009.
Introdução à Computação Gráfica Projeções
Ray Tracing Patrícia Cordeiro Pereira Pampanelli
Computação Gráfica – Transformações Projetivas
Visualização Tridimensional
Algoritmo de Rastreamento de Raios
INF 1366 – Computação Gráfica Interativa Rasterização
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Visualização Tridimensional. Quando se trabalha em três dimensões, o SRU (Sistema de Referência do Universo) passa a ser composto por três eixos ortogonais.
Modelo e Câmera e Projeção no OpenGL
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Introdução à Computação Gráfica Rasterização
Geometria Epipolar Correspondência a partir da calibração das câmeras ou Forma a partir de correspondências.
1 Computação Gráfica Prof. Dr. Júlio C. Klafke UNIP-Objetivo
Geometria Analítica: Estudo das cônicas: Elipse. Definição: Uma elipse é o lugar geométrico formado pelas posições ocupadas por um ponto que se move em.
Visibilidade Edward Angel, Cap. 7 Apontamentos CG
Linha de produção de imagens com o OpenGL™ (OpenGL Rendering Pipeline)
Dispositivos de Visualização e Rasterização
Universidade Federal do Ma
Calibração de Câmera Como determinar o modelo e os parâmetros que transformam a radiância da cena 3D numa imagem digital.
Computação Gráfica - Amostragem
Computação Gráfica – Transformações Projetivas
Computação Gráfica Professora: Janaide Nogueira
Computação Gráfica para Programadores Java
Algoritmos e Estruturas de Dados I
Desafios de Computação no Desenvolvimento de Jogos
Desafios de Computação no Desenvolvimento de Jogos
Fundamentos da Computação Gráfica
Algoritmo de Rastreamento de Raios
Transformações Geométricas
Tópicos em Computação: Jogos
Transformações Lineares no Plano
Computação Gráfica: Câmera Virtual pt. 2 Prof. Rafael Vieira
Algoritmos e Estruturas de Dados I
Computação Gráfica (Slide 5)
Algoritmo de Rastreamento de Raios
Rasterização, Anti-aliasing e Preenchimento
O que você deve saber sobre
Dispositivos de Visualização e Rasterização
Algoritmo de Rastreamento de Raios
Computação Gráfica I Conteúdo: Professor: - Projeções e câmera virtual
Prof. Paulo Salgado Geometria Analítica Prof. Paulo Salgado
Transcrição da apresentação:

Computação Gráfica Interativa - Gattass 1/16/2019 Máquina de síntese de imagens com o OpenGL™ (OpenGL Rendering Pipeline) Modelo de Camera do OpenGL

Algoritmo de Rastreamento de Raios xe ye ze xo yo zo Para cada pixel da tela Defina um raio Para cada objeto da cena Calcule o objeto visível Para cada luz da cena Lance um raio Teste se o objeto faz sombra Calcule sua iluminação Complexidade maior que O(num. de pixels  num. de objetos2)

Algortimo de Mapa de Profundidade ye ze xe Calcule a cor de cada vertice Projete cada vertice Preencha o triângulo dos vértices projetados

Discrete Surfaces Triangle Mesh

Rasterization Going from 3D to 2D 1- Project vertices onto screen 2- Loop over pixels checking coverage 3- Use the pixel centers Camera

Resumo das transformações de vértice center eye zo yo xo up xe ye ze xn yn zn

Model View xc yc zc yw xw zw pw pc

Discrete Surfaces

W varies according to -Z

Distorce o frustum de visão para o espaço da tela Computação Gráfica Interativa - Gattass 1/16/2019 Distorce o frustum de visão para o espaço da tela xe ye ze ze = -n ze = -f 1 2 3 4 5 6 7 8 xe ye ze ze = -n ze = -f 1 2 3 4 5 6 7 8 Modelo de Camera do OpenGL

Transformação projetiva - a origem vai para o infinito em z+ -

Transformação projetiva - os pontos do plano z =–n ficam imóveis -

Transformação projetiva - matriz P com estas condições -

Transformação projetiva - condição sobre os pontos do plano z = –f -

Transformação projetiva - condição sobre os pontos do plano z = –f -

Resumindo [ P ] = ? xe ye ze 1 2 3 4 5 6 7 8

Outro enfoque: distorce o frustum de visão para o espaço da tela Computação Gráfica Interativa - Gattass 1/16/2019 Outro enfoque: distorce o frustum de visão para o espaço da tela xe ye ze ze = -n ze = -f d = n xe ye ze ze = -n ze = -f Modelo de Camera do OpenGL

Uma equação para profundidade Ptos no near (z=-n): Ptos no far (z=-f): [ H ] = n n+f -1 n f

Transforma o prisma de visão cubo normalizado [-1,1]×[-1,1] ×[-1,1] Computação Gráfica Interativa - Gattass 1/16/2019 Transforma o prisma de visão cubo normalizado [-1,1]×[-1,1] ×[-1,1] xe ye ze -(r-l)/2 (r-l)/2 -(t-b)/2 (t-b)/2 (f-n)/2 -(f-n)/2 xe ye ze l r b t xn yn zn 1 -1 near far xe ye ze 1 -1 far near Modelo de Camera do OpenGL

Projeção Cônica (Frustum) void glFrustum(GLdouble left,GLdouble right,GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); near ye ze far top botton xe ze near left right far view frustum ze xe ye eye xn yn zn 1 -1 near far

Matriz Frustum do OpenGL Computação Gráfica Interativa - Gattass 1/16/2019 Matriz Frustum do OpenGL OpenGL Spec Modelo de Camera do OpenGL

Resumo das transformações (até o momento) center eye zo yo xo up xe ye ze xn yn zn

Transformação para o viewport Computação Gráfica Interativa - Gattass 1/16/2019 Transformação para o viewport void glViewport(int x0, int y0, int w, int h ); xw yw w h y0 x0 xn yn zn 1 -1 zw[0.. zmax], zmax = 2n-1 geralmente 65535 Modelo de Camera do OpenGL

Projeção Paralela (Ortho) Computação Gráfica Interativa - Gattass 1/16/2019 Projeção Paralela (Ortho) direção de projeção near ye top far bottom ze eye xe left right void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); void gluOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top ); Modelo de Camera do OpenGL

Matriz Ortho do OpenGL OpenGL Spec

Rasterization Where vertex attributes are interpolated

Rastreio de Polígonos e Linhas Computação Gráfica Interativa - Gattass 1/16/2019 Rastreio de Polígonos e Linhas Modelo de Camera do OpenGL

Coordenadas de um ponto na janela (windows coordinate) w=6 e h=5 OpenGL Spec 1 2 3 4 5 xw yw 0.5 1.5 2.5 3.5 4.5 5.5 ponto: (3,2) tamanho 1 sem anti-alias ponto: (3,3) tamanho 3 sem anti-alias

Critério geométrico para linhas horizontais, verticais e à 450 1 2 3 4 5 linha: (0,0),(4,0) linha: (5,1),(5,4) linha: (0,2),(3,5)

Critério geométrico de Bresenham (1965) para linhas 1 2 3 4 5 1 2 3 4 5 x dominante  x dominante, um pixel por coluna y dominante, um pixel por linha

Critérios geométricos para linhas do OpenGL™ OpenGL™ spec Bresenham (1965) 1 2 3 4 5 1 2 3 4 5

Algoritmo simples de rastreio de linha (no primeiro octante) 1 2 3 4 5 #define ROUND(x) (int)floor((x)+0.5) void linha(int x1, int y1, int x2, int y2) { float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y; fragmento(x1,y1); while( x1 < x2 ) x1++; y = m*x1 + b; fragmento(x1,ROUND(y)); } Podemos evitar a multiplicação?

Forma incremental do algoritmo simples de linha void linha(int x1, int y1, int x2, int y2) { float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y=y1; pixel(x1,y1); while( x1 < x2 ) x1++; y += m; fragmento(x1,ROUND(y)); } Podemos evitar o uso de ponto flutuante?

Equação implícita da reta y y2 y1 x x1 x2

Equação básica do algoritmo do ponto médio para linhas ne xp xp+1 xp+2 yp m yp+1/2 yp+1 yp+2 mne e ne xp yp m xp+1 xp+2 yp+1/2 yp+1 yp+2 me

Algoritimo do ponto médio - redução para inteiros - ne xp xp+1 xp+2 yp m yp+1/2 yp+3/2 mne me e ne

Algoritimo do ponto médio para linhas - código C - void linhaPM(int x1, int y1, int x2, int y2) { int a = y2-y1; int b = x1-x2; int d=2*a+b; /* valor inicial da var. decisao */ int incrE = 2*a; /* incremento p/ mover E */ int incrNE = 2*(a+b); /* incremento p/ mover NE */ fragmento(x1,y1); while (x1<x2) { x1++; if (d<=0) /* escolha E */ d+=incrE; else { /* escolha NE */ d+=incrNE; y1++; }

Algoritimo do ponto médio para linhas com estilo - código C - void linhaPM(int x1, int y1, int x2, int y2) { int a = y2-y1; int b = x1-x2; int d=2*a+b; /* valor inicial da var. decisao */ int incrE = 2*a; /* incremento p/ mover E */ int incrNE = 2*(a+b); /* incremento p/ mover NE */ int style[8]={1,1,0,0,1,1,0,0}; int k=1; fragmento(x1,y1); /* primeiro pixel */ while (x1<x2) { x1++; if (d<=0) /* escolha E */ d+=incrE; else { /* escolha NE */ d+=incrNE; y1++; } if (style[(++k)%8]==1) fragmento(x1,y1);

Critério geométrico para rastreio de elipses x F(x,y) = 0 45o y e se m me mse F(x,y) = 0

Rastreio de círculos y x F(x,y) = 0 45o e me m se mse x=0,y=raio; fragmento(x,y); while (x<y) { x++; if (F(M)<0) escolha E; else escolha SE; fragmento(E ou SE); } x y simetrias do círculo: cada ponto calculado define 8 pixels

Rastreio de polígonos

Conceito de interior num polígono qualquer (regra par-ímpar) 2 6 1 1 3 1 1

Preenchimento de polígonos dados: {(x0,y0), (x1,y1), (x2,y2) (x3,y3), (x4,y4)} y ymax ymin 1 4 acha ymax e ymin Para cada y [ymax,ymin] Para cada aresta calcula as interseções ordena interseções desenha linhas horizontais ys i0 i1 i3 i4 xi1 xi0 xi3 2 3 x xi4 vx= {xi1 , xi0 , xi4 , xi3}

Interseção nos vértices L L x y ys 5 1 2 4 i0 i2 i3 i1 i4 3 x y ys 5 1 2 4 i0 i2 i3 i1 i4 3 x y ys 5 1 2 4 i0 i2 i3 i1 i4 3 inclui vértices: i0-i1, i2-i3, i4-? não inclui vértices: i0-? ou x y ys 5 1 2 4 i0 i2 i3 i1 3 Solução: x y ys 5 1 2 4 i0 i4 3

Otimização do algoritmo de preenchimento: interpolação linear Interpolação linear na aresta x y y0 y1 ys x1 x0 ys+1 dy = 1 xi xi+1

Otimizações do algoritmo de preenchimento: triângulos 1 2 3 4 5 6 B C a b c x y A

Posições possíveis de um triângulo dado yA≥ yB ≥ yC x y A x y B C a b c A

Rastreio de triângulo y y x x xa xb xc xb yA yA c c ys b b yB yB a ys yC yC C C xa xb x xc xb x

Profundidade

Transformação para o viewport Computação Gráfica Interativa - Gattass 1/16/2019 Transformação para o viewport void glViewport(int x0, int y0, int w, int h ); xw yw w h y0 x0 xn yn zn 1 -1 zw[0.. zmax], zmax = 2n-1 geralmente 65535 Modelo de Camera do OpenGL

Mapa de profundidade -1 1 ze zn n=1 n=10 n=30 -f=-100

Mapa de profundidade

Transformações de um vértice OpenGL Spec

Computação Gráfica Interativa - Gattass 1/16/2019 Modelo do Pintor profundidade z Modelo de Camera do OpenGL

Computação Gráfica Interativa - Gattass 1/16/2019 ZBuffer: idéia básica z MATRIZ DE PROFUNDIDADES Modelo de Camera do OpenGL

ZBuffer - pseudo-código void ZBuffer( void) { int x,y; for (x=0; x<w; x++) { for (y=0;y<h; y++) { WritePixel(x,y, bck_color); WriteZ(x,y,far+1); } for (each primitive) { for (each pixel in the projected primitive) { double pz = z coordinate of the (x,y) pixel; if (pz <= ReadZ(x,y)) { WritePixel(x,y, color); WriteZ(x,y,pz); } /* Zbuffer */ void glEnable( GL_DEPTH_TEST );

Interpolação perspectiva Computação Gráfica Interativa - Gattass 1/16/2019 Interpolação perspectiva plano de projeção z eye Modelo de Camera do OpenGL

Interpolação perspectiva Computação Gráfica Interativa - Gattass 1/16/2019 Interpolação perspectiva z eye n=1 Modelo de Camera do OpenGL

Interpolação da profundidade

Uma outra forma de ver a interpolação da profundidade Computação Gráfica Interativa - Gattass 1/16/2019 Uma outra forma de ver a interpolação da profundidade z y y z L -1 -n -f z y Modelo de Camera do OpenGL

Interpolação de atributos OpenGL Spec

Interpolação de atributos homogêneos OpenGL Spec

Suavização da tonalização Computação Gráfica Interativa - Gattass 1/16/2019 Suavização da tonalização Gouraud void glShadeModel (GL_FLAT); c1 c4 c2 c3 c12 c43 c void glShadeModel (GL_SMOOTH); Modelo de Camera do OpenGL

Algortimo de ZBuffer void ZBuffer( void) { for (cada primitva gráfica dos objetos da cena) { for (cada fragmento gerado pelo rastreio da primitiva) { if (o fragmento não pertencer a janela) break; /* pertinencia */ if (o fragmento não pertencer ao retangulo de janela de recorte) break; /* scissor test */ if (a profundidade do fragmento for maior que a corrente) break; /* profundidade */ . . . WritePixel(x,y, color); WriteZ(x,y,pz); }

Exercício 1 ye ze xe ye ze xe ze Derive a matriz de projeção da seguinte câmera ze xe ye eye xe ze near left right far  near ye far top botton ze

FIM

z=0 OpenGL Spec

Examples at Tecgraf

Examples at Tecgraf