You are on page 1of 20

11/02/2010

Computao Grfica FAESA


Grficos Raster: Algoritmos para Desenho de Primitivas 2D Parte I
Prof. Tiago Wirtti

Modelo Grfico Interativo


Framework para grfico interativo

11/02/2010

Problema do Clipping
Antes e depois do clipping

Pipeline de Entrada e Sada de um Sistema Grfico


Input and output pipeline

11/02/2010

Dispositivo de exibio com controlador (DC) e frame buffer (1)


Controlador (GPU) e memria de vdeo dedicados:

Dispositivo de exibio com controlador (DC) e frame buffer (2)


Controlador (GPU) e memria de vdeo dedicados:

11/02/2010

Dispositivo de exibio sem controlador (DC) e frame buffer em RAM (1)


Sem GPU e memria de vdeo compartilhada:

Dispositivo de exibio sem controlador (DC) e frame buffer em RAM (2)


Sem GPU e memria de vdeo compartilhada:

11/02/2010

Primitivas
Problema da discretizao

Primitivas Retas
Relembrando...

10

11/02/2010

Retas Digital Differential Analizer


Princpio de funcionamento do DDA:

11

Retas Digital Differential Analizer


Deduo:
yi +1 = mxi +1 + B m( xi + x + B yi + mx, mas, x = 1, ento : yi +1 = yi + 1
12

11/02/2010

Retas Midpoint Line Algorithm


Princpio de funcionamento do MLA

13

Retas Midpoint Line Algorithm


Teste de r = F(x,y) contra M

14

11/02/2010

Retas Midpoint Line Algorithm


Derivao do MLA

15

Retas Midpoint Line Algorithm


Deduo (preparando as equaes):
Seja uma reta representada na forma implcita : F ( x, y ) = ax + by + c = 0. Se dy = y1 y0 e dx = x1 x0 , ento a mesma reta pode ser representada por : dy x + B, ( forma y = mx + B), dx e, com um pouco de manipulao : y= F ( x, y ) = dy.x dx. y + B.dx = 0. Logo a = dy, b = dx e c = B.dx na forma implcita.

16

11/02/2010

Retas Midpoint Line Algorithm


Deduo (sobre o critrio de deciso):
Seja M = ( x p + 1, y p + 1 2 ). O critrio do MLA implica em testar o se d = F ( M ) = F ( x p + 1, y p + 1 2 ) ? 0 Por definio, temos : d = a ( x p + 1) + b( y p + 1 2 ) + c, e, se : d > 0, escolha B d < 0, escolha A d = 0, escolha A

17

Retas Midpoint Line Algorithm


Deduo (obtendo o prximo ponto caso A):
Se A foi escolhido pela avaliao de d velho , ento d novo = F ( x p + 2, y p + 1 2) = = a ( x p + 2) + b ( y p + 1 2 ) + c , mas d velho = a( x p + 1) + b( y p + 1 2 ) + c, subtraindo d velho de d novo , podemos escrever : d novo = d velho + a = d velho + dy
18

11/02/2010

Retas Midpoint Line Algorithm


Deduo (obtendo o prximo ponto caso B):
Se B foi escolhido pela avaliao de d velho , ento d novo = F ( x p + 2, y p + 3 2 ) = = a ( x p + 2 ) + b ( y p + 3 2 ) + c, mas d velho = a( x p + 1) + b( y p + 1 2 ) + c, subtraindo d velho de d novo , podemos escrever : d novo = d velho + a + b = d velho + dy dx
19

Retas Midpoint Line Algorithm


Deduo (obtendo o d inicial):
Para d inicial ( x p , y p ) = ( x0 , y0 ), ento : d inicial = F ( x0 + 1, y0 + 1 2) = = a( x0 + 1) + b( y0 + 1 2 ) + c = = ax0 + by0 + c + a + = F ( x0 , y0 ) + a + =a+ b dx = dy 2 2 b = 2

b = 2
20

10

11/02/2010

Retas Midpoint Line Algorithm


Implementao:
private int int int int int int int void draw(int x0, int y0, int x1, int y1) { dx= x1 - x0; dy= y1 y0; d= Math.abs(-2*dy - dx); incrPA= -2*dy; incrPB= 2*(-dy - dx); x = x0; y = y0;

while (x < x1) { if (d <= 0){ d += incrPA; x += Pixel.getDim(); } else { d += incrPB; x += Pixel.getDim(); y -= Pixel.getDim(); } // desenha PONTO (x, y) } }

21

Retas Consideraes
Ordem do ponto final
A ordem do desenho da reta influencia a escolha dos pontos quando d = 0

22

Veja Computer Graphics Principle and Practice, unidade 3.2.3

11

11/02/2010

Retas Consideraes
Reta recortada em x = xmin por um retngulo
Primeiro deve-se obter o ponto com arredondamento, depois calcular a varivel de deciso e obter o prximo ponto (NE ou E)
23

Veja Computer Graphics Principle and Practice, unidade 3.2.3

Retas Consideraes
Reta recortada em y = ymin por um retngulo

Calcula-se a abscissa (xB) da interseo da reta com o inclinada com a reta y = ymin 1/2 e depois deve-se arredondar xB para cima
24

Veja Computer Graphics Principle and Practice, unidade 3.2.3

12

11/02/2010

Retas Consideraes
Retas com diferentes inclinaes
Aumentar a intensidade dos pixels na linha B de forma que a mesma aparente uma melhor continuidade

25

Veja Computer Graphics Principle and Practice, unidade 3.2.3

Primitivas Circunferncia
Derivaes triviais (caso 1)
Seja x2 + y2 = R2 uma circunferncia na origem, ento y = (R2 x2 )1/2 para 0 x R

26

Veja Computer Graphics Principle and Practice, unidade 3.3

13

11/02/2010

Primitivas Circunferncia
Derivaes triviais (caso 2)
Usar coordenadas polares, de forma que x = R.cos() e y = R.sin() com 0 /2

27

Veja Computer Graphics Principle and Practice, unidade 3.3

Primitivas Circunferncia
Propriedade importante da circunferncia
Simetria

28

Veja Computer Graphics Principle and Practice, unidade 3.3.1

14

11/02/2010

Primitivas Circunferncia
Simetria em pseudo-cdigo:

29

Veja Computer Graphics Principle and Practice, unidade 3.3.1

Circunferncia Midpoint Circle Algorithm


Midpoint Circle Algorithm (MCA):

30

Veja Computer Graphics Principle and Practice, unidade 3.3.2

15

11/02/2010

Circunferncia Midpoint Circle Algorithm


Deduo (sobre o critrio de deciso):
Seja M = ( x p + 1, y p 1 2 ). O critrio do MLC implica em testar o se d = F ( M ) = F ( x p + 1, y p 1 2 ) ? 0 Por definio, temos : d = ( x p + 1) 2 + ( y p 1 2 ) 2 R 2 , e, se : d > 0, escolha A d < 0, escolha B d = 0, escolha B

31

Circunferncia Midpoint Circle Algorithm


Deduo (obtendo o prximo ponto caso A):
Se A foi escolhido pela avaliao de d velho , ento d novo = F ( x p + 2, y p 1 2 ) = = ( x p + 2) 2 + ( y p 1 2 ) 2 R 2 , mas d velho = ( x p + 1) 2 + ( y p 1 2) 2 R 2 , subtraindo d velho de d novo , temos : d novo = d velho + (2 x p + 3)
32

16

11/02/2010

Circunferncia Midpoint Circle Algorithm


Deduo (obtendo o prximo ponto caso B):
Se B foi escolhido pela avaliao de d velho , ento d novo = F ( x p + 2, y p 3 2 ) = = ( x p + 2) 2 + ( y p 3 2 ) 2 R 2 , mas d velho = ( x p + 1) 2 + ( y p 1 2) 2 R 2 , subtraindo d velho de d novo , temos : d novo = d velho + (2 x p 2 y p + 5)
33

Circunferncia Midpoint Circle Algorithm


Deduo (obtendo o d inicial):

Para d inicial , ( x p , y p ) = ( x0 , y0 ) = (0, R ), ento : d inicial = F ( x p + 1, y p 1 2 ) = F (1, R 1 2 ) = = (1) 2 + ( R 1 2) 2 R 2 = = 5 R 1 R 4


34

17

11/02/2010

Implementao:

Circunferncia Midpoint Circle Algorithm


private void draw(int x0, int y0, int x1, int y1) {
int x= 0; int y= (int)raio; int d= (int)(1 - raio); // desenha (x, y) circlePoints(x, y, g); while (y>x) { if (d <= 0){ d += 2*x+3; x += Pixel.getDim(); } else { d += 2*(x-y)+5; y -= Pixel.getDim(); x += Pixel.getDim(); } // desenha (x, y) circlePoints(x, y, g); } }

35

Elipse Midpoint Ellipse Algorithm


Regies da elipse
Critrio de separao:

36

Veja Computer Graphics Principle and Practice, unidade 3.4

18

11/02/2010

Elipse MEA
Derivao da elipse para a regio 1:

37

Veja Computer Graphics Principle and Practice, unidade 3.4

Elipse MEA
Derivao da elipse para a regio 2:

38

Veja Computer Graphics Principle and Practice, unidade 3.4

19

11/02/2010

Leituras indicadas:
HEARN D., Baker M.P., Computer Graphics: C Version, 2nd edition, Prentice Hall Captulo 3; FOLEY ,J. D. et al. Computer graphics: principles and practice, 2nd , Reading, Addison-Wesley, 1990 Captulo 3. Visitar www.ieee.org e procurar por Computer Graphics.

20