Introdução a Computação Gráfica [5COP100] Dr. Sylvio Barbon Junior Departamento de Computação - UEL 1o Semestre de 2015 Assunto Aula 2 Princı́pios básicos de imagens de duas dimensões 2 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Sumário • Raster e Vector graphics; • Programas em Java 2D; • Geometria de Objetos: ◦ Básica; ◦ Java 2D; • Transformações Geométricas em Java 2D; • Coordenadas Homogêneas; • Aplicações de Transformações; • Animação e movimento baseado em Transformação; • Movimento em Java 2D; • Interpolação para mudanças contı́nuas; • Interpolação em Java 2D. 3 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Raster vs Vector Graphics Figura: Imagem original, vetorizada e raster [Klawonn, 2012] 4 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Vector vs Raster Graphics • Qual o modelo que descreve um objeto antes de sua renderização? • Vector, Vetorizada ou vector-oriented: ◦ Modelada pela combinação de linhas, retângulos, cı́rculos, elipses e arcos; ◦ A relação entre as formas é expressa via equações matemáticas; ◦ Possibilita a mudança de escala sem perda de qualidade; ◦ Ideal para logotipos, posteres etc. ◦ Adobe Illustrator, Corel Draw e Inkscape. ◦ Formatos: AI, CDR, CGM, SVG, VML entre outros 5 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Raster vs Vector Graphics Figura: Imagem vector [des, 2015] 6 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Vector vs Raster Graphics • Raster ou pixel-oriented: ◦ Formada por uma matriz de pixels, cada ponto tem um valor de cor associado; ◦ É dependente de resolução; ◦ Todas as formas são convertidas em pixels; ◦ Photoshop, Gimp, MS Paint ◦ GIF, BMP, TIFF, JPEG, XCF, JPEG e outros vários. 7 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Raster vs Vector Graphics Figura: Imagem raster [des, 2015] 8 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Vector vs Raster Graphics • scan conversion: conversão de vector-oriented para imagem raster • aliasing effect: ocorre na forma de bordas serrilhadas chamadas de jaggies ou staircasing. Uso de técnicas anti-aliasing para correção. 9 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Raster vs Vector Graphics Figura: Correção anti-aliasing [ali, 2015] 10 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Raster vs Vector Graphics Figura: Imagem Vector e diferentes resoluções de raster [Klawonn, 2012] 11 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Programas em Java 2D • Java 2D é uma API pertencente ao kernel a partir do Java 2; • Apresenta algumas extensões do pacote AWT (Abstract Windowing Toolkit) e Swing; 12 de 27 Figura: API Java 2D [Klawonn, 2012] Listing 1: Primeiro Exemplo Java 2D [Klawonn, 2012] i m p o r t j a v a . awt . ∗ ; p u b l i c c l a s s S i m p l e J a v a 2 D E x a m p l e e x t e n d s Frame { SimpleJava2DExample ( ) { a d d W i n d o w L i s t e n e r ( new MyFinishWindow ( ) ) ; } public void paint ( Graphics g) { G r a p h i c s 2 D g2d = ( G r a p h i c s 2 D ) g ; g2d . d r a w S t r i n g ( ” H e l l o w o r l d ! ” , 3 0 , 5 0 ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g v ) { S i m p l e J a v a 2 D E x a m p l e f = new S i m p l e J a v a 2 D E x a m p l e ( ) ; f . s e t T i t l e ( ”The f i r s t J a v a 2D program ” ) ; f . setSize (350 ,80); f . s e t V i s i b l e ( true ) ; } } 13 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Objetos Geométricos Básicos • Pontos: são definidos pelas coordenadas x e y. • Linhas, polylines ou curvas: são definidas por um ou mais pontos • áreas ou poligonos: podem ser preenchidas por cores ou texturas; • curvas: são definidas como polinômios paramétricos Figura: Curva quadrática e cúbica [Klawonn, 2012] 13 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Objetos Geométricos Básicos • É possı́vel criar polı́gonos complexos com a combinação de outras áreas mais simples usando operações como união (union), intersecção (intersection), diferença (difference) e diferença simétrica (symmetric difference). Figura: Images das operações de União, Intersecção, Diferença e Deferença simétrica entre um cı́rculo e um retângulo. [Klawonn, 2012] 14 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Objetos Geométricos Básicos em Java 2D • Classe abstrata Shape Figura: Exemplo de formas do Java 2D API. [Klawonn, 2012] 15 de 27 Listing 2: Exemplos Java 2D [Klawonn, 2012] Line2D . D o u b l e l i n e = new Line2D . D o u b l e ( x1 , y1 , x2 , y2 ) ; QuadCurve2D . D o u b l e qc = new QuadCurve2D . D o u b l e ( x1 , y1 , c t r l x , c t r l y , x2 , y2 ) ; C u b ic C u r ve 2 D . D o u b l e c c = new C u bi c C u r ve 2 D . D o u b l e ( x1 , y1 , c t r l x 1 , c t r l y 1 , c t r l x 2 , c t r l y 2 , x2 , y2 ) ; 16 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Objetos Geométricos Básicos em Java 2D Figura: Exemplo General Path. [Klawonn, 2012] 16 de 27 Listing 3: Exemplos General Path [Klawonn, 2012] G e n e r a l P a t h gp = new G e n e r a l P a t h ( ) ; gp . moveTo ( 6 0 , 1 2 0 ) ; gp . l i n e T o ( 8 0 , 1 2 0 ) ; // f r o n t u n d e r b o d y gp . quadTo ( 9 0 , 1 4 0 , 1 0 0 , 1 2 0 ) ; // f r o n t w h e e l gp . l i n e T o ( 1 6 0 , 1 2 0 ) ; // m i d d l e u n d e r b o d y gp . quadTo ( 1 7 0 , 1 4 0 , 1 8 0 , 1 2 0 ) ; // r e a r w h e e l gp . l i n e T o ( 2 0 0 , 1 2 0 ) ; // r e a r u n d e r b o d y gp . c u r v e T o ( 1 9 5 , 1 0 0 , 2 0 0 , 8 0 , 1 6 0 , 8 0 ) ; // r e a r gp . l i n e T o ( 1 1 0 , 8 0 ) ; // r o o f gp . l i n e T o ( 9 0 , 1 0 0 ) ; // w i n d s c r e e n gp . l i n e T o ( 6 0 , 1 0 0 ) ; // b o n n e t gp . l i n e T o ( 6 0 , 1 2 0 ) ; // f r o n t 17 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Exercı́cios 1. Desenhe um retângulo com as pontas arredondadas. 2. Implemente um código para desenhar um “peixe”como da imagem abaixo. Utilize as operações entre poligonos. 17 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Transformações Geométricas • São operações que podem ser utilizadas visando a alteração de algumas caracterı́sticas como: posição, orientação, forma e tamanho. • As transformações são representáveis por equações; • Um modelo simples é a representação das manipulações por meio de matrizes (usado amplamente); • As principais transformações são: ◦ ◦ ◦ ◦ 18 de 27 Translação (translation); Escala (scale); Rotação (rotation); Cisalhamento (shear); Aula 2 - Princı́pios básicos de imagens de duas dimensões Transformações Geométricas - Ponto e Produto • Um ponto pode ser escrito como: ponto = P(x, y ) =(x, y)T ∈ R2 • O produto de dois vetores u e v pode descrever as trasnformações, seguindo a seguinte estrutura: v1 n P ui × vi uT × v = (u1 , ..., un ) × ... = i=1 v2 19 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Transformações Geométricas - Translação • A operação de translação pode ser descrita como: ( 0 x = x + ∆x x ∆x P =P+T= + = 0 y ∆y y = y + ∆y 0 • Exemplo com T = (140, 80)T 20 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Transformações Geométricas - Escala • A operação de escala pode ser descrita como: x s P = P ·T = · x y 0 0 ( 0 x = x · sx 0 = 0 sy y = y · sy • Exemplo com sx = 2 e sy = 0.5: 21 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Transformações Geométricas - Rotação • A operação de rotação pode ser descrita como: x cos(θ) P = P ·T = · y sen(θ) 0 • Exemplo com θ =45o : 22 de 27 −sen(θ) cos(θ) ( 0 x = x·cos(θ)-y·sen(θ) = 0 y = x·sen(θ)+y·cos(θ) Aula 2 - Princı́pios básicos de imagens de duas dimensões Transformações Geométricas - Cisalhamento • A operação de cisalhamento pode ser descrita como: x 1 P = P ·T = · y sy 0 sx 1 ( 0 x = x + sx ·y = 0 y = y + sy ·x • Exemplo com com sx = 1 e sy = 0: 23 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Coordenadas Homogêneas • Para que as operações sejam combinadas facilmente, podemos tratá-las como coordenadas homogêneas. Isso pode ser feito adicionando uma terceira coordenada ao ponto. Assim, um ponto (x, y ) é representado como (x, y , W ). • (2,3,6) e (4, 6, 12) é o mesmo ponto representado por diferentes triplas. • Se W é a coordenada não 0, podemos dividir (x, y , W ) por ela, b , 1). obtendo ( Wa , W 24 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Coordenadas Homogêneas 25 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Exercı́cio com Transformações 1. Implemente um aplicativo com Java 2D para movimentar o ”peixe”do exercı́cio 2 da primeira atividade. Lembrando que o ”peixe”somente caminha em uma direção, assim você deve implementar somente a translação em uma direção e utilizar a rotação para modificar a orientação do objeto. Utilize o teclado para realizar os movimentos, para tal utilize uma inner class que estenda KeyAdapter e não esqueça de adicionar um KeyListener (addKeyListener) na classe Frame. 26 de 27 Aula 2 - Princı́pios básicos de imagens de duas dimensões Referências (2015). Aliasing. http://domopomo.weebly.com/. acessado em 23/03/2015. (2015). Vector e raster. http://99designs.com/. acessado em 23/03/2015. Klawonn, F. (2012). Introduction to computer graphics: using Java 2D and 3D. Springer Science & Business Media. 27 de 27