INF 1366 – Computação Gráfica Interativa Rasterização

Slides:



Advertisements
Apresentações semelhantes
Continuidade: sem interrupções
Advertisements

Computação Gráfica I Conteúdo: Professor:
Z-Buffer Método que opera no espaço da imagem
The Cyclops Project German-Brazilian Cooperation Programme on IT CNPq GMD DLR Departamento de Informática e Estatística - INE/CTC/UFSC Computação Gráfica:
PREENCHIMENTO DE POLÍGONOS
Rasterização, Anti-aliasing e Preenchimento
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado Computação Gráfica Pipeline Gráfico.
Dispositivos de Visualização e Rasterização
Projeções e OpenGL Alex F. V. Machado.
Computação Gráfica (Slide 5)
COMPUTAÇÃO GRÁFICA.
Introdução à Computação Gráfica
Introdução à Computação Gráfica Colorização
Visualização e Projeções I
Algoritmos de Varrimento para Desenho de Primitivas 2D
Rasterização de linhas e polígonos
Traçado de Raios e Modelos de Iluminação por Marcelo Gattass Departamento de Informática PUC-Rio.
Fundamentos de Computação Gráfica Prof.: Marcelo Gattass
INF 1366 – Computação Gráfica Interativa Transformações
Captura de Texto em um Quadro Branco
INF 1366 – Computação Gráfica Interativa
Alberto B. Raposo INF 1366 – Computação Gráfica Interativa Raytracing (resumo) POVRAY – Persistence of Vision Raytracer Alberto.
INF 1366 – Computação Gráfica Interativa Clipping (Recorte)
Descarte por visibilidade
INF 1366 – Computação Gráfica Interativa Grafos de Cena
INF 1366 – Computação Gráfica Interativa Iluminação e Shading
Alberto B. Raposo e Marcelo Gattass
Computação Gráfica Introdução
INF 1366 – Computação Gráfica Interativa Eliminação de Superfícies Escondidas; Anti-Aliasing e Imagens Digitais Alberto B. Raposo
INF 1366 – Computação Gráfica Interativa Modelagem Geométrica
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Rendering e Rasterização
Rasterização de linhas e polígonos
Técnicas para algoritmos de superfície visível eficientes (Techniques for efficient visible-surface algorithms) Fabio Utzig Rodrigo Senger.
An Improved Illumination Model for Shaded Display
Computação Gráfica Pipeline Gráfico.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Sistemas Multimídia e Interface Homem-Máquina
Introdução à Computação Gráfica Projeções
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Visão Computacional Shape from Shading
Exercicios de revisão Exercicio tirados de
Visualização 3D: Projeções
Prof. Leandro da Silva Taddeo
Computação Gráfica – Visibilidade
Computação Gráfica - Amostragem
Hardware assisted rendering of csg models
Visualização Tridimensional (Câmera Sintética)
Ambient Occlusion Disciplina: Fundamentos de Computação Gráfica Professor : Marcelo Gattass Allan Carlos Avelino Rocha Departamento de Informática.
1 GB-109 – Elementos de Computação Gráfica Professor Gilson A. Giraldi Coordenação de Ciência da Computação Web Page:
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Introdução à Computação Gráfica
Computação Gráfica – Transformações Projetivas
Computação Gráfica – Introdução ao OpenGL
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Mudança da Temperatura de Cor de uma Imagem Hildebrando Trannin Fundamentos de Computação Gráfica Prof.: Marcelo Gattass.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Prof. Edison Oliveira de Jesus
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Modelo e Câmera e Projeção no OpenGL
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Revisando... Alberto B. Raposo
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
WAYPOINTS E PATHFINDING Prof. Rafael Oliz. Introdução  Locomover-se no espaço do jogo é uma ação fundamental dos NPCs em qualquer gênero de jogo.  A.
Introdução à Computação Gráfica Rasterização
1/6/2016 Computação Gráfica
1 Computação Gráfica Prof. Dr. Júlio C. Klafke UNIP-Objetivo
Computação Gráfica Interativa - Gattass
Transcrição da apresentação:

INF 1366 – Computação Gráfica Interativa Rasterização Alberto B. Raposo e Marcelo Gattass abraposo@tecgraf.puc-rio.br http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm Alberto Raposo – PUC-Rio

