A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Computação Gráfica Interativa - Gattass

Apresentações semelhantes


Apresentação em tema: "Computação Gráfica Interativa - Gattass"— Transcrição da apresentação:

1 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

2 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)

3 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

4 Discrete Surfaces Triangle Mesh

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

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

7 Model View xc yc zc yw xw zw pw pc

8 Discrete Surfaces

9 W varies according to -Z

10 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

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

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

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

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

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

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

17 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

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

19 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

20 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

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

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

23 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

24 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

25 Matriz Ortho do OpenGL OpenGL Spec

26 Rasterization Where vertex attributes are interpolated

27 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

28 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

29 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)

30 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

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

32 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?

33 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?

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

35 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

36 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

37 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++; }

38 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);

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

40 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

41 Rastreio de polígonos

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

43 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}

44 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

45 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

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

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

48 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

49 Profundidade

50 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

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

52 Mapa de profundidade

53 Transformações de um vértice
OpenGL Spec

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

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

56 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 );

57 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

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

59 Interpolação da profundidade

60 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

61 Interpolação de atributos
OpenGL Spec

62 Interpolação de atributos homogêneos
OpenGL Spec

63 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

64 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); }

65 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

66 FIM

67 z=0 OpenGL Spec

68 Examples at Tecgraf

69 Examples at Tecgraf


Carregar ppt "Computação Gráfica Interativa - Gattass"

Apresentações semelhantes


Anúncios Google