Computação Gráfica I Conteúdo: Professor:

Slides:



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

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,
Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro Conteúdo: - Transformações geométricas no plano.
Computação Gráfica I Conteúdo: Professor: - Projeções e câmera virtual
Computação Gráfica I Conteúdo: Professor: - Objetos gráficos planares
Computação Gráfica I Conteúdo: Professor: - Objetos gráficos espaciais
Programação de Computadores
Cálculo 3 9. Integrais Duplas Volumes Amintas Paiva Afonso
Nilo Menezes – Lógica de Programação –
Conceitos e Propriedades
SUPORTE À FRAGMENTAÇÃO
Aula 02.
Aula 02 continuação.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 11.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 10.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 9.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 4.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 11.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 4.
Cálculo - Thomas Capítulo 2.
Rasterização, Anti-aliasing e Preenchimento
Dispositivos de Visualização e Rasterização
PREDIÇÃO DATA MINING AULA 13 SANDRA DE AMO
Algoritmos para Seleção Simples
Relações Adriano Joaquim de O Cruz ©2002 NCE/UFRJ
Algoritmos de Varrimento para Desenho de Primitivas 2D
Automato de Pilha.
Recorte e seleção de linhas e polígonos
Rasterização de linhas e polígonos
Computação Gráfica Interativa - Gattass
LINGUAGEM C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Teoria e Método em Geoprocessamento. Exercícios.
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica Teórica
Outras Transforações de Imagens
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Rendering e Rasterização
Universidade Federal do Espírito Santo Programação II Expressões(operadores) Comandos Básicos Professora: Norminda Luiza.
Exp_P160_00hzCI. sim_P160_00hz exp_P160_45hz sim_P120_20hz.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
Rasterização de linhas e polígonos
Paradigmas da Programação
Técnicas para algoritmos de superfície visível eficientes (Techniques for efficient visible-surface algorithms) Fabio Utzig Rodrigo Senger.
Laboratório de Programação de Computadores II 2S/2009.
Professor José Rui Aula 07
Site: Fone: (45) e (45) UNIOESTE: Campus Universitário de Mal. Cdo. Rondon - PR Professor.
Introdução a Computação e Cálculo Numérico
Algoritmos de varredura linear e busca de padrões
Linguagem de Programação I Parte II
Algoritmos e linguagens de programação 1 (aula 10)
Seminário 1: Revisão de C
Transformações Geométricas no Plano e no Espaço
Prof. Reginaldo Ré Universidade Tecnológica Federal do Paraná – Campus Campo Mourão COINT - Coordenação.
Computação Gráfica - Amostragem
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
MSc. Marcelo Torres – professortorres.com.br. Linguagem de Programação 01 - Introdução à Linguagem C MSc. Marcelo Torres – professortorres.com.br.
Net Aula Unicanto TECLE F5 PARA MAXIMIZAR AS TELAS Para Visualizar Melhor Estes Slides, Tecle F5 para Maximizar as Telas: Tecle Enter para continuar.
Computação Gráfica – Introdução ao OpenGL
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
INF 1366 – Computação Gráfica Interativa Rasterização
Introdução à Computação Gráfica
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Introdução à Computação Gráfica Rasterização
Computação Gráfica - Amostragem
Computação Gráfica Interativa - Gattass
Transcrição da apresentação:

Computação Gráfica I Conteúdo: Professor: Anselmo Montenegro www.ic.uff.br/~anselmo Computação Gráfica I Conteúdo: - Algoritmos para rastreio (scan-conversion).

Algoritmos para rastreio: introdução

As coordenadas do centro de um ponto de tamanho impar são: Algoritmos para rastreio: Coordenadas de um ponto na janela (windows coordinate) As coordenadas do centro de um ponto de tamanho impar são: OpenGL Spec w=6 e h=5 1 2 3 4 5 xw yw 5.5 4.5 3.5 2.5 1.5 0.5 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

Casos triviais em que as linhas passam pelo centro das células. Algoritmos para rastreio: critério geométrico para linhas horizontais, verticais e à 45° Casos triviais em que as linhas passam pelo centro das células. 4 3 linha: (0,0),(4,0) linha: (5,1),(5,4) linha: (0,2),(3,5) 2 1 1 2 3 4 5

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

Podemos evitar a multiplicação? Algoritmos para rastreio: algoritmo simples para o primeior octante Podemos evitar a multiplicação? 1 2 3 4 5 (x1,y1) (x2,y2) #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)); }

Algoritmos para rastreio: algoritmo simples para o primeior octante – forma incremental (x2,y2) (x1,y1) 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?

Algoritmos para rastreio: equação implícita da reta y y2 y1 x x1 x2

Algoritmos para rastreio: 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

Algoritmos para rastreio: algoritmo do ponto médio - versão para aritmética inteira ne xp xp+1 xp+2 yp m yp+1/2 yp+3/2 mne me e ne

Algoritmos para rastreio: algoritmo do ponto médio para linhas – código em 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++; }

Algoritmos para rastreio: algoritmo do ponto médio para linhas com estilo – código em 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);

Algoritmos para rastreio: rastreio para elipses – critério de Bresenham Segundo o critério de Bresenham se a curva está mais próxima da horizontal tomamos um ponto por coluna caso contrário tomamos um ponto por linha. O ponto de transição é o que possui gradiente na direção dada pelo ângulo de 45 graus. x F(x,y) = 0 45o y

Algoritmos para rastreio: rastreio para elipses O critério do ponto médio é aplicado de forma semelhante ao aplicado para linhas. A diferença principal é que F(x,y) é quadrática. Para implementar o algoritmo eficazmente é necessário calcular incrementos dos incrementos de y quando x é acrescido de 1.

Algoritmos para rastreio: rastreio para elipses A figura abaixo ilustra a porção do primeiro quadrante no qual a curva é x dominante. Neste caso as escolhas são e e se. A partir do ponto de transição a curva é y dominante e as escolhas são s e se. e se m me mse F(x,y) = 0

Algoritmos para rastreio: rastreio de círculos O rastreio de um círculo é um caso particular do rastreio de uma elipse. Trabalhamos com o segundo octante, no qual a curva é x dominante. Utilizamos a simetria do círculo para definir os pontos nos demais octantes.

Algoritmos para rastreio: rastreio de círculos x y 45o x = y e se m me mse F(x,y) = 0 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 cada ponto calculado define 8 pixels

Algoritmos para rastreio: rastreio de polígonos

Algoritmos para rastreio: rastreio de polígonos – noção de interior para um polígono qualquer 2 6 1 1 3 1 1

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

Algoritmos para rastreio: interseção nos vértices 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

Algoritmos para rastreio: 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

Algoritmos para rastreio: otimização do algoritmo de preenchimento – triângulos 4 y A 5 3 c b B 6 2 a C 1 x

Algoritmos para rastreio: possíveis configurações para um triângulo yA≥ yB ≥ yC x x

Algoritmos para rastreio: rastreio de um triângulo y y A A yA yA c c ys b b B B yB yB a ys a yC yC C C xa xb x xc xb x