Pipeline Gráfico Modeling Transformations Illumination (Shading) Cluter & Durand, MIT Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display Alberto Raposo – PUC-Rio

Transformações de Modelagem  Modeling Transformations Modelos 3D definidos em seu próprio sistema de coordenadas (object space) Transformações de modelagem orientam os modelos de acordo com um sistema de coordenadas comum (world space) Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display Object space World space Alberto Raposo – PUC-Rio Cluter & Durand, MIT

Transformação de Visualização Cluter & Durand, MIT  Modeling Transformations Mapeia o world space para o eye space Posição do observador é colocada na origem e a direção de foco é orientada ao longo de um dos eixos (normalmente z) Illumination (Shading)  Viewing Transformation (Perspective / Orthographic) Clipping Projection (to Screen Space) Eye space Scan Conversion (Rasterization) Visibility / Display Alberto Raposo – PUC-Rio World space

Clipping (Recorte)    Cluter & Durand, MIT  Modeling Transformations Transforma para Normalized Device Coordinates (NDC) Partes do objeto fora do volume de visualização (view frustum) são removidas Illumination (Shading)  Viewing Transformation (Perspective / Orthographic)  Clipping Eye space NDC Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display Alberto Raposo – PUC-Rio

Projeções Cluter & Durand, MIT  Modeling Transformations Objetos são projetados para o espaço 2D da imagem (screen space) Illumination (Shading)  Viewing Transformation (Perspective / Orthographic)  Clipping NDC Screen Space  Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display Alberto Raposo – PUC-Rio

Rasterização  Rasteriza objetos em pixels Cluter & Durand, MIT  Modeling Transformations Rasteriza objetos em pixels Interpola valores (cores, profundidade, etc.) Illumination (Shading)  Viewing Transformation (Perspective / Orthographic)  Clipping  Projection (to Screen Space) Scan Conversion (Rasterization)  Visibility / Display Alberto Raposo – PUC-Rio

Visibilidade / Display Cluter & Durand, MIT  Modeling Transformations Cada pixel lembra o objeto mais próximo (depth buffer) Quase todas as etapas do pipeline gráfico envolve mudança de sistema de coordenadas. Transformações são fundamentais em computação gráfica! Illumination (Shading)  Viewing Transformation (Perspective / Orthographic)  Clipping  Projection (to Screen Space) Scan Conversion (Rasterization)  Visibility / Display Alberto Raposo – PUC-Rio

Rasterizar Converter coordenadas da tela em cores de pixels L. McMillan MIT 6.837 notes (Fall ’98) Alberto Raposo – PUC-Rio

Problema Primitivas geométricas são contínuas; tela é discreta (pixels) Cluter & Durand, MIT Alberto Raposo – PUC-Rio

2D Scan Conversion (Rasterização) Solução: computar aproximações discretas para desenho das primitivas Rasterização:algoritmos para geração eficiente dessa aproximação Cluter & Durand, MIT Alberto Raposo – PUC-Rio

Algoritmos de rasterização de linhas Suponha Dx > Dy incrementa x e vê o que acontece com y Dx = 5, Dy =3 incrementa y e vê o que acontece com x

Algoritmo simples de linha (no primeiro octante) yi = m xi + b onde: m = Dy/Dx b = y1 - m x1 void Line(int x1, int y1, int x2, int y2, long int color) { float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y; SetPixel(x1,y1, color); while( x1 < x2 ) x1++; y = m*x1 + b; SetPixel(x1,ROUND(y), color); }

Algoritmo de linha incremental Se xi+1 = xi + 1 então yi+1 = yi + Dy/Dx void LineDDA(int x1, int y1, int x2, int y2, int color) { float y; float m = (y2-y1)/(x2-x1); SetPixel(x1,y1, c); y = y1; while( x1 < x2 ) x1++; y += m; SetPixel(x1,ROUND(y), c); }

Algoritmo de linha baseado no erro erro de manter y 0.5 - 0.5 x

Algoritmo de linha baseado no erro void BresLine0(int x1, int y1, int x2, int y2, int c) { int Dx = x2 – x1; int Dy = y2 - y1; float e= -0.5; SetPixel(x1, y1, c); while( x1 < x2 ) x1++; e+=Dy/Dx; if (e>=0) { y1++ ; e -= 1; } erro de manter y 0.5 - 0.5 x e = erro - 0.5 0.5 - 0.5 x

Algoritmo de Bresenham ei = 2*Dx*e void BresLine0(int x1, int y1, int x2, int y2, int c) { int Dx = x2 - x1; int Dy = y2 - y1; float e= -0.5; SetPixel(x1, y1, c); while( x1 < x2 ) x1++; e+=Dy/Dx; if (e>=0) { y1++ ; e - = 1; } void BresLine1(int x1, int y1, int x2, int y2, int c) { int Dx = x2 - x1; int Dy = y2 - y1; int ei = -Dx; SetPixel(x1, y1, c); while( x1 < x2 ) x1++; ei += 2*Dy; if (ei>=0) { y1++ ; ei - = 2*Dx; } válidos somente quando Dx>Dy, x2 > x1 e y2 > y1

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

Equação implícita da reta NE xp xp+1 xp+2 yp M yp+1/2

Algoritmo do ponto médio - variável de decisão - NE xp xp+1 xp+2 yp M yp+1/2 yp+3/2 MNE ME ME MNE

Algoritimo do ponto médio - redução para inteiros -

Algoritimo do ponto médio - código C - void MidpointLine(int x0, int y0, int x1, int y1, int color) { int dx = x1-x0; int dy = y1-y0; int d=2*dy-dx; /* Valor inicial da var. decisao */ int incrE = 2*dy; /* incremento p/ mover E */ int incrNE = 2*(dy-dx); /* incremento p/ mover NE */ int x=x0; int y=y0; Pixel(x,y,color); /* Primeiro pixel */ while (x<xl) { if (d<=0) { /* Escolha E */ d+=incrE; x++; } else { /* Escolha NE */ d+=incrNE; y++; } Pixel(x,y,color); } /* while */ } /* MidpointLine */

Rasterização de Cônicas y F(x,y) = 0 x 450 y simetrias do círculo: cada ponto calculado define 8 pixels x

Rasterização de Cônicas y y=raio; for (x=0; x< y; x++) { if F(M)<0 escolha E else escolha SE Pixel (E ou SE) pinte os simétricos } x E ME M F(x,y) = 0 SE MSE

Prenchimento de polígonos Alberto Raposo – PUC-Rio

Rasterizando Polígonos Em CG interativa, polígonos “rule the world” Triângulo é a “unidade mínima” de um polígono Qualquer polígono pode ser subdividido em triângulos Triângulos garantem ser: Planares Convexos D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Triangularização Polígonos convexos são facilmente triangularizados (Delaunay) Pológonos côncavos apresentam desafios D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Preenchimento “força bruta” para triângulos Para cada pixel Compute as equações das linhas no centro do pixel “recorte” pelo triângulo Problema: se o triângulo é pequeno, muito esforço computacional é desperdiçado Alberto Raposo – PUC-Rio Cluter & Durand, MIT

Preenchimento “força bruta” para triângulos Melhoria: Compute apenas pixels dentro da bounding box do triângulo Xmin, Xmax, Ymin, Ymax dos vértices do triângulo Cluter & Durand, MIT Alberto Raposo – PUC-Rio

Ainda há problemas… Cluter & Durand, MIT Computa-se a equação das linhas para muitos pixels desnecessários Alberto Raposo – PUC-Rio

Use rasterização de linhas Computar os pixels das bordas [P. Shirley, pag 55] Alberto Raposo – PUC-Rio Cluter & Durand, MIT

Rasterização Scan-Line Computar os pixels das bordas Preencher o meio Shirley page 55 Alberto Raposo – PUC-Rio

Scan-line Rasterization Requer um “setup”inicial para ser preparado [P. Shirley, pag 55] Alberto Raposo – PUC-Rio Cluter & Durand, MIT

Ver Aula sobre Clipping Recorte (clipping) Como retirar partes forada janela? Ver Aula sobre Clipping Alberto Raposo – PUC-Rio Cluter & Durand, MIT

Rasterização Geral de Polígonos Considere o polígono abaixo: Como saber se um pixel da scanline está dentro ou for a do polígono? D B C A E F D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Rasterização de Polígonos Pontos interior-exterior D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Rasterização de Polígonos Pontos interior-exterior D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Interior e exterior Alberto Raposo – PUC-Rio

Rasterização Geral de Polígonos Cuidados E se está exatamente na extremidade do vértice? Vértices compartilhados? Aresta horizontal? A-B e I-H B C D E F G I H J A D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

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

Preenchimento de polígonos (scan passando por vértices) y 1 i0 i1 i2 i4 ys 3 i3 5 2 4 x

Preenchimento de polígonos (scan passando por vértices) y 1 i0 i1 i2 i4 ys 3 i3 5 2 4 x não inclui vértices: i0-? inclui vértices: i0-i1, i2-i3, i4-? L y ys x 1 2 3 5 i0 i2 i3 i1 i4 4 y ys x 1 2 3 5 i0 4 L

Interseção nos vértices só inclui vértices de menor y: i0-i4 J só inclui vértices de maior y: i0-i1, i2-i3 J ou reta horizontal não produz interseção

Rasterização Geral de Polígonos Idéia básica: teste de paridade for each scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (edgeCnt % 2) setPixel(pixel); D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Faster Polygon Rasterization Como otimizar o código? for each scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (edgeCnt % 2) setPixel(pixel); Alto custo: testar os pixels para cada aresta Solução: active edge table (AET) – tabela de arestas ativas D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Active Edge Table Idéia: Arestas com intersecção com uma determinada scanline provavelmente também interceptam a próxima scanline A ordem das intersecções não muda muito de uma scanline para outra D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Active Edge Table (AET) Algoritmo: scanline from bottom to top… Selecione a coordenada y mínima de cada aresta A partir de baixo (bottom), coloque arestas com Ymin= 0 na AET Para cada scanline: Selecione as arestas na AET pela interseção em x Caminhe da esquerda para direita, selecionando os pixels com a regra da paridade (interior-exterior) Incremente a scanline Retire as arestas com Ymax < Y Adicione as arestas com Ymin < Y Recalcule as interseções das arestas Pare quando Y > Ymax para todas as arestas D. Brogan Univ. of Virginia Alberto Raposo – PUC-Rio

Active Edge Table (AET) Slater, Steed & Chrysanthou, 2002 Alberto Raposo – PUC-Rio

Active Edge Table (AET) Alberto Raposo – PUC-Rio Slater, Steed & Chrysanthou, 2002

Revisão: Rasterização Scan Line Para a scanline, determine todas as arestas do polígono que a intercepta Ordene as interseções com a scanline em ordem crescente Use o teste de paridade para saber os pixels que serão desenhados Linhas horizontais não entram na contagem de paridade Pontos mínimos Ymin contribuem na contagem da paridade Pontos máximos Ymax não contribuem na contagem da paridade D. Brogan Univ. of Virginia Não desenhada porque H é max de AH e HG não contribui na contagem F Não desenhada porque D é min de ED e incrementa contagem para 2. DC não contribui. H G E D C A B Aresta de baixo desenhada porque A é min de AH e AB não contribui Alberto Raposo – PUC-Rio

Revisão: Rasterização Scan Line Desenha uma linha por vez Vantagem: não exige todo o modelo e toda a imagem na memória Alberto Raposo – PUC-Rio Cluter & Durand, MIT

Revisão: Rasterização Scan Line Inicializa: Raster, Polygons, Edge Table, AEL Para cada scanline y Atualiza Active Edge List (inserir arestas da EdgeTable[y]) Rasterizar pixels de acordo com AEL Atualiza AEL (delete, increment, resort) Alberto Raposo – PUC-Rio

Informações Adicionais M. Slater et al. Computer Graphics and Virtual Environments: From Realism to Real-Time, Addison Wesley, 2002. Peter Shirley. Fundamentals of Computer Graphics, A K Peters, Ltd., Natick, MA, USA, 2002. Foley, J. D., Van Dam, A., Feiner, S. K., e Huhes, J. F., Phlips, L. R., Introduction to Computer Graphics,  Addison-Wesley, 1995. Marcelo Gattass: notas de aula. http://www.tecgraf.puc-rio.br/~mgattass/cg.html Alberto Raposo – PUC-Rio