Apostila de computação gráfica (2006)
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Apostila de computação gráfica (2006)

on

  • 1,506 views

 

Statistics

Views

Total Views
1,506
Views on SlideShare
1,506
Embed Views
0

Actions

Likes
0
Downloads
59
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Apostila de computação gráfica (2006) Document Transcript

  • 1. Apostila de Computa¸˜o Gr´fica ca a Agma Juci Machado Traina Maria Cristina Ferreira de Oliveira 16 de maio de 2006
  • 2. ResumoEste ´ o material utilizado no Instituto de Ciˆncias matem´ticas e de Computa¸˜o da USP-S˜o Carlos e e a ca apara as disciplinas de computa¸˜o gr´fica ministradas pelas Profa. Dra. Agma Juci Machado Traina e ca aProfa. Dra. Maria Cristina Ferreira de Oliveira.
  • 3. Sum´rio aSum´rio a 2Lista de Figuras 51 Introdu¸˜o ` Computa¸˜o Gr´fica ca a ca a 8 1.1 Sistemas Gr´ficos . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 Aplica¸˜es da CG . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3 Hardware Gr´fico . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4 Resolu¸˜o Gr´fica . . . . . . . . . . ca a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.5 Sistemas de Coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Dispositivos de Visualiza¸˜o ca 15 2.1 Dispositivos Gr´ficos Vetoriais . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . 15 2.1.1 Tra¸adores Digitais . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . 15 2.1.2 Dispositivos de V´ ıdeo Vetoriais (Vector Refresh Display Tubes) . . . . . . . . . . . 15 2.1.3 Terminais CRT com mem´ria (Direct View Storage Tubes) . . o . . . . . . . . . . . 17 2.2 Primitivas de Software para Dispositivos Vetoriais . . . . . . . . . . . . . . . . . . . . . . 17 2.3 Dispositivos Gr´ficos Matriciais . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . 17 2.3.1 Impressoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.2 Dispositivos de V´ ıdeo de Varredura (Raster Scanning VDUs) . . . . . . . . . . . . 18 2.3.3 Primitivas de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Dispositivos de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5.1 Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.2 Ligth Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.3 Joystick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.4 Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.5 Mesa Digitalizadora (Tablet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.6 Data Glove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.7 Outros dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Tra¸ado de Curvas em Dispositivos Gr´ficos Matriciais c a 23 3.1 Simetria e Reflex˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 24 3.2 Convers˜o Matricial de Segmentos de Reta . . . . . . . . . . . . . . . . . . . . . . . . . . a 24 3.2.1 Caracter´ ısticas Desej´veis para os Algoritmos de convers˜o Matricial de Segmentos a a de Retas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2.2 Crit´rio Adotado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 25 3.2.3 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.4 Algoritmo do “Ponto-M´dio” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 26 3.3 Convers˜o Matricial de Circunferˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a e 29 3.3.1 Simetria de ordem 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3.2 Algoritmo do “Ponto-M´dio” para Circunferˆncias . . . . . . . . . . . . . . . . . . e e 31 3.4 Convers˜o Matricial de Elipses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 34 3.5 Corre¸˜o no Tra¸ado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca c 37 3.6 Antialising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 ´ 3.6.1 Amostragem de Areas n˜o Ponderada . . . . . . . . . . . . . . . . . . . . . . . . . a 38 2
  • 4. 4 Preenchimento de Pol´ ıgonos 42 4.1 Retˆngulos . . . . . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . 42 4.2 Pol´ıgonos de Forma Arbitr´ria . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . 43 4.2.1 Arestas Horizontais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.2 Slivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.3 Algoritmo para Convers˜o Matricial de Segmento de a Reta que Utiliza “Coerˆncia e de Arestas” de um Pol´ ıgono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Transforma¸˜es 2D e 3D co 50 5.1 Transforma¸˜es em 2D . . . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . 50 5.2 Coordenadas Homogˆneas e Matrizes de Transforma¸˜o . . . . . e ca . . . . . . . . . . . . . . 52 5.3 Transforma¸˜es 2D Adicionais: Espelhamento e Shearing . . . . co . . . . . . . . . . . . . . 55 5.3.1 Espelhamento (Mirror) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.3.2 Shearing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.4 Transforma¸˜es entre sistemas de coordenadas . . . . . . . . . . co . . . . . . . . . . . . . . 57 5.5 Composi¸˜o de Transforma¸˜es . . . . . . . . . . . . . . . . . . . ca co . . . . . . . . . . . . . . 58 5.6 Transforma¸˜o Janela - Porta de Vis˜o (“Window-to-Viewport”) ca a . . . . . . . . . . . . . . 59 5.7 Eficiˆncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . 61 5.8 Transforma¸˜es em 3D . . . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . 63 5.8.1 Composi¸˜o de Transforma¸˜es em 3D . . . . . . . . . . . ca co . . . . . . . . . . . . . . 646 Observa¸˜o de Cenas 3D ca 69 6.1 Pipeline de observa¸˜o (“viewing pipeline”) . . . . . . . . . . . . . . . . . . . . . . . . . . ca 69 6.2 Coordenadas de Observa¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 70 6.2.1 Especifica¸˜o do sistema de coordenadas de observa¸˜o . . . . . . . . . . . . . . . ca ca 70 6.2.2 Transforma¸˜o do sistema de coordenadas do mundo para o sistema de coordenadas ca de observa¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 71 6.3 Proje¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 73 6.3.1 Proje¸˜o Perspectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 73 6.3.2 Desenvolvimento Matem´tico para Proje¸˜es Paralelas . . . . . . . . . . . . . . . . a co 777 Recorte de Primitivas 2D 78 7.1 Recorte de segmentos de reta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.1.1 Recorte de Pontos Extremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.1.2 Algoritmo de Cohen-Sutherland para Recorte de Segmentos de Reta . . . . . . . . 79 7.2 Recorte de Circunferˆncias . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . 818 Curvas e Superf´ ıcies em Computa¸˜o Gr´fica ca a 86 8.1 Representa¸˜o de Curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . 86 8.2 Curve Fitting x Curve Fairing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8.2.1 Ajuste de curvas (curve fitting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8.2.2 Aproxima¸˜o de curvas (curve fairing) . . . . . . . . . . . . . . . ca . . . . . . . . . . 87 8.3 Representa¸˜es Param´tricas e N˜o Param´tricas (expl´ co e a e ıcita e impl´ıcita) . . . . . . . . . . 87 8.3.1 Limita¸˜es das representa¸˜es n˜o param´tricas . . . . . . . . . . co co a e . . . . . . . . . . 88 8.4 Curvas de B´zier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . 909 Apostila Modelagem 9310 Rendering 9411 Cores e Sistemas de Cores 95 11.1 Percep¸˜o de Cor . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 11.2 Sistemas de Cores Prim´rias . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 11.3 Modelo XYZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 11.4 Modelo RGB (Red, Green, Blue) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 11.5 Modelo HSV (Hue, Saturation, Value) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 11.6 Modelo HLS (Hue, Lightness, Saturation) . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 3
  • 5. 12 Processamento Digital de Imagens 102 12.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 12.2 Considera¸˜es Sobre Imagens . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 12.3 Tabelas “Look-up” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 12.4 Tipos de Manipula¸˜o de Imagens . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 12.5 Transforma¸˜es Radiom´tricas . . . . . . co e . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 12.5.1 Opera¸˜es Pontuais sobre Imagens co . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 12.5.2 Opera¸˜es Locais Sobre a Imagem co . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Bibliografia 113A Hist´rico o 114 4
  • 6. Lista de Figuras 1.1 Relacionamento entre as 3 sub´reas da Computa¸˜o Gr´fica. . . . . . . . . . . . . . . . . a ca a 8 1.2 Esquema b´sico de um hardware de computa¸˜o gr´fica. . . . . . . . . . . . . . . . . . . . a ca a 12 1.3 Sistemas de coordenadas e suas transforma¸˜es. . . . . . . . . . . . . . . . . . . . . . . . . co 13 2.1 Estrutura interna de um CRT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2 Convers˜o Digital-Anal´gica para Visualiza¸˜o num CRT. . . . . . . . . . . . . . . . . . . a o ca 16 2.3 Uma seq¨ˆncia de bits na mem´ria de imagem ´ convertida para uma seq¨ˆncia de pixels ue o e ue na tela. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4 Representa¸˜o esquem´tica de uma imagem matricial e sua representa¸˜o num frame buffer. ca a ca 18 2.5 Varredura por rastreio fixo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.6 Representa¸˜o esquem´tica de um CRT por varredura colorido. . . . . . . . . . . . . . . . ca a 19 2.7 Organiza¸˜o de uma v´ ca ıdeo look-up table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1 Representa¸˜o de segmentos de reta horizontais, verticais e diagonais. . . . . . . . . . . . ca 23 3.2 Reflex˜o de uma imagem com rela¸˜o a um eixo diagonal. . . . . . . . . . . . . . . . . . . a ca 24 3.3 Rota¸˜o de 90o obtida atrav´s de 2 reflex˜es, uma horizontal (a) e outra na diagonal (b). ca e o 24 3.4 Convers˜es matriciais de um segmento de reta resultante de diferentes crit´rios. . . . . . . o e 25 3.5 Imagens de segmentos de reta convertidos pelo crit´rio expl´ e ıcito acima. . . . . . . . . . . . 26 3.6 Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. . . . . . . . . e 27 3.7 Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. . . . . . . . . e 29 3.8 Um arco de 1 de circunferˆncia, obtido variando-se x em incrementos unit´rios, e calcu- 4 e a lando e arrendondando y. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.9 Oito pontos sim´tricos em uma circunferˆncia. . . . . . . . . . . . . . . . . . . . . . . . . e e 31 3.10 Malha de pixels para o Algoritmo do Ponto-M´dio para circunferˆncias, ilustrando a escolha e e entre os pixels E e SE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.11 Segundo octante da circunferˆncia gerado com o algor´ e ıtimo do Ponto-M´dio e primeiro e octante gerado por simetria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.12 Elipse padr˜o centrada na origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 36 3.13 As duas regi˜e adotadas, definidas pela tangente a 45o . . . . . . . . . . . . . . . . . . . . . o 36 3.14 Segmento de reta renderizado com o algor´ ıtmo do ponto m´dio em diferentes escalas. (a) e ´ uma aplia¸˜o da regi˜o central de (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . e ca a 38 3.15 Segmento de reta definido com uma espessura diferente de zero. . . . . . . . . . . . . . . . 39 3.16 A intensidade do pixel ´ proporcional ` area coberta. . . . . . . . . . . . . . . . . . . . . . e a 39 3.17 Filtro definido por um cubo para um pixel definido por um quadrado. . . . . . . . . . . . 40 3.18 Filtro cˆnico com diˆmetro igual ao dobro da largura de um pixel. . . . . . . . . . . . . . o a 40 4.1 Esta figura ilustra o processo de linha de varredura para um pol´ ıgono arbitr´rio. As a intersec¸˜es da linha de varredura 8 com os lados FA e CD possuem coordenadas inteiras, co enquanto as intersec¸˜es com os lados EF e DE possuem coordenadas reais. . . . . . . . . co 43 4.2 Linhas de varredura em um pol´ ıgno. Os extremos em preto, e os pixels no interior em cinza. (a) Extremo calculado pelo algoritmo do ”Meio-Ponto”. (b) Extremo interior ao pol´ ıgno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3 Tratamento dos lados horizontais de um pol´ ıgono. . . . . . . . . . . . . . . . . . . . . . . 45 4.4 Exemplo de uma convers˜o matricial de um Sliver . . . . . . . . . . . . . . . . . . . . . . a 46 4.5 ET para o pol´ıgono de Figura 4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.6 AET para o pol´ ıgono da Figura 4.1 a) linha de varredura 9 b) linha de varredura 10. Note que a coordenada x da aresta DE em (b) foi arredondada para cima.. . . . . . . . . . . . . 48 5.1 Transla¸˜o de uma casa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 51 5.2 Mudan¸a de escala de uma casa. Como a escala ´ n˜o uniforme, sua propor¸˜o ´ alterada. c e a ca e 51 5
  • 7. 5.3 Esta figura mostra a rota¸˜o da casa por 45◦ . Da mesma forma que para a escala, a rota¸˜o ca ca tamb´m ´ feita em rela¸˜o a origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e ca 525.4 Derivando a equa¸˜o de rota¸˜o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca ca 525.5 O espa¸o de Coordenadas Homogˆneas XY W , com o plano W = 1 e o ponto P (X, Y, W ) c e projetado sobre o plano W = 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.6 Um cubo unit´rio ´ rodados 45 graus, posteriormente escalado n˜o uniformemente. Obtem- a e a se dessa forma uma transforma¸˜o afim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 545.7 Reflex˜o de um objeto em torno do eixo x. . . . . . . . . . . . . . . . . . . . . . . . . . . a 555.8 Reflex˜o de um objeto em torno de um eixo perpendicular ao plano xy, passando pela origem. a 565.9 Rota¸˜o em rela¸˜o ao Ponto P 1, por um ˆngulo θ. . . . . . . . . . . . . . . . . . . . . . . ca ca a 585.10 Escala e rota¸˜o de uma casa em rela¸˜o ao ponto P1 . . . . . . . . . . . . . . . . . . . . . ca ca 595.11 Janela em Coordenadas do mundo e porta de vis˜o em coordenadas de tela. . . . . . . . . a 605.12 Duas portas de vis˜o associadas a mesma janela. . . . . . . . . . . . . . . . . . . . . . . . a 605.13 Os passos da transforma¸˜o janela - porta de vis˜o. . . . . . . . . . . . . . . . . . . . . . . ca a 615.14 Primitivas gr´ficas de sa´ em coordenadas do mundo s˜o recortadas pela janela. O seu a ıda a interior ´ apresentado na tela (viewport). . . . . . . . . . . . . . . . . . . . . . . . . . . . e 615.15 Sistema de Coordenadas dado pela Regra da M˜o Direita. . . . . . . . . . . . . . . . . . . a 635.16 Transformando P1 , P2 e P3 da posi¸˜o inicial em (a) para a posi¸˜o final em (b). . . . . . ca ca 655.17 Rota¸˜o dos pontos P1 , P2 e P3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 665.18 Rota¸˜o em rela¸˜o ao eixo x. P1 e P2 de comprimento D2 ´ rotacionado em dire¸˜o ao ca ca e ca eixo z, pelo ˆngulo positivo f. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 665.19 Rota¸˜o em rela¸˜o ao eixo z. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca ca 675.20 Os vetores unit´rios Rx , Ry e Rz , os quais s˜o transformados nos eixos principais. . . . . a a 686.1 Atributos da cˆmera [Schr¨eder, 1998]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a o 696.2 Movimentos de cˆmera [Schr¨eder, 1998]. . . . . . . . . . . . . . . . . . . . . . . . . . . . a o 706.3 Movimentos de cˆmera [Schr¨eder, 1998]. . . . . . . . . . . . . . . . . . . . . . . . . . . . a o 716.4 Um VCS baseado na regra da m˜o direita com xv , yv e zv .relativos ao sistema de coorde- a nadas do mundo [Hearn and Baker, 1994]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.5 Orienta¸˜es do plano de observa¸˜o conforme o vetor normal. O vetor (1, 0, 0) d´ a ori- co ca a enta¸˜o em (a) e (1, 0, 1), a orienta¸˜o em (b) [Hearn and Baker, 1994]. . . . . . . . . . . ca ca 726.6 Taxomia de proje¸˜es [Plastock and Kalley, 1999]. . . . . . . . . . . . . . . . . . . . . . . co 736.7 Linha AB e sua proje¸˜o A’B’: (a) perspectiva; (b) ortogonal. . . . . . . . . . . . . . . . . ca 736.8 Proje¸˜es de um cubo (com 1 ponto de fuga) sobre um plano cortando o eixo Z, apresen- co tando o ponto de fuga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.9 Proje¸˜es perspectivas com 2 pontos de fuga ( o plano de proje¸˜o intercepta 2 eixos (x e co ca z)). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.10 Proje¸˜es perspectivas com 3 pontos de fuga ( o plano de proje¸˜o intercepta os 3 eixos). co ca 756.11 A esfera B ´ bem maior que a esfera A, por´m ambas aparecem com o mesmo tamanho e e quando projetadas no plano de vis˜o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 756.12 Confus˜o visual da perpectiva (objeto atr´s do centro de proje¸˜o). . . . . . . . . . . . . . a a ca 766.13 Proje¸˜o em perspectiva de um ponto P=(x, y, z) na posi¸˜o (xp, yp, zp) sobre o plano ca ca de proje¸˜o [Hearn and Baker, 1994]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 766.14 Proje¸˜o ortogonal de um ponto no plano de proje¸˜o [Hearn and Baker, 1994]. . . . . . . ca ca 777.1 Exemplos de recorte de segmentos de reta. . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.2 C´digos das regi˜es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o 807.3 Funcionamento do algoritmo de Cohen-Sutherland para recorte de segmentos. . . . . . . . 807.4 Algoritmo de Sutherland-Hodgman para Recorte de Pol´ ıgonos. . . . . . . . . . . . . . . . 837.5 Exemptos de recorte de pol´ıgonos. (a) M´ltiplos componentes. (b) Caso convexo (c) Caso u cˆncavo com muitas arestas exteriores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 837.6 Quatro situa¸˜es poss´ co ıveis no recorte de pol´ ıgonos. . . . . . . . . . . . . . . . . . . . . . . 848.1 Representa¸˜o de superf´ ca ıcies atrav´s de malhas. . . . . . . . e . . . . . . . . . . . . . . . . . 868.2 Aproxima¸˜o de curvas por segmentos de reta conectados. . ca . . . . . . . . . . . . . . . . . 878.3 Aproxima¸˜o de curvas por segmentos de reta conectados. . ca . . . . . . . . . . . . . . . . . 888.4 Pontos de uma circunferˆncia. . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . 908.5 Representa¸˜o de uma curva de B´zier definida pelos pontos ca e B0 , B1 , B2 e B3 . . . . . . . . 908.6 Fun¸˜es de blending para v´rios valores de n. . . . . . . . . co a . . . . . . . . . . . . . . . . . 9111.1 Espectro eletromagn´tico [Gro94]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 95 6
  • 8. 11.2 Ilustra¸˜o da mistura de cores aditivas [For94]. . . . . . . . . . . . . . ca . . . . . . . . . . . 9711.3 Ilustra¸˜o da mistura de cores subtrativas [For94]. . . . . . . . . . . . ca . . . . . . . . . . . 9711.4 Ilustra¸˜o da obten¸˜o de tints, shades e tones. . . . . . . . . . . . . . ca ca . . . . . . . . . . . 9711.5 Diagrama de cromaticidade do CIE [Hea94]. . . . . . . . . . . . . . . . . . . . . . . . . . . 9811.6 Representa¸˜o de escalas de cor no diagrama de cromaticidade do CIE ca [Hea94]. . . . . . . 9911.7 Cubo do RGB [Fol96]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10011.8 Cone hexagonal do HSV [Fol96]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10011.9 Cone duplo do HLS [Fol96]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10112.1 Efeitos sobre uma imagem, de se reduzir o tamanho da grade de amostragem. . . . . . . . 10312.2 Uma imagem de 512 x 512 pixels, quantizada em (a) 256 n´ ıveis, (b) 128 n´ ıveis, (c) 64 n´ ıveis, (d) 32 n´ ıveis, (e) 16 n´ ıveis, (f) 8 n´ıveis, (g) 4 n´ ıveis e (h) 2 n´ıveis de cinza. . . . . . 10412.3 Representa¸˜o de um pixel P com 8-bits (8 planos) de profundidade. . . . . . . . . . . . . ca 10412.4 Organiza¸˜o de uma LUT, para um sistema de pixels de 8 bits. . . . . . . . . . . . . . . . ca 10512.5 Imagens e histogramas de intensidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10612.6 Efeito de uma transforma¸˜o dos n´ ca ıveis de cinza efetuado sobre o histograma. . . . . . . . 10712.7 Manipula¸˜o de janelas de intensidade da imagem atrav´s do histograma. . . . . . . . . . ca e 10712.8 Sinais “ru´ıdo” (a) e “degrau” (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10912.9 Sinais “ru´ıdo” (a) e “degrau” (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10912.10Efeitos de filtros lineares ao “ru´ ıdo” e ` “borda”: (a) efeitos de atenua¸˜o; (b) borramento a ca da borda; (c) amplia¸˜o do ru´ ca ıdo; (d) realce da borda. . . . . . . . . . . . . . . . . . . . . 11012.11Efeito do filtro da mediana sobre o “ru´ ıdo” e o “degrau”. . . . . . . . . . . . . . . . . . . 11012.12Uma transforma¸˜o geom´trica de 90o graus. . . . . . . . . . . . . . . . . . . . . . . . . . . ca e 111 7
  • 9. Cap´ ıtulo 1Introdu¸˜o ` Computa¸˜o Gr´fica ca a ca aA Computa¸˜o Gr´fica ´ a ´rea da ciˆncia da computa¸˜o que estuda a gera¸˜o, manipula¸˜o e inter- ca a e a e ca ca capreta¸˜o de modelos e imagens de objetos utilizando computador. Tais modelos vˆm de uma variedade ca ede disciplinas, como f´ ısica, matem´tica, engenharia, arquitetura, etc. a Pode-se relacionar a Computa¸˜o Gr´fica com 3 sub-´reas [Persiano and Oliveira, 1989]: ca a a • S´ ıntese de Imagens: ´rea que se preocupa com a produ¸˜o de representa¸˜es visuais a partir a ca co co e ´ das especifica¸˜es geom´trica e visual de seus componentes. E freq¨entemente confundida com a u pr´pria Computa¸˜o Gr´fica. As imagens produzidas por esta sub-´rea s˜o geradas a partir de o ca a a a dados mantidos nos chamados Display-Files. • Processamento de Imagens: envolve as t´cnicas de transforma¸˜o de Imagens, em que tanto e ca a imagem original quanto a imagem resultado apresentam-se sob uma representa¸˜o visual (ge- ca ralmente matricial). Estas transforma¸˜es visam melhorar as caracter´ co ısticas visuais da imagem (aumentar contraste, foco, ou mesmo diminuir ru´ ıdos e/ou distor¸˜es). As imagens produzi- co das/utilizadas por esta sub-´rea s˜o armazenadas/recuperadas dos chamados Raster-Files. a a • An´lise de Imagens: ´rea que procura obter a especifica¸˜o dos componentes de uma imagem a a a ca partir de sua representa¸˜o visual. Ou seja a partir da informa¸˜o pict´rica da imagem (a pr´pria ca ca o o imagem!) produz uma informa¸˜o n˜o pict´rica da imagem (por exemplo, as primitivas geom´tricas ca a o e elementares que a comp˜em). o Figura 1.1: Relacionamento entre as 3 sub´reas da Computa¸˜o Gr´fica. a ca a Na ultima d´cada somou-se a esse contexto a ´rea de Visualiza¸˜o de Dados, tamb´m chamada ´ e a ca eVisualiza¸˜o Computacional [Minghim and Oliveira, 1997, Schr¨eder et al., 1996], que usa t´cnicas de ca o eComputa¸˜o Gr´fica para representar informa¸˜o, de forma a facilitar o entendimento de conjuntos de ca a cadados num´ricos de alta complexidade. Exemplos de ´reas de aplica¸˜o s˜o: visualiza¸˜o de imagens e a ca a cam´dicas, meteorologia, dados financeiros, visualiza¸˜o de programas, dinˆmica dos fluidos, e muitas e ca a 8
  • 10. outras. Nelas, o que existe em comum ´ que a representa¸˜o gr´fica (superf´ e ca a ıcies, part´ıculas, ´ ıcones) s˜oageradas automaticamente a partir do conjunto de dados. Ao usu´rio cabe definir parˆmetros e atributos a ada imagem para melhor “navegar” seu conjunto de dados. Dessa maneira, a visualiza¸˜o de dados partilha cade caracter´ısticas da s´ ıntese, do processamento e da an´lise de dados. a Atualmente a Computa¸˜o Gr´fica ´ altamente interativa: o usu´rio controla o conte´do, a estrutura ca a e a ue a aparˆncia dos objetos e suas imagens visualizadas na tela, usando dispositivos como o teclado e o emouse. Entretanto, at´ o in´ e ıcio dos anos 80, a computa¸˜o gr´fica era uma disciplina restrita e alta- ca amente especializada. Devido principalmente ao alto custo do hardware, poucos programas aplicativosexploravam gr´ficos. O advento dos computadores pessoais de baixo custo, como o IBM-PC e o Apple aMacintosh, com terminais gr´ficos de varredura (raster graphics displays), popularizou o uso de gr´ficos a ana intera¸˜o usu´rio-computador. ca a Os displays gr´ficos de baixo custo possibilitaram o desenvolvimento de in´meros aplicativos baratos a ue f´ceis de usar, que dispunham de interfaces gr´ficas - planilhas, processadores de texto, programas de a adesenho... As interfaces evoluiram e introduziu-se o conceito de desktop - uma met´fora para uma mesa ade trabalho. Nessas interfaces gr´ficas, atrav´s de um gerenciador de janelas (window manager ) o usu´rio a e apode criar e posicionar janelas que atuam como terminais virtuais, cada qual executando aplicativos in-dependentemente. Isso permite que o usu´rio execute v´rios aplicativos simultaneamente, e selecione um a adeles a um simples toque no mouse. ´ Icones (icons) s˜o usados para representar arquivos de dados, progra- amas e abstra¸˜es de objetos de um escrit´rio - como arquivos, caixas de correio (mailboxes), impressoras, co olatas de lixo - nas quais s˜o executadas opera¸˜es an´logas `s da vida real. Para ativar os programas, o a co a ausu´rio pode selecionar ´ a ıcones, ou usar buttons e menus dinˆmicos. Objetos s˜o manipulados diretamente a aatrav´s de opera¸˜es de pointing e clicking feitas com o mouse. Atualmente, mesmo aplicativos que ma- e conipulam texto (como processadores de texto) ou dados num´ricos (como planilhas) usam interfaces desse etipo, reduzindo sensivelmente a intera¸˜o textual por meio de teclados alfanum´ricos. ca e A computa¸˜o gr´fica n˜o ´ mais uma raridade: ´ parte essencial de qualquer interface com o usu´rio, ca a a e e a´ indispens´vel para a visualiza¸˜o de dados em 2D e 3D e tem aplica¸˜es em ´reas como educa¸˜o,e a ca co a caciˆncias, engenharia, medicina, publicidade, lazer, militar, ... e A computa¸˜o gr´fica trata da s´ ca a ıntese de imagens de objetos reais ou imagin´rios a partir de modelos acomputacionais. Processamento de imagens ´ uma ´rea relacionada que trata do processo inverso: a e aan´lise de cenas, ou a reconstru¸˜o de modelos de objetos 2D ou 3D a partir de suas imagens. a ca Note que a s´ ıntese de imagens parte da descri¸˜o de objetos tais como segmentos de reta, pol´ ca ıgonos,poliedros, esferas, etc.; e produz uma imagem que atende a certas especifica¸˜es e que pode, em ultima co ´instˆncia, ser visualizada em algum dispositivo (terminal de v´ a ıdeo, plotter, impressora, filme fotogr´fico...). aAs imagens em quest˜o constituem uma representa¸˜o visual de objetos bi- ou tridimensionais descritos a caatrav´s de especifica¸˜es abstratas. e co O processamento de imagens parte de imagens j´ prontas para serem visualizadas, as quais s˜o trans- a aferidas para o computador por mecanismos diversos - digitaliza¸˜o de fotos, tomadas de uma cˆmera de ca av´ıdeo, ou imagens de sat´lite - para serem manipuladas visando diferentes objetivos. e1.1 Sistemas Gr´ficos aA Computa¸˜o Gr´fica (especialmente as componentes relativas a gr´ficos 3D e a gr´ficos 3D interativos) ca a a adesenvolveu-se de modo bem diverso: de simples programas gr´ficos para computadores pessoais ` pro- a agramas de modelagem e de visualiza¸˜o em workstations e supercomputadores. Como o interesse em CG cacresceu, ´ importante escrever aplica¸˜es que possam rodar em diferentes plataformas. Um padr˜o para e co adesenvolvimento de programas gr´ficos facilita esta tarefa eliminando a necessidade de escrever c´digo a opara um driver gr´fico distinto para cada plataforma na qual a aplica¸˜o deve rodar. Para se padronizar a caa constru¸˜o de aplicativos que se utilizam de recursos gr´ficos e torn´-los o mais independentes poss´ ca a a ıvelde m´quinas, e portanto facilmente port´veis, foram desenvolvidos os chamados Sistemas Gr´ficos. a a a V´rios padr˜es tiveram sucesso integrando dom´ a o ınios espec´ ıficos. Por exemplo, a linguagem Postscriptque se tornou um padr˜o por facilitar a publica¸˜o de documentos est´ticos contendo gr´ficos 2D e textos. a ca a aOutro exemplo ´ o sistema XWindow, que se tornou padr˜o para o desenvolvimento de interfaces gr´ficas e a a2D em workstations UNIX. Um programador usa o X para obter uma janela em um display gr´fico no aqual um texto ou um gr´fico 2D pode ser desenhado. A ado¸˜o do X pela maioria dos fabricantes de a caworkstation significa que um unico programa desenvolvido em X pode ser rodado em uma variedade de ´workstation simplesmente recompilando o c´digo. Outra facilidade do X ´ o uso de redes de computadores: o eum programa pode rodar em uma workstation e ler a entrada e ser exibido em outra workstation, mesmode outro fabricante. Para gr´ficos 3D foram propostos v´rios padr˜es. A primeira tentativa foi o Sistema Core - Core a a oGraphics System - (1977 e 1979) pelos americanos. Mas a primeira especifica¸˜o gr´fica realmente pa- ca a 9
  • 11. dronizada foi o GKS - Graphical Kernel System, pela ANSI e ISO em 1985. O GKS ´ uma vers˜o maise aelaborada que o Core. O GKS suporta um conjunto de primitivas gr´ficas interrelacionadas, tais como: adesenho de linhas, pol´ ıgonos, caracteres, etc., bem como seus atributos. Mas n˜o suporta agrupamentos ade primitivas hier´rquicas de estruturas 3D. Um sistema relativamente famoso ´ PHIGS (Programmer’s a eHierarchical Interactive Graphics System). Baseado no GKS, PHIGS ´ um padr˜o ANSI. PHIGS (e seu e adescendente, PHIGS+) provˆem meios para manipular e desenhar objetos 3D encapsulando descri¸˜es de e coobjetos e atributos em uma display list. A display list ´ utilizada quando o objeto ´ exibido ou manipu- e elado, uma vantagem ´ a possibilidade de descrever um objeto complexo uma unica vez mesmo exibindo-o e ´v´rias vezes. Isto ´ especialmente importante se o objeto a ser exibido deve ser transmitido por uma a erede de computadores. Uma desvantagem da display list ´ a necessidade de um esfor¸o consider´vel e c apara reespecificar um objeto que est´ sendo modelado interativamente pelo usu´rio. Uma desvantagem a ado PHIGS e PHIGS+ (e GKS) ´ que eles n˜o tˆm suporte a recursos avan¸ados como mapeamento de e a e ctextura. O XWindow ganhou uma extens˜o para o PHIGS, conhecida como PEX, de modo que o X pudesse amanipular e desenhar objetos 3D. Entre outras extens˜es, PEX soma-se de modo imediato ao PHIGS, oassim um objeto pode ser exibido durante a sua defini¸˜o sem a necessidade da display list. O PEX catamb´m n˜o suporta recursos avan¸ados e s´ est´ dispon´ aos usu´rios do XWindow. e a c o a ıvel a O sistema gr´fico mais popular atualmente ´ o OpenGL (GL - Graphics Library) que provˆ carac- a e eter´ısticas avan¸adas e pode ser utilizado em modo imediato ou com display list. OpenGL ´ um padr˜o c e arelativamente novo (sua primeira vers˜o ´ de 1992) e ´ baseado na biblioteca GL das workstations IRIS da a e eSilicon Graphics. Atualmente um cons´rcio de ind´strias ´ respons´vel pela gerenciamento da evolu¸˜o do o u e a caOpenGL. Existe uma implementa¸˜o livre (c´digo fonte dispon´ ca o ıvel) do OpenGL conhecida com MesaGLou Mesa3D. Como os outros sistemas gr´ficos, OpenGL oferece uma interface entre o software e o hardware gr´fico. a aA interface consiste em um conjunto de procedimentos e fun¸˜es que permitem a um programador es- copecificar os objetos e as opera¸˜es que os envolvem produzindo imagens de alta qualidade. Como o coPEX, o OpenGL integra/permite a manipula¸˜o de objetos (desenhos) 3D ao X, mas tamb´m pode ser ca eintegrado em outros sistemas de janela (por exemplo, Windows/NT) ou pode ser usado sem um sistemade janela. OpenGL provˆ controle direto sobre opera¸˜es gr´ficas fundamentais em 3D e 2D, incluindo e co aa especifica¸˜o de parˆmetros como matrizes de transforma¸˜o e coeficientes de ilumina¸˜o, m´todos ca a ca ca ede antialiasing e opera¸˜es sobre pixels, mas n˜o provˆ mecanismos para descrever ou modelar objetos co a egeom´tricos complexos. e1.2 Aplica¸˜es da CG coA lista de aplica¸˜es ´ enorme, e cresce rapidamente. Uma amostra significativa inclui: co e • Interfaces: a maioria dos aplicativos para computadores pessoais e esta¸˜es de trabalho atualmente co disp˜em de interfaces gr´ficas baseadas em janelas, menus dinˆmicos, ´ o a a ıcones, etc. • Tra¸ado interativo de gr´ficos: aplicativos voltados para usu´rios em ciˆncia, tecnologia e c a a e neg´cios geram gr´ficos que ajudam na tomada de decis˜es, esclarecem fenˆmenos complexos e o a o o representam conjuntos de dados de forma clara e concisa. • Automa¸˜o de escrit´rios e editora¸˜o eletrˆnica: o uso de gr´ficos na dissemina¸˜o de ca o ca o a ca informa¸˜es cresceu muito depois do surgimento de software para editora¸˜o eletrˆnica em com- co ca o putadores pessoais. Este tipo de software permite a cria¸˜o de documentos que combinam texto, ca tabelas e gr´ficos - os quais tanto podem ser “desenhados” pelo usu´rio ou obtidos a partir de a a imagens digitalizadas. • Projeto e desenho auxiliado por computador: em CAD, sistemas gr´ficos interativos s˜o a a utilizados para projetar componentes, pe¸as e sistemas de dispositivos mecˆnicos, el´tricos, eletro- c a e mecˆnicos e eletrˆnicos. Isto inclui edif´ a o ıcios, carca¸as de autom´veis, avi˜es e navios, chips VLSI, c o o sistemas ´ticos, redes telefˆnicas e de computador. Eventualmente, o usu´rio deseja apenas produzir o o a desenhos precisos de componentes e pe¸as. Mais frequentemente, o objetivo ´ interagir com um c e modelo computacional do componente ou sistema sendo projetado, de forma a testar propriedades estruturais, el´tricas ou t´rmicas, at´ atingir um projeto satisfat´rio. e e e o • Simula¸˜o e anima¸˜o para visualiza¸˜o cient´ ca ca ca ıfica, lazer, arte e publicidade: uma das a ´reas que mais evoluiram na d´cada de 80 foi a visualiza¸˜o cient´ e ca ıfica. Cientistas e engenheiros perceberam que n˜o poderiam interpretar as quantidades prodigiosas de dados produzidas por pro- a gramas em supercomputadores sem resumir os dados e identificar tendˆncias e fenˆmenos atrav´s e o e 10
  • 12. de representa¸˜es gr´ficas. Como resultado, surgiram anima¸˜es computadorizadas do comporta- co a co mento variante no tempo de objetos reais ou simulados. Tais anima¸˜es podem ser utilizadas para co estudar entidades matem´ticas abstratas e modelos matem´ticos de fenˆmenos como fluxo de flui- a a o dos, relatividade, rea¸˜es qu´ co ımicas e nucleares, deforma¸˜o de estruturas mecˆnicas sob diferente ca a tipos de press˜o, etc. Outras aplica¸˜es tecnol´gicas avan¸adas incluem a produ¸˜o de desenhos a co o c ca animados e efeitos especiais para filmes e comerciais de TV, que requerem mecanismos sofisticados para modelar objetos e para representar luz e sombra. • Controle de processos: sistemas de controle de tr´fego a´reo e espacial, sistemas de controle de a e refinarias e de usinas de energia mostram graficamente os dados coletados por sensores conectados a componentes cr´ ıticos dos sistemas, de forma que os operadores possam responder adequadamente a condi¸˜es cr´ co ıticas. • Cartografia: a computa¸˜o gr´fica ´ usada para produzir representa¸˜es precisas e esquem´ticas ca a e co a de fenˆmenos naturais e geogr´ficos obtidos a partir da coleta de dados. o a • Arte: A arte por computador vem crescendo imensamente nos ultimos anos. E poss´ ´ ´ ıvel utilizar novos recursos de computa¸˜o gr´fica para produzir efeitos art´ ca a ısticos, como a extra¸˜o de texturas, ca padr˜es e estruturas a partir de fotos digitalizadas. o ca ´ • Gr´ficos de Apresenta¸˜o (Presentation Graphics): E a utiliza¸˜o de t´cnicas gr´ficas para a ca e a demonstra¸˜o de resultados, id´ias e gr´ficos, com o intuito de mostrar ou transmitir conhecimento ca e a espec´ ıfico como, por exemplo, em uma aula, ou reuni˜o, ou na contru¸˜o de material did´tico. a ca a Neste curso, estamos interessados principalmente em t´cnicas de s´ e ıntese de imagens bem como seurelacionamento com o processamento de imagens. Tamb´m n˜o pretendemos explorar todo o escopo de e aaplica¸˜es da CG, mas estudar os conceitos gerais envolvidos na programa¸˜o das primitivas gr´ficas que co ca aest˜o por tr´s dessas aplica¸˜es. a a co1.3 Hardware Gr´fico aUm sistema de hardware para computa¸˜o gr´fica consiste essencialmente de dispositivos gr´ficos de ca a aentrada e sa´ (I/O) ligados a um computador (Figura 1.2). Ao conjunto de dispositivos de I/O gr´ficos ıda aalocados para utiliza¸˜o por uma unica pessoa por vez denomina-se genericamente de “esta¸˜o de trabalho ca ´ cagr´fica”, ou graphics workstation. Um sistema gr´fico multi-usu´rio pode ter v´rias esta¸˜es gr´ficas, de a a a a co aforma que mais de um dos v´rios dispositivos de I/O dispon´ a ıveis podem estar conectados e utilizandoo computador hospedeiro. Como em CG ´ freq¨ente a manipula¸˜o de grandes quantidades de dados, e u cao computador deve ser equipado de mem´ria secund´ria com alta capacidade de armazenagem. Al´m o a edisso, um canal de comunica¸˜o de alta velocidade ´ necess´rio para reduzir os tempos de espera. Isto ca e anormalmente ´ feito atrav´s de comunica¸˜o local sobre um barramento paralelo com velocidade de e e catransmiss˜o de dados da ordem de um milh˜o de bits por segundo. Se o equipamento gr´fico est´ distante a a a ado processador (conex˜o remota), um canal de comunica¸˜o serial pode ser necess´rio. Transmiss˜o a ca a aserial ass´ıncrona pode ser feita a velocidades de at´ 19.2 kbps (milhares de bits por segundo). Mesmo tal evelocidade pode ser muito lenta para alguns objetivos como anima¸˜o gr´fica de alta resolu¸˜o, onde cada ca a caframe de imagem pode ter um megabyte de dados. Um sistema de conex˜o ideal nesse caso ´ uma Local a eArea Network (LAN) como a Ethernet. Os dispositivos de sa´ gr´ficos podem ser de natureza digital ıda aou anal´gica, resultando em duas classes de gr´ficos, denominados vector graphics (gr´ficos vetoriais), o a aque desenham figuras tra¸ando seq¨ˆncias de segmentos de reta (vetores); e raster graphics (gr´ficos de c ue avarredura, ou matriciais), que desenham figuras pelo preenchimento de uma matriz de pontos (pixels).1.4 Resolu¸˜o Gr´fica ca aVirtualmente todos os dispositivos de I/O gr´ficos usam uma malha retangular de posi¸˜es endere¸´veis a co ca- a qual ´ denominada “retˆngulo de visualiza¸˜o”. A “resolu¸˜o gr´fica” de um dispositivo ´ o n´mero e a ca ca a e ude posi¸˜es (ou pontos, ou pixels) horizontais e verticais que ele pode distinguir. Existem 4 parˆmetros co aque definem a resolu¸˜o: ca 1. ndh - o n´mero de posi¸˜es endere¸´veis horizontalmente. u co ca 2. ndv - o n´mero de posi¸˜es endere¸´veis verticalmente. u co ca 3. width - a largura do retˆngulo de visualiza¸˜o em mm. a ca 11
  • 13. Figura 1.2: Esquema b´sico de um hardware de computa¸˜o gr´fica. a ca a 4. height - a altura do retˆngulo de visualiza¸˜o em mm. a ca A partir desses 4 parˆmetros, v´rios n´meros interessantes podem ser calculados: a a u ndh 1. resolu¸˜o horizontal: horiz res = ca width width 2. tamanho ponto horizontal: horiz dot size = ndh ndv 3. resolu¸˜o vertical: vert res = ca height height 4. tamanho ponto vertical: vert dot size = ndv 5. total pontos endere¸´veis: total nr dots = ndh.ndv ca total nr dots 6. resolu¸˜o de ´rea: area res = ca a (width.height) vert dot size 7. raz˜o de aspecto gr´fica: aspect ratio = a a horiz dot size height 8. raz˜o de aspecto f´ a ısica: physical aspect ratio = width Note que horiz res, vert res e area res definem resolu¸˜es f´ co ısicas, enquanto que ndh, ndv e total nr dotsdefinem resolu¸˜es gr´ficas. Dispositivos de visualiza¸˜o podem ter a mesma resolu¸˜o gr´fica, com re- co a ca ca asolu¸˜es f´ co ısicas muito diferentes. O ideal seria ter um aspect ratio igual ou pr´ximo de 1. o1.5 Sistemas de CoordenadasNa CG ´ necess´rio definir sistemas de coordenadas para quantificar os dados que est˜o e a asendo manipulados. J´ vimos que os dispositivos de visualiza¸˜o gr´fica matriciais consistem de uma a ca amatriz de pixels endere¸´veis, e um gr´fico ´ formado “acendendo” ou “apagando” um pixel. Os pixels ca a es˜o endere¸ados por dois n´meros inteiros que d˜o suas coordenadas horizontal e vertical, dcx, e dcy, a c u arespectivamente, onde: 0 ≤ dcx ≤ ndhm1 ≡ ndh − 1 (1.1) 0 ≤ dcy ≤ ndvm1 ≡ ndv − 1 (1.2) Na matriz de pixels, o valor dcx + 1 d´ o n´mero da coluna, e dcy + 1 d´ o n´mero da linha do pixel a u a uendere¸ado. O pixel endere¸ado como (0, 0) est´ geralmente no canto inferior esquerdo do retˆngulo de c c a avisualiza¸˜o. As coordenadas (dcx, dcy) s˜o chamadas de coordenadas do dispositivo, e podem assumir ca aapenas valores inteiros. Coordenadas do dispositivo podem variar bastante para diferentes equipamentos,o que levou ` utiliza¸˜o de coordenadas normalizadas do dispositivo (NDC - normalized device coor- a cadinates), para efeito de padroniza¸˜o (ndcx, ndcy). NDCs s˜o vari´veis reais, geralmente definidas no ca a aintervalo de 0 a 1: 0 ≤ ndcx ≤ 1 (1.3) 12
  • 14. 0 ≤ ndcy ≤ 1 (1.4) A coordenada NDC (0, 0) corresponde ` origem (0, 0) nas coordenadas do dispositivo, e a coordenada aNDC (1, 1) refere-se ao pixel no canto superior direito, que corresponde ao pixel (ndhm1, ndvm1) nascoordenadas do dispositivo. A vantagem da utiliza¸˜o de NDCs ´ que padr˜es gr´ficos podem ser discuti- ca e o ados usando um sistema de coordenadas independente de dispositivos gr´ficos espec´ a ıficos. Obviamente, osdados gr´ficos precisam ser transformados do sistema de coordenadas independente para o sistema de co- aordenadas do dispositivo no momento de visualiza¸˜o. O mapeamento de NDCs (reais) para coordenadas cado dispositivo (inteiros) ´ “linear”, por exemplo: e dcx = round(ndcx.ndhm1) (1.5) dcy = round(ndcy.ndvm1) (1.6) Dois outros sistemas de coordenadas s˜o uteis. O primeiro ´ o sistema de cordenadas f´ a ´ e ısico, (pcx, pcy)onde pcx ´ a distˆncia f´ e a ısica ao longo do eixo x a partir do extremo esquerdo do retˆngulo de visualiza¸˜o, a cae pcy ´ a distˆncia f´ e a ısica ao longo do eixo y a partir do extremo inferior. As unidades de medida utilizadass˜o polegadas ou mil´ a ımetros. A transforma¸˜o de coordenadas f´ ca ısicas para coordenadas do dispositivo ´edada por: pcx dcx = trunc(ndhm1 ) (1.7) width pcy dcy = trunc(ndvm1 ) (1.8) height O segundo ´ o sistema de coordenadas do mundo, ou sistema de coordenadas do usu´rio, que consiste e ade coordenadas cartesianas (x, y), num intervalo qualquer definido pelo usu´rio: a xmin ≤ x ≤ xmax (1.9) ymin ≤ y ≤ ymax (1.10) Os parˆmetros que definem o intervalo de valores de x e y, xmin, ymin, xmax e ymax, definem uma aa´rea retangular no espa¸o bidimensional, denominada de janela. A transforma¸˜o de coordenadas do c causu´rio (x, y) para NDCs (ndcx, ndcy), denominada transforma¸˜o de visualiza¸˜o, ´ dada por: a ca ca e x − xmin ndcx = (1.11) xmax − xmin y − ymin ndcy = (1.12) ymax − ymin Para visualizar dados num dispositivo gr´fico qualquer, ´ necess´rio transform´-los das coordenadas a e a ado usu´rio para NDCs, e de NDCs para coordenadas do dispositivo. Da mesma forma, dados de entrada agr´ficos precisam ser transformados de coordenadas do dispositivo para NDCs, e depois para coordenadas ado usu´rio (Figura 1.3). a Figura 1.3: Sistemas de coordenadas e suas transforma¸˜es. co 13
  • 15. 1.6 Exerc´ ıciosEscreva os procedimentos inp to ndc, ndc to user, user to ndc e ndc to dc, que transformam dados entreos v´rios sistemas de coordenadas, conforme ilustrado na Figura 1.3. Repita o exerc´ assumindo que a ıcioo intervalo de varia¸˜o do sistema NDC vai de: ca (i) -1 a +1 (coordenadas normalizadas centradas) (ii) 0 a 100 14
  • 16. Cap´ ıtulo 2Dispositivos de Visualiza¸˜o caToda imagem criada atrav´s de recursos computacionais deve ser representada em algum dispositivo f´ e ısicoque permita a sua visualiza¸˜o. Diversas tecnologias e diferentes tipos de dispositivos s˜o utilizados para ca agerar representa¸˜es visuais, sendo que o desenvolvimento dessas tecnologias teve um papel fundamental cona evolu¸˜o da CG. ca Tanto para o usu´rio como para o implementador de sistemas gr´ficos ´ importante conhecer as a a ecaracter´ ısticas de cada uma dessas tecnologias para sua melhor utiliza¸˜o. Vamos discutir alguns aspectos cada arquitetura e organiza¸˜o dos tipos mais comuns dos dispositivos de exibi¸˜o gr´fica, sem entrar em ca ca adetalhes t´cnicos. e ´ E poss´ ıvel classificar os dispositivos de exibi¸˜o (tra¸adores, impressoras e terminais de v´ ca c ıdeo) emduas principais categorias, segundo a forma pela qual as imagens s˜o geradas: dispositivos vetoriais e adispositivos matriciais. Os dispositivos gr´ficos vetoriais conseguem tra¸ar segmentos de reta perfeitos a centre dois pontos da malha finita de pontos definida por suas superf´ ıcies de exibi¸˜o. Os dispositivos camatriciais, por outro lado, apenas conseguem tra¸ar pontos, tamb´m em uma malha finita. Assim, c esegmentos de reta s˜o tra¸ados como sequˆncias de pontos pr´ximos. a c e o2.1 Dispositivos Gr´ficos Vetoriais a2.1.1 Tra¸adores Digitais cTra¸adores (plotters) s˜o dispositivos eletromecˆnicos que produzem o desenho pelo movimento de c a auma caneta sobre a superf´ do papel. A primitiva gr´fica b´sica nesse tipo de dispositivo ´ o segmento ıcie a a ede reta. Arcos, curvas e caracteres s˜o produzidos pelo tra¸ado de uma s´rie de pequenos segmentos. a c e Nos tra¸adores de mesa, o papel ´ fixado sobre uma superf´ plana retangular, sobre a qual est´ lo- c e ıcie acalizado um bra¸o mecˆnico que movimenta-se por transla¸˜o. Ao longo do bra¸o desloca-se um cabe¸ote c a ca c cque suporta uma caneta perpendicularmente ` mesa, a qual pode ser pressionada contra o papel ou alevantada de forma a n˜o toc´-lo. a a Nos tra¸adores de rolo, o bra¸o ´ fixo, e o papel ´ movimentado para frente e para tr´s por a¸˜o de c c e e a caum rolo, como em uma m´quina de escrever. a Embora distintos em constru¸˜o, estes dois tipos de tra¸adores possuem caracter´ ca c ısticas de pro-grama¸˜o e controle similares. A posic˜o da caneta sobre o papel ´ definida pelo posicionamento do ca a ebra¸o em rela¸˜o ao papel (abcissa x), e do cabe¸ote sobre o bra¸o (ordenada y). Figuras s˜o tra¸adas c ca c c a cpela varia¸˜o controlada da posi¸˜o da caneta (abcissa e ordenada) e pelo controle do estado da caneta ca ca(abaixada ou levantada). O tra¸ador ´ em geral controlado por um processador dedicado que recebe c einstru¸˜es diretamente do computador ou de um arquivo que descreve o desenho. co2.1.2 Dispositivos de V´ ıdeo Vetoriais (Vector Refresh Display Tubes)No in´ da CG, o principal dispositivo de v´ ıcio ıdeo n˜o era um monitor parecido com uma TV, e sim um acar´ ıssimo CRT (Cathode Ray Tube) do tipo usado em oscilosc´pios. Como o display dos oscilosc´pios, o oos monitores tinham como entradas duas voltagens, x e y, que direcionavam um feixe de el´trons para eum ponto espec´ ıfico da tela. O feixe tra¸ava uma linha do ultimo ponto para o corrente, num unico c ´ ´movimento vetorial. Um CRT consiste basicamente de uma superf´ de exibi¸˜o, quase plana, recoberta internamente ıcie cade material ` base de f´sforo, um canh˜o emissor de el´trons e um sistema de deflex˜o (Figura 2.1). O a o a e acanh˜o emite um fino feixe de el´trons que, acelerados, chocam-se contra a superf´ fosforecente da tela. a e ıcieSob a a¸˜o dos el´trons, o material fosforecente incandesce, emitindo luz no ponto da tela atingido pelo ca e 15
  • 17. Figura 2.1: Estrutura interna de um CRT.feixe. A fun¸˜o do sistema de deflex˜o ´ dirigir controladamente o feixe de el´trons para um determinado ca a e eponto da tela. O brilho do f´sforo dura apenas alguns milisegundos (a emiss˜o de luz pelo f´sforo n˜o ´ est´vel, e o a o a e acai a zero logo ap´s a interrup¸˜o do bombardeio de el´trons), de forma que toda a figura precisa ser o ca econtinuamente retra¸ada para que o gr´fico permane¸a na tela. Este processo ´ denominado refreshing c a c e(da´ o nome, vector refreshing tubes). Se a imagem sendo mostrada ´ composta por muitos vetores, vai ı ehaver um atraso significativo entre o tra¸ado do primeiro e do ultimo vetores, e alguns do vetores tra¸ados c ´ cinicialmente podem desaparecer nesse per´ ıodo. O resultado ´ que o tubo n˜o consegue retra¸ar a imagem e a cde modo suficientemente r´pido para evitar que um efeito de flickering (“cintila¸˜o”) torne-se aparente a cana tela. Figura 2.2: Convers˜o Digital-Anal´gica para Visualiza¸˜o num CRT. a o ca O tubo n˜o exige muita mem´ria para manter uma imagem complexa constru´ por segmentos de a o ıdareta, uma vez que apenas as coordenadas dos extremos dos segmentos, e as dos cantos da tela precisamser armazenadas. Esta era uma caracter´ ıstica importante no in´ da CG, j´ que a mem´ria era muito ıcio a ocara. O computador gera as coordenadas dos pontos que definem a figura a ser mostrada na tela, e umDAC (conversor digital-anal´gico) ´ necess´rio para converter os pontos digitais em voltagens a serem o e aenviadas para o CRT (Figura 2.2). As desvantagens dos terminais gr´ficos vetoriais eram: a tecnologia cara, o efeito de flickering, e aa mem´ria limitada, que inviabilizava a descri¸˜o de imagens com detalhes complexos. As vantagens: o cadispositivo gr´fico de alta resolu¸˜o (pelo menos 1000x1000), rapidez na gera¸˜o de imagens simples, o a ca caque os torna adequados para testes iniciais em anima¸˜o. ca 16
  • 18. 2.1.3 Terminais CRT com mem´ria (Direct View Storage Tubes) oO CRT com mem´ria ´ um tubo especial que se comporta como se o f´sforo fosse de alt´ o e o ıssima persistˆncia. eUma imagem tra¸ada nesse tipo de tubo pode manter-se por mais de uma hora sem sofrer desvanecimento. cEntretanto, o tubo ´ constru´ com f´sforo comum, e a longa persistˆncia da imagem ´ conseguida pela e ıdo o e einclus˜o de dois elementos adicionais ao tubo: um canh˜o espalhador de el´trons e uma m´scara montada a a e asobre a superf´ do f´sforo, entre a tela e os canh˜es. ıcie o o Os el´trons s˜o uniformemente espalhados por toda a superf´ da tela pelo canh˜o espalhador, e a e a ıcie am´scara funciona como um filtro que seleciona os pontos ou ´reas da superf´ a serem atingidas pelos a a ıcieel´trons. Para isso, a m´scara ´ constru´ de material diel´trico pass´ de ser carregado de maneira n˜o e a e ıda e ıvel auniforme. As ´reas carregadas positivamente atraem os el´trons, permitindo que passem pela m´scara. a e aOnde h´ carga negativa, os el´trons s˜o repelidos, e n˜o atingem o f´sforo. a e a a o Um canh˜o de el´trons ´ respons´vel pela emiss˜o de um feixe fino e intenso de el´trons que produz a a e e a a ecarga diferenciada na m´scara. Dessa forma s˜o criados “buracos” na m´scara que deixar˜o os el´trons a a a a edo outro canh˜o passarem, definindo a forma da imagem a ser gerada. O desenho gravado na m´scara a asustenta a imagem na tela at´ que uma voltagem positiva seja enviada para a m´scara, apagando a e aimagem. Vantagens dos sistemas DVST: alta resolu¸˜o (pelo menos 1024x781); ausˆncia de flickering. Desvan- ca etagens: n˜o h´ como apagar seletivamente a imagem. O apagamento da tela ´ sempre global, resultante a a edo carregamento uniforme da mascara; o apagamento causa um efeito de flashing na tela; a tecnologian˜o ´ adequada para monitores coloridos (usa apenas f´sforo verde); a imagem perde defini¸˜o com o a e o catempo; os tubos desgastam e precisam ser substitu´ ıdos. A tecnologia dos DVST est´ ultrapassada, tendo sido substitu´ pelos dispositivos de varredura a ıdamatriciais.2.2 Primitivas de Software para Dispositivos VetoriaisUma primitiva de software ´ uma rotina ou um comando escrito em alguma linguagem que executa uma efun¸˜o b´sica de um aplicativo: ou seja, uma primitiva de software implementa uma unica fun¸˜o. Um ca a ´ casistema de software complexo ´ constru´ atrav´s de chamadas hier´rquicas para suas fun¸˜es primitivas. e ıdo e a co Praticamente todos os dispositivos de sa´ vetoriais trabalham com duas primitivas de software ıdab´sicas: moveto(dcx,dcy) e drawto(dcx,dcy). A primeira move a posi¸˜o corrente (CP - current position) a cado feixe (ou caneta, no caso de um plotter ) para o ponto definido pelas coordenadas do dispositivoespecificadas, (dcx, dcy), que passa a definir a nova CP. A segunda desenha um linha reta (ou, em outraspalavras, um vetor) entre o ponto definido pela CP e o ponto definido pelas coordenadas (dcx, dcy), quepassa a ser a nova CP. Num sistema gr´fico com v´rios dispositivos de sa´ conectados ao computador hospedeiro, cada qual a a ıdacom seu pr´prio sistema de coordenadas, ´ conveniente que o sistema disponha de primitivas gen´ricas o e eque sejam acessadas de maneira independente do dispositivo - atrav´s de NDCs ou de coordenadas f´ e ısicas.As rotinas gen´ricas move to e draw to, nesse caso, cont´m estruturas “case” com comandos alternativos e epara cada dispositivo admitido, e enviam a sa´ para o dispositivo de sa´ correntemente ativado, depois ıda ıdade fazer as convers˜es apropriadas [Rankin, p. 29]. o2.3 Dispositivos Gr´ficos Matriciais a2.3.1 ImpressorasImpressoras matriciais: nessas impressoras, os caracteres s˜o impressos por interm´dio de um conjunto a ede agulhas - um ponto ´ impresso quando uma agulha pressiona a fita sobre o papel. As agulhas s˜o e amontadas sobre um cabe¸ote m´vel, e os diferentes caracteres s˜o obtidos pelo acionamento conveniente c o adas agulhas a medida que o cabe¸ote se movimenta. c Estas impressoras podem operar no modo texto para a impress˜o de caracteres, ou num modo gr´fico a a(“bit image”) pelo qual ´ poss´ controlar cada agulha de modo independente. Em outras palavras, o e ıvelconjunto de padr˜es (caracteres) que podem ser impressos ´ program´vel. Cada padr˜o a ser impresso ´ o e a a edefinido por uma pequena matriz de pontos, onde cada ponto pode ser tra¸ado ou n˜o. c a Impressoras gr´ficas: Diversas t´cnicas tˆm sido utilizadas na constru¸˜o de impressoras gr´ficas, a e e ca asendo que as mais comuns s˜o as tecnologias de jato de tinta e laser. a Nas impressoras a jato de tinta, o cabe¸ote transporta um pequeno bico que expele a tinta num jato c ´curto e fino sobre o papel. E poss´ ıvel variar a intensidade do jato, obtendo-se assim controle sobre a 17
  • 19. densidade de impress˜o, e algumas impressoras disp˜em de v´rios bicos com tintas de cores diferentes, a o acuja mistura produz diversas tonalidades. Nas impressoras a laser, o processo de impress˜o ´ semelhante ao das copiadoras eletrost´ticas. Um a e afeixe de raio laser varre uma chapa numa trajet´ria semelhante ao de um cabe¸ote de uma impressora. o cO bombardeio do feixe deixa a chapa carregada com uma carga eletrost´tica n˜o uniforme. Por efeito da a aintensidade da carga, uma tintura (tonner ) adere ` chapa e por press˜o ´ impregnada no papel, formando a a ea imagem. Apesar de utilizarem tecnologias distintas, estas impressoras produzem imagens de natureza seme-lhante (mas com qualidade superior) `s geradas pelas impressoras matriciais em modo gr´fico. As imagens a as˜o, em ultima instˆncia, constitu´ a ´ a ıdas de min´sculos pontos regularmente espa¸ados. u c2.3.2 Dispositivos de V´ ıdeo de Varredura (Raster Scanning VDUs)A tecnologia utilizada atualmente na grande maioria dos terminais de v´ ıdeo gr´ficos ´ a mesma dos a eaparelhos de TV. Um terminal gr´fico simples requer (Figura 2.3): aFigura 2.3: Uma seq¨ˆncia de bits na mem´ria de imagem ´ convertida para uma seq¨ˆncia de pixels na ue o e uetela.Figura 2.4: Representa¸˜o esquem´tica de uma imagem matricial e sua representa¸˜o num frame buffer. ca a ca 1. uma mem´ria digital (frame buffer, ou “mem´ria de imagem”), na qual a imagem a ser visualizada o o ´ armazenada como uma matriz de pixels (cada posi¸˜o na matriz cont´m a intensidade associada e ca e ao pixel correspondente na tela) (Figura 2.4). Os dados da imagem s˜o colocados no frame buffer a pelo computador hospedeiro. 2. o monitor 3. um controlador de v´ ıdeo (display controller ), que consiste de uma interface que transfere o conte´do u do frame buffer para o monitor. Os dados devem ser transferidos repetidamente, pelo menos 15 vezes por segundo, de modo a manter uma imagem est´vel na tela, reduzindo o flickering. Note a que processo de transferˆncia implica numa convers˜o digital-anal´gica (DAC). e a o Para gerar a imagem, utiliza-se a t´cnica conhecida como raster scanning (“varredura”, ou “rastreio”), eque ´ a mesma utilizada na gera¸˜o de imagens de TV. Essa t´cnica tamb´m utiliza um CRT, sendo que e ca e e 18
  • 20. Figura 2.5: Varredura por rastreio fixo.o feixe de el´trons varre a tela muitas vezes por segundo, de acordo com uma trajet´ria fixa (Figura 2.5). e oO feixe movimenta-se da esquerda para a direita, na horizontal. Ao final de uma varredura horizontal,o feixe (com intensidade anulada) ´ reposicionado no in´ e ıcio da linha imediatamente abaixo, para novavarredura. Para garantir o “refrescamento” da imagem, o feixe ´ redirecionado ao ponto inicial da primeira linha esempre que atingir o final da tela. Note que a intensidade do feixe num determinado pixel ´ determinada epelo valor associado ao pixel no frame buffer. Se a mem´ria consiste de apenas um bit por pixel, ent˜o o ao pixel pode ter apenas dois estados: on ou off. Se existem oito bits por pixel, ent˜o cada pixel pode avariar entre 256 n´ıveis de intensidade, desde completamente off (preto), passando por diferentes n´ ıveisde cinza, podendo chegar a completamente on (branco). A dr´stica redu¸˜o dos custos de mem´ria de semicondutor, e o surgimento de circuitos integrados a ca odedicados ao controle e ` gera¸˜o de sinais para terminais de rastreio fixo tornaram esta tecnologia a caextremamente competitiva. Na tecnologia de varredura, todos os pontos que comp˜em uma imagem oprecisam ser armazenados, e n˜o apenas os pontos extremos dos segmentos de reta. Consequentemente, agr´ficos de varredura requerem muito mais mem´ria. Como o pre¸o da mem´ria digital est´ sendo a o c o areduzido ` metade a cada ano que passa, a tecnologia tornou-se a alternativa mais acess´ a ıvel, utilizadatanto em microcomputadores como em esta¸˜es de trabalho gr´ficas. Al´m do custo, outras vantagens co a es˜o a capacidade de representar ´reas cheias, e n˜o somente linhas, e a possibilidade de utiliza¸˜o de a a a cacores ou diferentes n´ıveis de cinza. Figura 2.6: Representa¸˜o esquem´tica de um CRT por varredura colorido. ca a Em monitores monocrom´ticos, toda a superf´ da tela ´ revestida com o mesmo tipo de f´sforo, e a ıcie e oo feixe de el´trons pode ser direcionado para qualquer ponto da tela atrav´s das voltagens x e y. Num e emonitor colorido, cada pixel da tela ´ recoberto por trˆs tipos de f´sforo, que produzem as cores vermelho, e e overde e azul (Red, Green, Blue - RGB). Ao inv´s de um unico feixe de el´trons existem trˆs, cada qual e ´ e eassociado a uma cor de f´sforo. Entre a superf´ da tela recoberta de f´sforo, e os feixes de el´trons, o ıcie o eest´ uma barreira de metal, denominada shadow mask ou metal mask (Figura 2.6), que, por meio de aburacos em posi¸˜es estrat´gicas, garante que cada feixe atinge apenas o f´sforo ao qual est´ associado. co e o a 19
  • 21. R G B Valor Bin´rio a Cor 0 0 0 0 preto 0 0 1 1 azul 0 1 0 2 verde 0 1 1 3 turquesa 1 0 0 4 vermelho 1 0 1 5 magenta 1 1 0 6 amarelo 1 1 1 7 branco Tabela 2.1: Cores RGB em trˆs bits. eVariando a intensidade de cada feixe, varia-se a intensidade do brilho de cada f´sforo, obtendo-se cores odiferentes. Assim como nos monitores monocrom´ticos o feixe de el´trons est´ associado a um conjunto de bits a e ana frame memory que determina a intensidade dos f´sforos vermelho, verde e azul. Se existe apenas um obit associado a cada feixe (ou seja, trˆs bits de mem´ria por pixel), pode-se obter oito cores distintas, e oconforme mostrado na Tabela 2.1. O n´mero de bits associado a cada pixel ´ denominado pixel depth u e(bit planes), ou “profundidade” do pixel. Se cada feixe tem profundidade p, o pixel tem profundidade 3p, e pode-se gerar 23p cores. Algunsterminais gr´ficos tˆm pixels com profundidade quatro, sendo que os trˆs primeiros bits correspondem a e eaos valores R, G e B, e o quarto especifica o brilho, ou intensidade total da cor mostrada. Isto resultaem 24 = 16 cores poss´ ıveis para cada pixel. Outros sistemas usam valores diferentes de profundidade depixel, com significados diferentes associados aos respectivos bit planes. Se a profundidade do pixel ´ D, o n´mero real de cores poss´ e u ıveis ´ 2D , mas o n´mero total de cores e uque podem ser mostradas, denominado palette range, pode ser bem maior. Ao inv´s de usar o valor do epixel armazenado na mem´ria para controlar o feixe diretamente (e.g., us´-lo como uma cor), ele ´ usado o a ecomo um ´ ındice para uma tabela de cores (color lookup table, CLUT). Um palette, ou “cor l´gica”, ´ um o edos 2D valores de pixel poss´ ıveis, e portanto existem 2D palettes (0 a 2D − 1). Um software pode atribuirvalores associados a cores f´ ısicas `s posi¸˜es da look-up table correspondentes a um palette. Assim, o valor a coarmazenado numa posi¸˜o da tabela ´ usado para controlar a cor do pixel associado no monitor. ca e Figura 2.7: Organiza¸˜o de uma v´ ca ıdeo look-up table. Em geral, a tabela de cores ´ uma area fixa de RAM com 2D posi¸˜es de 24 bits cada: a cada feixe e ´ co(ou cor) s˜o associados 8 bits, e portanto cada feixe pode ter 256 n´ a ıveis de intensidade. Isto resulta numtotal de 16 milh˜es de cores poss´ o ıveis, sendo que apenas 2D podem ser mostradas simultaneamente natela. A Figura 2.7 mostra um frame buffer com 8 bits por pixel, e uma LUT com 12 bits por posi¸˜o. ca2.3.3 Primitivas de SoftwareA primitiva b´sica, no caso de um dispositivo matricial, tra¸a um ponto numa determinada posi¸˜o do a c caretˆngulo de visualiza¸˜o: a caint write_pixel(int dcx, int dcy, int pixel_value) Tamb´m ´ poss´ ler dados de um dispositivo, atrav´s da primitiva inversa: e e ıvel eint read_pixel(int dcx, int dcy, int *pixel_value) 20
  • 22. Em ambos os casos, os dados s˜o lidos ou escritos no frame buffer, ou mem´ria de imagem, que a oarmazena todos os pixels de uma imagem a ser visualizada ou lida. Al´m disso, o programador precisa eacessar a lookup table - caso ela exista - o que ´ feito atrav´s de duas primitivas: e eint write_CLUT(int pixel_value,int R, int G, int B)read_CLUT(int pixel_value, int *R, int *G, int *B) Todos os comandos gr´ficos num sistema envolvendo dispositivos matriciais podem ser constru´ a ıdos apartir dessas quatro primitivas. Num sistema b´sico com um dispositivo de visualiza¸˜o monocrom´tico, as primitivas podem ser a ca areduzidas simplesmente a duas rotinas b´sicas, que s˜o casos especiais da rotina “write pixel”. Estas a arotinas “acendem” e “apagam” o ponto definido pelas coordenadas (dcx, dcy).dot_on(int dcx, int dcy);dot_off(int dcx, int dcy) Apesar destas subrotinas usarem coordenadas de tela, rotinas num n´ ıvel superior executariam astransformadas de visualiza¸˜o para converter coordenadas do usu´rio para coordenadas do dispositivo. ca a2.4 Exerc´ ıcios1. Escreva um programa (em C) que desenhe um pol´ ıgono regular (ou seja, um pol´ıgono com lados decomprimentos iguais e ˆngulos internos iguais) com raio igual a um ter¸o da altura da tela, e centro no a ccentro da tela. O programa deve solicitar o n´mero de v´rtices, n. u e2. Modifique o programa do exerc´ anterior para solicitar tamb´m o raio r do c´ ıcio e ırculo que circunscreveo pol´ ıgono. Fa¸a com que o seu programa estime o n´mero n de v´rtices necess´rios para que o pol´ c u e a ıgonopare¸a uma “boa aproxima¸˜o” para um c´ c ca ırculo, para diferentes raios. Usando os parˆmetros ndh, ndv, awidth, height do dispositivo, obtenha uma rela¸˜o te´rica entre n e r para a aproxima¸˜o de c´ ca o ca ırculosatrav´s de pol´ e ıgonos.3. Alguns dispositivos vetoriais oferecem um conjunto de trˆs primitivas gr´ficas: e a • pen up: levanta a caneta do papel, ou desliga o feixe de el´trons; e • pen down: coloca a caneta sobre o papel, ou liga o feixe; • locate(dcx,dcy): posiciona a CP num ponto do retˆngulo de visualiza¸˜o. a ca Escreva rotinas de software que simulem estas trˆs primitivas, usando as primitivas moveto e drawto. e4. Calcule as raz˜es de aspecto (gr´fica e f´ o a ısica), e as resolu¸˜es de ´rea horizontal e vertical de uma tela co ade TV colorida padr˜o, onde: a • width = 42cm; • height = 31cm; • ndh = 546; • ndv = 434.2.5 Dispositivos de EntradaJuntamente com os dispositivos de sa´ıda, os dispositivos de entrada gr´fica permitem o estabelecimento a a a ´da comunica¸˜o usu´rio-m´quina. E importante que programadores de sistemas e aplicativos gr´ficos ca acompreendam a natureza dos principais dispositivos de entrada, de forma a selecion´-los adequadamente aem fun¸˜o da natureza das informa¸˜es a serem tratadas, e da maior ou menor facilidade que oferecem ca coaos usu´rios para exprimir informa¸˜es. a co 21
  • 23. 2.5.1 TecladoO teclado alfanum´rico ´ o recurso mais utilizado na comunica¸˜o entre usu´rio e m´quina, permitindo e e ca a aa entrada de textos e dados num´ricos. Um teclado alfanum´rico estendido inclui teclas adicionais para e ea sele¸˜o de alternativas em menus ou para o disparo de fun¸˜es espec´ ca co ıficas. Teclas de movimento decursor podem ser usadas para sele¸˜o de coordenadas de um ponto em uma tela gr´fica. ca a Em geral, valores de coordenadas especificando posi¸˜es de um cursor na tela s˜o fornecidas para o co acomputador por meio de dispositivos como a ligth pen, o joystick, o mouse e as mesas digitalizadoras(tablets).2.5.2 Ligth Pen´E um dispositivo que funciona associado a um monitor de v´ ıdeo, e que ´ capaz de detectar luz. A caneta etem em sua ponta uma c´lula fotoel´trica e um interruptor de press˜o. Ao ser pressionado contra a tela, e e ao interruptor habilita a c´lula a detectar o pulso de luz emitido pelos f´sforos que recobrem a tela no e oponto sendo apontado. Quando a ligth pen detecta um pulso de luz num terminal de varredura, o conte´do dos registradores uX e Y do controlador de v´ ıdeo ´ armazenado, e o processamento ´ interrompido. Atrav´s dos valores e e earmazenados, o software gr´fico determina as coordenadas do pixel apontado pela caneta. a Quando detecta um pulso de luz num monitor vetorial, a caneta informa ao processador, a execu¸˜o ca´ interrompida, e o processador ´ capaz de detectar qual instru¸˜o de tra¸ado estava em execu¸˜o noe e ca c camomento que ocorreu a interrup¸˜o, e portanto qual segmento de reta foi apontado pelo operador. A cacaneta ´ uma tecnologia um tanto ultrapassada, por ser cansativa para o usu´rio e sujeita a falhas. e a2.5.3 Joystick´E uma alavanca que admite movimentos para frente e para tr´s, esquerda e direita. Dois potenciˆmetros a os˜o respons´veis pela detec¸˜o dos movimentos na horizontal e na vertical. Sua manipula¸˜o fornece um a a ca ca e ca ´par de valores num´ricos em uma faixa limitada fixa para cada posi¸˜o da alavanca. E um dispositivo debaixo custo, bastante utilizado em microcomputadores. Entretanto, o joystick ´ um dispositivo de baixa eresolu¸˜o, e n˜o ´ muito adequado para controlar a posi¸˜o absoluta de um cursor na tela. ca a e ca2.5.4 MouseO mouse ´ uma pequena caixa que pode deslizar sobre uma superf´ plana. Na parte inferior, uma e ıciepequena esfera incrustada no mouse rola livremente a medida que este se movimenta. Os movimentosde rota¸˜o da esfera relativos ` caixa s˜o transmitidos mecanicamente a dois potenciˆmetros que medem ca a a oo deslocamento do mouse em rela¸˜o a dois eixos ortogonais fixos. Como o sistema de eixos ´ fixo em ca erela¸˜o ` caixa, o dispositivo ´ capaz apenas de detectar movimentos relativos ` sua pr´pria posi¸˜o ca a e a o caatual. Ele pode ser levantado da superf´ ıcie, movido e colocado de volta sobre a superf´ sem que a sua ıcieposi¸˜o corrente no sistema seja alterada. ca2.5.5 Mesa Digitalizadora (Tablet)´E o dispositivo mais adequado para entrada de dados geom´tricos. Consiste de uma superf´ plana e e ıcieum cursor que pode ser posicionado sobre a superf´ ıcie. Por indu¸˜o eletromagn´tica, a posi¸˜o corrente ca e cado cursor, relativa a um referencial fixo ` mesa, pode ser detectada e transmitida ao processador. a2.5.6 Data Glove´E o dispositivo de entrada e sa´ pelas m˜os utilizado em realidade virtual. Consiste de um conjunto ıda ade sensores acoplados a uma luva que detectam movimento e for¸a dos dedos. Antenas de transmiss˜o c ae recep¸˜o s˜o respons´veis por fornecer posicionamento das m˜os. Com isso, a posi¸˜o das m˜os pode ca a a a ca aindicar posi¸˜o de objetos, que s˜o ent˜o mapeados para tela ou para um dispositivo de headtrack. ca a a2.5.7 Outros dispositivosEntrada por voz, som via MIDI. 22
  • 24. Cap´ ıtulo 3Tra¸ado de Curvas em Dispositivos cGr´ficos Matriciais aO tra¸ado de primitivas gr´ficas elementares, como segmentos de reta ou arcos de circunferˆncia, requer a c a econstru¸˜o de algoritmos capazes de determinar na matriz de pixels da superf´ de exibi¸˜o quais pixels ca ıcie cadevem ser alterados de forma a simular-se a aparˆncia do elemento gr´fico desejado. Estes algoritmos e arecebem o nome de Algoritmos de Convers˜o Matricial, por converterem em representa¸˜o matricial a caelementos gr´ficos expressos em uma representa¸˜o vetorial. a ca Um elemento geom´trico b´sico a ser tra¸ado num terminal gr´fico ´ o segmento de reta. Atualmente, e a c a e´ comum que rotinas de tra¸ado de linhas estejam dispon´e c ıveis em hardware (em chips controladores).O chip recebe as coordenadas dos pixels extremos, e calcula quais pixels intermedi´rios da superf´ de a ıcieexibi¸˜o devem ser tra¸ados para gerar uma reta (aproximada) na tela. ca c Gr´ficos complexos requerem o tra¸ado de uma grande quantidade de segmentos de reta, e a velocidade a c´ importante - da´ a op¸˜o de tra¸ado por meio de hardware especializado, que libera o processadore ı ca chospedeiro para outras atividades enquanto o chip controlador calcula os pixels a serem tra¸ados. c Se a fun¸˜o de tra¸ado precisa ser implementada em software, a rotina deve ser escrita em c´digo ca c ode m´quina otimizado para atingir o m´ximo de velocidade. Entretanto, ´ instrutivo estudar alguns a a ealgoritmos para tra¸ado de linhas usando uma linguagem de alto n´ c ıvel. Suponhamos, que a superf´ de exibi¸˜o possua igual densidade de pixels na horizontal e na vertical ıcie ca(raz˜o de aspecto gr´fica igual a 1). a a A seguir ser´ apresentada uma importante propriedade do espa¸o onde os diversos elementos gr´ficos a c aser˜o tra¸ados. a c Figura 3.1: Representa¸˜o de segmentos de reta horizontais, verticais e diagonais. ca 23
  • 25. Figura 3.2: Reflex˜o de uma imagem com rela¸˜o a um eixo diagonal. a ca Figura 3.3: Rota¸˜o de 90o obtida atrav´s de 2 reflex˜es, uma horizontal (a) e outra na diagonal (b). ca e o3.1 Simetria e Reflex˜o aTomemos como exemplo o tra¸ado de um segmento de reta. A representa¸˜o matricial de segmentos de c careta horizontais, verticais, e diagonais a 45 e 135 n˜o apresenta nenhuma dificuldade (ver Figura 3.1). aPode-se dizer que estas dire¸˜es formam na realidade eixos de simetria no espa¸o matricial. Logo, qualquer co cimagem representada no espa¸o matricial pode ser refletida em rela¸˜o a qualquer reta horizontal, vertical c caou diagonal sem apresentar qualquer deforma¸˜o (ver Figura 3.2). ca A Simetria ser´ explorada na convers˜o matricial de primitivas gr´ficas que apresentem simetria em a a arela¸˜o a qualquer um destes eixos. Na Figura 3.3 pode-se ver como efetuar a rota¸˜o de uma imagem ca cautilizando de 2 reflex˜es. o3.2 Convers˜o Matricial de Segmentos de Reta aAlguns crit´rios de convers˜o matricial podem ser vistos atrav´s da Figura 3.4. e a e Em (a) adotou-se o crit´rio de selecionar-se os dois pixels imediatamente acima e abaixo do ponto de eintersec¸˜o do segmento com cada vertical, a menos quando o segmento passa por um pixel. Restri¸˜o: ca cadessa forma obt´m-se linhas densas, como se o segmento fosse espesso. e Em (b) o crit´rio foi selecionar todos os pixels cujas coordenadas s˜o obtidas arredondando-se os e avalores das coordenadas de algum ponto do segmento. Restri¸˜o: com segmentos a 45 o crit´rio produz ca eresultados semelhantes ao anterior. A convers˜o ilustrada em (c) foi obtida selecionando-se em cada vertical o pixel mais pr´ximo do a oponto de intersec¸˜o do segmento com a reta vertical. Vantagens: aparˆncia leve e continuidade. ca e Em (d) utilizou-se o mesmo crit´rio, s´ que para as linhas horizontais. Restri¸˜o: descontinuidade. e o ca 24
  • 26. Figura 3.4: Convers˜es matriciais de um segmento de reta resultante de diferentes crit´rios. o e3.2.1 Caracter´ ısticas Desej´veis para os Algoritmos de convers˜o Matricial a a de Segmentos de Retas 1. Linearidade: os pixels tra¸ados devem dar a aparˆncia de que est˜o sobre uma reta. Isto ´ trivial c e a e no caso de segmentos paralelos aos eixos x ou y, ou com inclina¸˜o de 45 graus, mas n˜o nos outros ca a casos. 2. Precis˜o: os segmentos devem iniciar e terminar nos pontos especificados. Caso isso n˜o ocorra, a a pequenos gaps podem surgir entre o final de um segmento e o in´ de outro. ıcio 3. Espessura (Densidade) uniforme: a densidade da linha ´ dada pelo n´mero de pixels tra¸ados e u c dividido pelo comprimento da linha. Para manter a densidade constante, os pixels devem ser igualmente espa¸ados. A imagem do segmento n˜o varia de intensidade ou espessura ao longo de c a sua extens˜o. a 4. Intensidade independente da inclina¸˜o: para segmentos de diferentes inclina¸˜es ca co 5. Continuidade: a imagem n˜o apresenta interrup¸˜es indesej´veis. a co a 6. Rapidez no Tra¸ado dos segmentos. c Os algoritmos que vamos estudar usam o m´todo incremental, que consiste em executar os c´lculos e aiterativamente, mantendo um registro (ou mem´ria) do progresso da computa¸˜o a cada passo da itera¸˜o. o ca caNesse m´todo, come¸ando por um dos extremos da linha, o pr´ximo ponto ´ calculado e tra¸ado at´ que e c o e c eo outro extremo seja atingido e tra¸ado. c O problema da convers˜o matricial consiste essencialmente em ajustar uma curva, no caso, um seg- amento de reta, a qual ´ precisamente definida por coordenadas reais, a uma malha de coordenadas einteiras. Isto pode ser feito calculando as coordenadas reais, (xr , yr ), do pr´ximo ponto na linha, e es- ocolhendo na malha os pixels cujas coordenadas (x, y) mais se aproximam das coordenadas reais, obtidospor arredondamento ou truncamento. Qualquer algoritmo de tra¸ado de linhas pode ser testado com rela¸˜o aos requisitos acima: Para c cao requisito 1, calcula-se a soma dos quadrados das diferen¸as entre cada par (xr , yr ), (x, y). O melhor calgoritmo ´ o que resultar na menor diferen¸a. O requisito 2 ´ problem´tico apenas quando os pontos e c e aextremos dos segmentos s˜o especificados em coordenadas do usu´rio. Para o requisito 3, conta-se o a an´mero de pixels tra¸ados, e divide-se pelo comprimento da linha. Os requisitos 4 e 6 s˜o avaliados u c aatrav´s da execu¸˜o de benchmarks em cada algoritmo, para efeito de compara¸˜o. O requisito 5 pode e ca caser verificado analisando-se os tamanho dos “buracos” entre um ponto e o seu pr´ximo, o que pode ser ofeito atrav´s de um algoritmo que calcule a distˆncia entre dois pontos. e a3.2.2 Crit´rio Adotado eSeja o segmento de reta definido por seus extremos (x1 , y1 ) e (x2 , y2 ). Pode-se supor que este segmento est´ no 1o octante (porquˆ?!). Ent˜o estas coordenadas respeitam as a e arela¸˜es: co 25
  • 27. 0 < x1 < x2 (3.1) 0 < y1 < y2 (3.2) y2 − y1 < x2 − x1 (3.3) Nestas condi¸˜es o segmento de reta corta um n´mero maior de linhas verticais do reticulado do que co ude horizontais e assim: Crit´rio de Convers˜o: em cada vertical do retilado com abscissa entre x1 e x2 apenas o e a pixel mais pr´ximo da interse¸˜o do segmento com a vertical faz parte da sua imagem. o ca Este crit´rio aplicado a segmentos do 2o octante n˜o produz resultados satisfat´rios (tente fazˆ-lo!), e a o epois nesse caso o n´mero de verticais que corta o segmento ser´ menor que o de horizontais. Solu¸˜o: u a capara segmentos no 2o octante utilizar este crit´rio s´ que trocando x com y e vertical por horizontal. A e oFigura 3.5 apresenta a convers˜o de segmentos pelo crit´rio acima. a e Figura 3.5: Imagens de segmentos de reta convertidos pelo crit´rio expl´ e ıcito acima.3.2.3 AlgoritmosEqua¸˜o da reta: ca y = y1 + a(x − x1 ) (3.4) (y2 −y1 )onde a = (x2 −x1 ) . Dessa forma, basta que para cada vertical da grade entre x1 e x2 , determinemos o inteiro mais pr´ximo oda ordenada correspondente da reta. O algoritmo 3.1 implementa esta id´ia. e3.2.4 Algoritmo do “Ponto-M´dio” eUm algoritmo equivalente a este mas que dispensa as opera¸˜es em ponto flutuante foi proposto por coBresenham (em 1965). Bresenham desenvolveu um algoritmo cl´ssico que usa apenas vari´veis inteiras, a ae que permite que o c´lculo de (xi + 1, yi + 1) seja feito incrementalmente, usando os c´lculos j´ feitos a a apara (xi , yi ). Vamos estudar uma vers˜o do Algoritmo de Bresenham denominada MidPoint Line aAlgorithm (“Algoritmo do Ponto-M´dio ou Meio-Ponto para Retas”) por Foley. e O algoritmo assume que a inclina¸˜o da linha est´ entre 0 e 1 (outras inclina¸˜es podem ser tratadas ca a copor simetria). O ponto (x1 , y1 ) ´ o inferior esquerdo, e (x2 , y2 ) ´ o superior direito. e e Considere a linha na Figura 3.6. Assumindo que o pixel que acabou de ser selecionado ´ P , em e(xp , yp ), e o pr´ximo deve ser escolhido entre o pixel ` direita (pixel E) e o pixel acima ` direita (NE). o a aSeja Q o ponto de intersec¸˜o entre a reta e a coluna x = xp + 1 da malha, e M o ponto intermedi´rio ca aentre os pixels E e NE. O que se faz ´ observar de que lado da reta est´ o ponto M . E a e a ´ f´cil verificar quese M est´ acima da reta, o pixel E est´ mais pr´ximo da reta; se M est´ abaixo, NE est´ mais pr´ximo. a a o a a o 26
  • 28. void line(int x1, int y1, int x2, int y2, int color){ int x, y; float a; int valor; a=(y2-y1)/(x2-x1); for (x=x1;x<=x2;x++){ /* arredonda y */ y = (y1 + a * (x - x1)); write_pixel(x, y, color); }/* end for */ }/*end line */ ´Algoritmo 3.1: Algoritmo simples para convers˜o matricial de retas. E pouco eficiente pois autiliza c´lculos de ponto flutuante. a Figura 3.6: Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. e 27
  • 29. Dessa forma, o teste do ponto-m´dio permite a escolha do pixel mais pr´ximo da reta. Al´m disso, o erro e o e(a distˆncia vertical entre o pixel escolhido e a linha) ´ sempre ≤ 1 . a e 2 O que precisamos agora ´ um m´todo para calcular de que lado da reta est´ o ponto M . Para isso, e e aconsidere sua fun¸˜o impl´ ca ıcita, F (x, y) = ax + by + c = 0. Se dy = y2 − y1 , e dx = x2 − x1 , a equa¸˜o da careta em termos de sua inclina¸˜o pode ser escrita como: ca dy y= x+B (3.5) dxe, consequentemente, F (x, y) = dy.x − dx.y + B.dx = 0 (3.6) Aqui, tem-se a = dy, b = −dx, e c = B.dx. ´ a E f´cil verificar que F (x, y) = 0 sobre a linha, positiva para pontos abaixo dela, e negativa para 1pontos acima dela. Para o teste do ponto-m´dio, basta calcular F (M ) = F (xp + 1, yp + 2 ) e verificar o eseu sinal. Como a decis˜o ser´ tomada com base no valor da fun¸˜o no ponto (xp + 1, yp + 1 ), definimos a a ca 2uma “vari´vel de decis˜o” d = a(xp + 1) + b(yp + 1 ) + c. Se d > 0, escolhemos o pixel NE, se d < 0, a a 2escolhemos o pixel E; se d = 0 pode-se escolher qualquer um deles, por exemplo E. ´ E interessante verificar o que acontece com a localiza¸˜o de M e o valor de d no pr´ximo ponto da ca oreta. Ambos dependem, obviamente, da escolha de E ou NE. Se E for escolhido, M ´ incrementado de 1 ena dire¸˜o x. Assim, ca 1 1 dnew = F (xp + 2, yp + ) = a(xp + 2) + b(yp + ) + c (3.7) 2 2 mas 1 dold = a(xp + 1) + b(yp + ) + c (3.8) 2 Subtraindo dold de dnew para obter a diferen¸a incremental, tem-se dnew = dold + a. c Denominamos ∆E o incremento a ser adicionado depois da escolha de E; e ∆E = a = dy. Em outraspalavras, pode-se derivar o valor da vari´vel de decis˜o no pr´ximo passo incrementalmente, a partir do a a oseu valor atual, sem necessidade de calcular F (M ) diretamente. Se NE ´ escolhido, M ´ incrementado de 1 em ambas as dire¸˜es, x e y. Portanto, e e co Subtraindo dold de dnew , tem-se dnew = dold +a+b. Denominamos ∆N E o incremento a ser adicionadodepois da escolha de NE; e ∆N E = a + b = dy − dx.Resumindo a t´cnica incremental do ponto-m´dio e eA cada passo, o algoritmo escolhe entre 2 pixels, com base no sinal da vari´vel de decis˜o calculada a ana itera¸˜o anterior; a seguir a vari´vel de decis˜o ´ atualizada adicionando-se ∆E ou ∆N E ao valor ca a a eanterior, dependendo do pixel escolhido. Como o primeiro pixel corresponde ao ponto (x1 , y1 ), pode-se calcular diretamente o valor inicial de 1d para escolher entre E e NE. O primeiro ponto-m´dio est´ em (x1 + 1, y1 + 2 ), e e a 1 1 b b F (x1 + 1, y1 + ) = a(x1 + 1) + b(y1 + ) + c = ax1 + by1 + c + a + = F (x1 , y1 ) + a + (3.9) 2 2 2 2 Como (x1 , y1 ) ´ um ponto da reta, F (x1 , y1 ) ´ 0; consequentemente dstart ´ dado por a + 2 = dy − dx . e e e b 2Usando dstart, escolhe-se o segundo pixel, e assim por diante. Para eliminar a fra¸˜o em dstart , F ´ ca emultiplicada por 2. Isto ´: eF (x, y) = 2(ax + by + c). Isto multiplica cada constante e a vari´vel de decis˜o por 2, mas n˜o afeta o a a asinal da vari´vel de decis˜o, que ´ o que interessa para o teste do ponto-m´dio. a a e e A aritm´tica necess´ria para calcular dnew a cada passo ´ adi¸˜o simples - nenhuma multiplica¸˜o ´ e a e ca ca enecess´ria (veja o algoritmo abaixo). Note que esta vers˜o do algoritmo funciona apenas para linhas com a ainclina¸˜o entre 0 e 1, mas a generaliza¸˜o n˜o ´ dif´ ca ca a e ıcil. A Figura 3.7 mostra a reta que vai do ponto(5,8) ao ponto (9,11), tra¸ada por este algoritmo. Os valores sucessivos de d s˜o 2, 0, 6 e 4, resultantes c ada escolha de NE, E, NE e NE, respectivamente. Exerc´ıcios 1. Escreva procedimentos para checar os 6 requisitos de um bom algoritmo de convers˜o matricial, e a aplique-os aos algoritmos de convers˜o estudados. a 2. Escreva uma vers˜o melhorada do Algoritmo de Bresenham, que teste se as itera¸˜es devem ser a co feitas ao longo do eixo x ou ao longo do eixo y, e tamb´m para checar exce¸˜es como linhas paralelas e co ao eixo x. 28
  • 30. Figura 3.7: Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. e3.3 Convers˜o Matricial de Circunferˆncias a eA equa¸˜o de uma circunferˆncia com centro na origem e raio R, em coordenadas cartesianas, ´ dada ca e epor: x2 + y 2 = R2 (3.10) Circunferˆncias n˜o centradas na origem podem ser transladadas para a origem, e os pixels reais e apodem ser tra¸ados aplicando-se um offset aos pixels gerados pelo algoritmo de convers˜o matricial. c a Existem muitas abordagens simples, por´m ineficientes, para o tra¸ado de c´ e c ırculos: Em algoritmosn˜o incrementais, um pol´ a ıgono regular de n lados ´ usado como aproxima¸˜o para a circunferˆncia. Para e ca eque a aproxima¸˜o seja razo´vel, deve-se escolher um valor suficientemente alto para n. Entretanto, ca aquanto maior o valor de n, mais lento ser´ o algoritmo, e v´rias estrat´gias de acelera¸˜o precisam ser a a e causadas. Em geral os algoritmos incrementais de convers˜o matricial s˜o mais r´pidos. a a a Outra abordagem seria usar a equa¸˜o expl´ ca ıcita da circunferˆncia, y = f (x): e y = ± R2 − x2 (3.11) 1Figura 3.8: Um arco de 4 de circunferˆncia, obtido variando-se x em incrementos unit´rios, e calculando e ae arrendondando y. Para desenhar 1 de circunferˆncia (os outros 3 s˜o desenhados por simetria), poder´ 4 e 4 a ıamos variar x de0 a R, em incrementos de uma unidade, calculando +y a cada passo atrav´s da equa¸˜o acima. Essa e caestrat´gia funciona, mas ´ ineficiente porque requer opera¸˜es de multiplica¸˜o e raiz quadrada. Al´m e e co ca e 29
  • 31. void inc_line(int x1, int y1, int x2, int y2, int color){ int dx, dy, incE, incNE, d, x, y; dx = x2 - x1; dy = y2 - y1; d = 2 * dy - dx; /* Valor inicial de d */ incE = 2 * dy; /* Incremento de E */ incNE = 2 * (dy - dx); /* Incremento de NE */ x = x1; y = y1; write_pixel(x, y, color); while (x < x2){ if (d <= 0){ /* Escolhe E */ d = d + incE; x = x + 1; }else{ /* Escolhe NE */ d = d + incNE; x = x + 1; y = y + 1; }/* end if */ write_pixel(x, y, color); }/* end while */ }/* end inc_line */ Algoritmo 3.2: Algoritmo do Ponto-M´dio incremental. edisso, haver´ grandes gaps nas regi˜es onde a tangente ` circunferˆncia ´ infinita (valores de x pr´ximos a o a e e oa R, Figura 3.8). Uma maneira de resolver o problema dos gaps ´ “plotar” x = R. cos θ e y = R. sin θ, epara variando de 0 a 90 graus, mas essa solu¸˜o tamb´m ´ ineficiente, pois precisa de fun¸˜es caras (sin ca e e coe cos).3.3.1 Simetria de ordem 8Note que o tra¸ado de uma circunferˆncia pode tirar proveito de sua simetria. Considere uma circun- c eferˆncia centrada na origem. Se o ponto (x, y) pertence ` circunferˆncia, pode-se calcular de maneira e a etrivial sete outros pontos da circunferˆncia (Figura 3.9). Consequentemente, basta computar um arco de ecircunferˆncia de 45o para obter a circunferˆncia toda. Para uma circunferˆncia com centro na origem, os e e eoito pontos sim´tricos podem ser tra¸ados usando o procedimento CirclePoints (Algoritmo 3.3). e c void CirclePoints(int x, int y, int color){ write_pixel( x, y, color); write_pixel( x, -y, color); write_pixel(-x, y, color); write_pixel(-x, -y, color); write_pixel( y, x, color); write_pixel( y, -x, color); write_pixel(-y, x, color); write_pixel(-y, -x, color); }/* end CirclePoints */ Algoritmo 3.3: Procedimento CirclePoints. Vamos estudar especificamente um algoritmo derivado do algoritmo de Bresenham para gera¸˜o de cacircunferˆncias, chamado “Midpoint Circle Algorithm” em [Foley et. al]. e 30
  • 32. Figura 3.9: Oito pontos sim´tricos em uma circunferˆncia. e e3.3.2 Algoritmo do “Ponto-M´dio” para Circunferˆncias e e RConsideraremos apenas um arco de 45o da circunferˆncia, o 2o octante, de x = 0, y = R a x = y = √2 , ee usaremos o procedimento CirclePoints para tra¸ar todos os pontos da circunferˆncia. Assim como o c ealgoritmo gerador de linhas, a estrat´gia ´ selecionar entre 2 pixels na malha aquele que est´ mais pr´ximo e e a oda circunferˆncia, avaliando-se uma fun¸˜o no ponto intermedi´rio entre os dois pixels. No segundo e ca aoctante, se o pixel P em (xp , yp ) foi previamente escolhido como o mais pr´ximo da circunferˆncia, a o eescolha do pr´ximo pixel ser´ entre os pixels E e SE (Figure 3.10). o a Seja a fun¸˜o F (x, y) = x2 +y 2 −R2 , cujo valor ´ 0 sobre a circunferˆncia, positivo fora dela e negativo ca e edentro. Se o ponto intermedi´rio (o “ponto-m´dio”) entre os pixels E e SE est´ fora da circunferˆncia, o a e a epixel SE ´ escolhido, porque est´ mais pr´ximo dela. Por outro lado, se o pixel intermedi´rio est´ dentro e a o a ada circunferˆncia, ent˜o o pixel E ´ escolhido. e a e Assim como no caso das linhas, a escolha ´ feita com base na vari´vel de decis˜o d, que d´ o valor da e a a afun¸˜o no “ponto-m´dio”: ca e 1 1 dold = F (xp + 1, yp − ) = (xp + 1)2 + (yp − )2 − R2 (3.12) 2 2 Se dold < 0, E ´ escolhido, e o pr´ximo ponto-m´dio ser´ incrementado de 1 na dire¸˜o x. Assim, e o e a ca 1 1 dnew = F (xp + 2, yp − ) = (xp + 2)2 + (yp − )2 − R2 (3.13) 2 2e dnew = dold + (2xp + 3); consequentemente ∆E = 2xp + 3. Se dold ≥ 0, SE ´ escolhido, e o pr´ximo ponto-m´dio ser´ incrementado de 1 na dire¸˜o x e decre- e o e a camentado de 1 na dire¸˜o y. Portanto: ca 3 3 dnew = F (xp + 2, yp − ) = (xp + 2)2 + (yp − )2 − R2 (3.14) 2 2 Como dnew = dold + (2xp − 2yp + 5), ∆SE = 2xp − 2yp + 5. Note que no caso da reta (equa¸˜o linear), ∆E e ∆N E eram constantes. No caso da circunferˆncia ca e(equa¸˜o quadr´tica), E e SE variam a cada passo, sendo fun¸˜es do valor espec´ ca a co ıfico de (xp , yp ), o pixelescolhido na itera¸˜o anterior (P ´ chamado “ponto de avalia¸˜o”). As fun¸˜es podem ser avaliadas ca e ca codiretamente, a cada passo, dados os valores de x e y do pixel escolhido na itera¸˜o anterior. Essa caavalia¸˜o n˜o ´ computacionalmente cara, uma vez que as fun¸˜es s˜o lineares. ca a e co a 31
  • 33. Figura 3.10: Malha de pixels para o Algoritmo do Ponto-M´dio para circunferˆncias, ilustrando a escolha e eentre os pixels E e SE. Resumindo, os mesmos dois passos executados para o algoritmo do tra¸ado de linhas s˜o executados c apara o algoritmo de circunferˆncias: e 1. escolher o pixel com base no sinal da vari´vel d, calculada na itera¸˜o anterior; a ca 2. atualizar a vari´vel d com o valor correspondente ao pixel escolhido. A diferen¸a ´ que, na atua- a c e liza¸˜o de d, calculamos uma fun¸˜o linear do ponto de avalia¸˜o. ca ca ca Falta ainda calcular a condi¸˜o inicial (o 1o valor de d). Limitando a utiliza¸˜o do algoritmo a raios ca cainteiros no segundo octante, o pixel inicial ´ dado por (0, R). O pr´ximo “ponto-m´dio” est´ em (1, R− 1 ), e o e a 2 1e portanto F (1, R − 2 ) = 1 + (R2 − R + 1 ) − R2 = 5 − R. O algoritmo, bastante parecido com o algoritmo 4 4para tra¸ado de retas, ´ mostrado no Algoritmo 3.4. c eFigura 3.11: Segundo octante da circunferˆncia gerado com o algor´ e ıtimo do Ponto-M´dio e primeiro eoctante gerado por simetria. 32
  • 34. void MidPointCircle(int r, int color){ int x, int y; float d; /* Valores iniciais */ x = 0; y = r; d = 5/4 - r; CirclePoints(x, y, color); while (y > x){ if (d < 0){ /* Selecione E */ d = d + 2 * x + 3; x++; }else{ /* Selecione SE */ d = d + 2 * (x - y) + 5; x++; y--; }/*end if*/ CirclePoints(x, y, color); }/* end while */ }/* end MidpointCircle */ Algoritmo 3.4: Algoritmo do Ponto-M´dio para circunferˆncias (Aritm´tica Real). e e e O algoritmo pode ser facilmente modificado para manipular circunferˆncias centradas fora da origem, eou de raios n˜o inteiros. Entretanto, um problema com esta vers˜o ´ a necessidade de usar aritm´tica a a e ereal, devido ao valor inicial de d. 1 Para eliminar as fra¸˜es, vamos definir uma nova vari´vel de decis˜o, h, onde h = d − 4 , e substituir co a ad por h + 4 no c´digo. Agora, a inicializa¸˜o ´ h = 1 − R, e a compara¸˜o d < 0 torna-se h < − 1 . 1 o ca e ca 4Entretanto, como o valor inicial de h ´ inteiro, e a vari´vel ´ incrementada de valores inteiros (∆E e e a e∆SE), a compara¸˜o pode ser alterada simplesmente para h < 0. Temos agora um algoritmo que opera caem termos de h, usando apenas aritm´tica inteira, que ´ mostrado no Algoritmo 3.5. (Para manter a e enota¸˜o consistente com o algoritmo de linhas, substituimos novamente h por d). A Figura 3.11 mostra cao segundo octante de uma circunferˆncia de raio 14 gerada pelo algoritmo. eDiferen¸as de Segunda Ordem c´E poss´ ıvel melhorar o desempenho do algoritmo usando ainda mais extensivamente a t´cnica da com- eputa¸˜o incremental. Vimos que as fun¸˜es s˜o equa¸˜es lineares, e no algoritmo, elas est˜o sendo ca co a co acomputadas diretamente. Entretanto, qualquer polinˆmio pode ser calculado incrementalmente - assim ocomo foi feito com as vari´veis de decis˜o. (Na verdade, estamos calculando diferen¸as parciais de 1a e a a c2a ordens). A estrat´gia consiste em avaliar as fun¸˜es diretamente em dois pontos adjacentes, calcular a e codiferen¸a (que no caso de polinˆmios ´ sempre um polinˆmio de menor grau), e aplicar esta diferen¸a a c o e o ccada itera¸˜o. ca Se escolhemos E na itera¸˜o atual, o ponto de avalia¸˜o move de (xp , yp ) para (xp + 1, yp ). Como ca cavimos, a diferen¸a de 1a ordem ´ ∆Eold em (xp , yp ) = 2xp + 3. Conseq¨entemente, c e u ∆Enew em (xp + 1, yp ) = 2(xp + 1) + 3 (3.15)e a diferen¸a de 2a ordem ´ ∆Enew − ∆Eold = 2. c e Analogamente, SEold em (xp , yp ) = 2xp − 2yp + 5. Conseq¨entemente, u ∆SEnew em(xp + 1, yp ) = 2(xp + 1) − 2yp + 5 (3.16) ae a diferen¸a de 2 ordem ´ ∆SEnew − ∆SEold = 2. c e Se escolhemos SE na itera¸˜o atual, o ponto de avalia¸˜o move de (xp , yp ) para (xp + 1, yp − 1). ca caConseq¨entemente u 33
  • 35. void MidPointCircleInt(int r, int color){ int x, int y, d; /* Valores iniciais */ x = 0; y = r; d = 1 - r; CirclePoints(x, y, color); while (y > x){ if (d < 0){ /* Selecione E */ d = d + 2 * x + 3; x++; }else{ /* Selecione SE */ d = d + 2 * (x - y) + 5; x++; y--; }/*end if*/ CirclePoints(x, y, color); }/* end while */ }/* end MidpointCircleInt */ Algoritmo 3.5: Algoritmo do Ponto-M´dio para circunferˆncias utilizando aritm´tica inteira. e e e ∆Enew em(xp + 1, yp − 1) = 2(xp + 1) + 3 (3.17)e a diferen¸a de 2a ordem ´ ∆Enew − ∆Eold = 2. Al´m disso, c e e ∆SEnew em(xp + 1, yp − 1) = 2(xp + 1) − 2(yp − 1) + 5 (3.18) ae a diferen¸a de 2 ordem ´ ∆SEnew − ∆SEold = 4. c e Considerando que ∆E e ∆SE s˜o computados usando o pixel inicial (0, R), a vers˜o final do algoritmo a adada a seguir e consiste dos seguintes passos: 1. escolher o pixel com base no sinal da vari´vel d calculada na itera¸˜o anterior; a ca 2. atualizar a vari´vel d usando E ou SE, usando o valor de calculado na itera¸˜o anterior; a ca 3. atualizar os ∆ s para considerar o movimento para o pr´ximo pixel, utilizando as diferen¸as cons- o c tantes previamente calculadas; e 4. mover para o pr´ximo pixel. ∆E e ∆SE s˜o computados usando o pixel inicial (0, R). o a O algoritmo, bastante utilizando a otimiza¸˜o das diferen¸as de 2a ordem ´ apresentado em no Algo- ca c eritmo 3.6.3.4 Convers˜o Matricial de Elipses aConsideremos a elipse padr˜o da Figura 3.12, centrada em (0, 0). Ele ´ descrita pela equa¸˜o: a e ca F (x, y) = b2 x2 + a2 y 2 − a2 b2 = 0 (3.19)onde 2a ´ o comprimento do eixo maior (eixo x) e 2b ´ o comprimento do eixo menor (eixo y). e e Como foi feito para circunferˆncias, tomar-se-´ como base elipses centradas na origem (transla¸˜o !). e a ca As elipses possuem simetria horizontal e vertical, assim a preocupa¸˜o ser´ de tra¸ar apenas o primeiro ca a cquadrante da elipse e depois tra¸ar os demais por reflex˜o. c a Primeiramente dividiremos o primeiro quadrante em duas regi˜es: o limite entre as duas regi˜es ´ o o o eponto da curva cuja tangente tem inclina¸˜o igual a -1. A determina¸˜o deste ponto n˜o ´ t˜o simples. ca ca a e a 34
  • 36. void MidPointCircleInt(int r, int color){ // Fun¸~o de utiliza diferen¸as parciais de 2a ordem para incrementar variavel de ca c // decis~o d. Circunfer^ncia centrada na origem a e /* Valores iniciais */ int x = 0; int y = r; int d = 1 - r; int deltaE=3 inte deltaSE= -2*r+5 CirclePoints(x, y, color); while (y > x){ if (d < 0){ /* Selecione E */ d +=deltaE; deltaE += 2; deltaSE += 2; }else{ /* Selecione SE */ d +=deltaSE; deltaE += 2; deltaSE += 4; y--; }/*end if*/ x++; CirclePoints(x, y, color); }/* end while */ }/* end MidpointCircleInt */Algoritmo 3.6: Algoritmo MidPoint para convers˜o matricial de circunferˆncias utilizando dife- a eren¸as de 2 a ordem c 35
  • 37. Figura 3.12: Elipse padr˜o centrada na origem. aPara tanto utilizaremos o vetor gradiente que ´ perpendicular ` tangente ` curva no ponto P , definido e a acomo: ∂F ∂F GradienteF (x, y) = i+ j = 2b2 xi + 2a2 y j (3.20) ∂x ∂x Figura 3.13: As duas regi˜e adotadas, definidas pela tangente a 45o . o O limite entre as duas regi˜es ´ o ponto cuja inclina¸˜o da curva ´ -1, e este ponto ocorre quando o e ca eo vetor gradiente tem inclina¸˜o igual a 1, isto ´, quando os componentes nas dire¸˜es i e j s˜o de ca e co amagnitudes iguais. A componente j do gradiente ´ maior do que a i na regi˜o 1, e vice-versa na regi˜o e a a2. Assim, se o pr´ximo “ponto-m´dio” ´ a2 (yp − 1 ) ≤ b2 (xp + 1), n´s mudamos da regi˜o 1 para a regi˜o o e e 2 o a a2 (ver Figura 3.13). Como nos outros algoritmos de “ponto-m´dio” anteriores, o sinal da vari´vel de decis˜o d (´ o valor e a a eda fun¸˜o no “ponto-m´dio”) ser´ usado para verificar que pixels fazem ou n˜o parte da elipse. ca e a a Assim, na regi˜o 1, se o pixel corrente est´ em (xp , yp ), ent˜o a vari´vel de decis˜o para a regi˜o a a a a a a1, d1, ´ F (xp + 1, yp − 1 ), o ponto m´dio entre E e SE. Repetindo o processo de deriva¸˜o para a e 2 e cafun¸˜o de incremento (como foi feito para circunferˆncia), tem-se que ∆E = b2 (2xp + 3) e ∆SE = ca eb2 (2xp + 3) + a2 (−2yp − 1). 36
  • 38. Para a regi˜o 2, se o pixel corrente est´ em (xp , yp ), ent˜o a vari´vel de decis˜o para a regi˜o 2, d2, a a a a a a 1´ F (xp + 2 , yp − 1), o ponto m´dio entre S e SE. Pode-se fazer c´lculos idˆnticos aos da regi˜o 1.e e a e a A condi¸˜o inicial deve ser ent˜o computada. Assumindo valores inteiros para a e b, a elipse come¸a ca a cem (0, b), e o primeiro “ponto-m´dio” ´ calculado em (1, b − 1 ). Assim, e e 2 1 1 1 F (1, b − ) = b2 + a2 (b − )2 − a2 b2 = b2 + a2 (−b + ) (3.21) 2 2 4 void MidpointElipse(int a, int b, int color){ int x, int y; float d1, d2; /* Valores iniciais */ x = 0; y = b; d1 = b * b - a * a * b + a * a / 4.0; ElipsePoints(x, y, color); /* Simetria de ordem 4 */ while(a * a * (y - 0.5) > b * b * (x + 1)){ /* Regi~o 1 */ a if (d1 < 0) d1 = d1 + b * b * (2 * x + 3); x++ }else{ d1 = d1 + b * b * (2 * x + 3) + a * a * (-2 * y + 2); x++; y--; }/*end if*/ ElipsePoints(x, y, color); }/* end while */ d2 = b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b; while(y > 0){ /* Regi~o 2 */ a if (d2 < 0){ d2 = d2 + b * b * (2 * x + 2) + a * a * (-2 * y + 3); x++; y--; }else{ d2 = d2 + a * a * (-2 * y + 3); y--; }/*end if*/ ElipsePoints(x, y, color); }/* end while */ }/*end MidpointElipse*/ Algoritmo 3.7: Algoritmo do Ponto-M´dio para convers˜o matricial de elipses. e a3.5 Corre¸˜o no Tra¸ado ca cPara a maioria dos dispositivos gr´ficos, o retˆngulo de visualiza¸˜o n˜o ´ quadrado, e as densidades de a a ca a epixels na horizontal e na vertical s˜o diferentes. Ou seja, a raz˜o de aspecto f´ a a ısica raramente ´ igual ea 1, e a consequˆncia ´ uma distor¸˜o vis´ e e ca ıvel no tra¸ado. Por exemplo, um quadrado (especificado cem coordenadas do usu´rio) pode ser deformado num retˆngulo ao ser convertido em coordenadas do a adispositivo, ou uma circunferˆncia pode ser distorcida numa elipse. e A forma mais simples de corrigir esta deforma¸˜o ´ atrav´s de uma transforma¸˜o de escala dos dados ca e e caque definem a curva a ser tra¸ada. Ou seja, no caso da circunferˆncia, bastaria converter os pontos c eque definem a circunferˆncia em pontos que na verdade definem uma elipse, mas que, como existe a edeforma¸˜o, aparecem na tela como uma circunferˆncia. ca e 37
  • 39. As diferen¸as de densidades representam de fato uma opera¸˜o de escala n˜o homogˆnea realizada c ca a epelo dispositivo. Para corrig´ basta aplicar-se aos parˆmentros das curvas a serem tra¸adas uma ı-la a ctransforma¸˜o de escala inversa, que compense a do dispositivo. Por exemplo, se a densidade horizontal ca´ o dobro da densidade vertical, ent˜o as abcissas dos pontos extremos de cada segmento a tra¸ar deveme a cser dobradas para que mantenham a mesma propor¸˜o em rela¸˜o `s ordenadas. Essa manipula¸˜o dos ca ca a capontos das curvas deve ser feita pelo programa que efetua a interface entre os programas do usu´rio eaos dispositivos gr´ficos de sa´ - os chamados Pacotes gr´ficos de interfaceamento, ou Ambientes a ıda aGr´ficos. a Outra quest˜o complexa ´ a elimina¸˜o do efeito de “serrilhado” (aliasing) observ´vel nas imagens a e ca ageradas por m´todos de convers˜o matricial. Este efeito ´ mais pronunciado nos trechos de arcos com e a einclina¸oes pr´ximas da horizontal ou vertical. As t´cnicas usualmente aplicadas para a corre¸˜o desse c o e caefeito s˜o “caras” (do ponto de vista computacional), e exigem que se fa¸a um controle de intensidade do a ctra¸o. c As t´cnicas de anti-serrilhado (antialiasing) tra¸am n˜o s´ os pixels calculados pelo procedimento de e c a oconvers˜o matricial, mas tamb´m os pixels vizinhos, acima e abaixo, com intensidades vari´veis, que ser˜o a e a atanto maiores quanto mais pr´ximos os pixels estiverem do centro da reta. O c´lculo das intensidades o ados pixels e a determina¸˜o das suas coordenadas s˜o processos n˜o triviais, e requerem um n´mero bem ca a a umaior de opera¸˜es do que o efetuado pelos algoritmos de convers˜o estudados. co a3.6 AntialisingAs primitivas geradas apresentam o problema da aparˆncia “serrilhada”, ou “efeito escada”. Este efeito eindesej´vel ´ o resultado da abordagem “tudo ou nada” adotada no processo de convers˜o matricial, no a e aqual cada pixel recebe a cor associada ` primitiva ou mant´m a sua cor original. Esse efeito ´ apenas a e euma das v´rias manifesta¸˜es vis´ a co ıveis do fenˆmeno conhecido como aliasing. A aplica¸˜o de t´cnicas que o ca ereduzem (ou eliminam) o efeito de aliasing ´ denominado antialising, e primitivas ou imagens geradas eutilizando tais t´cnicas s˜o ditas antialiased. e a Considere o algoritmo do ponto m´dio para tra¸ado de segmentos de reta sendo usado para tra¸ar e c cuma linha preta de um pixel de espessura, com inclina¸˜o entre 0 e 1, em um fundo branco. Em cada cacoluna de pixels interceptada pela linha o algoritmo seta a cor preta ao pixel que est´ mais perto do ponto aideal pertencente ` linha. A cada vez que se passa para a pr´xima coluna e o pixel mais pr´ximo da linha a o oideal ´ o que est´ a nordeste (NE), e n˜o ` leste (E), ocorre um “efeito escada”. O mesmo acontece em e a a aoutros tipos de primitivas. Uma forma de reduzir o problema (em termos visuais) ´ aumentar a resolu¸˜o e cado dispositivo (usar mais pixels) (ver Figura 3.14) . Esta ´ uma solu¸˜o cara em termos de mem´ria e ca oe tempo gasto no processo de convers˜o matricial, e que n˜o resolve o problema. Alternativas menos a acustosas s˜o descritas a seguir. aFigura 3.14: Segmento de reta renderizado com o algor´ ıtmo do ponto m´dio em diferentes escalas. (a) ´ e euma aplia¸˜o da regi˜o central de (b). ca a3.6.1 ´ Amostragem de Areas n˜o Ponderada aO fato ´ que, apesar da primitiva ideal, como um segmento de reta, ter espessura zero, a primitiva esendo tra¸ada tem espessura n˜o nula, pois ocupa uma ´rea finita da tela. Assim, podemos pensar em c a aum segmento de reta como um retˆngulo com uma certa espessura que cobre uma regi˜o da malha de a a 38
  • 40. pixels, como ilustrado na Figura 3.15. Conseq¨entemente, o melhor procedimento n˜o ´ atribuir o valor u a ecorrespondente a preto a um unico pixel em uma coluna, mas atribuir diferentes intensidades da cor a cada ´pixel interceptado pela ´rea coberta pelo retˆngulo que aproxima a linha, na coluna em quest˜o. Assim, a a alinhas horizontais ou verticais, cuja espessura ´ 1 pixel, afetam exatamente 1 pixel em uma coluna ou elinha. Para linhas com outras inclina¸˜es, mais do que 1 pixel ´ tra¸ado, cada qual com uma intensidade co e capropriada. Figura 3.15: Segmento de reta definido com uma espessura diferente de zero. Mas, qual ´ a geometria de um pixel? Qual o seu tamanho? Qual intensidade a atribuir a um e ´pixel interceptado pela linha? E computacionalmente simples assumir que os pixels definem uma malharegular de “quadrados” n˜o sobrepostos que recobre a tela, sendo que as intersec¸˜es da malha definem a coo posicionamento dos pixels, i.e., pixels s˜o tratados como “quadrados” com centro nas interse¸˜es da a comalha. Uma primitiva pode sobrepor toda ou parte da ´rea ocupada por um pixel. Assumimos tamb´m a eque a linha contribui para a intensidade do pixel segundo um valor proporcional ` porcentagem da ´rea do a apixel coberta por ela. Se a primitiva cobre toda a ´rea do pixel, ele recebe a intensidade m´xima (preto, a ano caso), se cobre parte o pixel recebe um tom de cinza cuja intensidade ´ proporcional ` ´rea coberta e aa(Figura 3.16). O efeito ´ “suavizar” a defini¸˜o da reta ou das arestas que definem a primitiva, melhorando e casua aparˆncia visual quando observada ` distˆncia. Essa estrat´gia ´ denominada amostragem por ´rea e a a e e an˜o ponderada (unweighted area sampling). Uma estrat´gia ainda mais eficiente ´ a amostragem por ´rea a e e aponderada (weighted area sampling). Figura 3.16: A intensidade do pixel ´ proporcional ` area coberta. e a ´Amostragem de Areas PonderadaNessa outra estrat´gia, assim como na anterior, valem duas propriedades: 1) a intensidade atribu´ ao e ıdapixel ´ diretamente proporcional ` ´rea do mesmo coberta pela primitiva; 2) se a primitiva n˜o intercepta e aa aa ´rea do pixel, ent˜o ela n˜o contribui nada para a cor do mesmo. A diferen¸a ´ que, na estrat´gia a a a c e eponderada, ao determinar a contribui¸˜o de uma ´rea considera-se, tamb´m, a sua proximidade em rela¸˜o ca a e caao centro do pixel. Assim, ´reas iguais podem contribuir de forma desigual: uma ´rea pequena pr´xima a a odo centro do pixel tem maior influˆncia do que uma ´rea grande a uma distˆncia maior. Entretanto, e a apara garantir que a primitiva contribui para um pixel apenas se ela sobrep˜e a ´rea ocupada pelo mesmo, o aprecisamos mudar a geometria do pixel da seguinte forma: vamos considerar que o pixel ocupa uma ´rea a 39
  • 41. circular maior do que a ´rea quadrangular considerada na situa¸˜o anterior. Se a primitiva sobrep˜e essa a ca onova ´rea, ela contribui para a intensidade do pixel. a Vamos definir uma fun¸˜o peso que determina a influˆncia, na intensidade do pixel, de uma ´rea ca e apequena da primitiva, denominada dA, em fun¸˜o da distˆncia de dA ao centro do pixel. No caso da ca aamostragem n˜o ponderada, essa fun¸˜o ´ constante, e no caso da amostragem ponderada, ela diminui a ca ede forma inversamente proporcional ` distˆncia em rela¸˜o ao centro do pixel. Podemos pensar nessa a a cafun¸˜o como uma fun¸˜o W (x, y), no plano, cuja altura em rela¸˜o ao plano xy d´ o peso associado ` ca ca ca a aa´rea dA no ponto (x, y). Para a amostragem por ´rea n˜o ponderada, essa fun¸˜o ´ representada por a a ca euma ’caixa’, como indicado na Figura 3.17. A figura mostra os pixels como quadrados cujos centros(marcados) est˜o nas intersec¸˜es da malha regular. A contribui¸˜o de cada pequena ´rea ´ proporcional a co ca a eaa` ´rea multiplicada pelo peso. Portanto, a intensidade total ´ dada pela integral da fun¸˜o peso sobre a e caa´rea de sobreposi¸˜o. O volume representado por essa integral, W s, ´ sempre uma fra¸˜o entre 0 e 1, e a ca e caintensidade I do pixel ´ dada por Imax.W s. No caso da amostragem n˜o ponderada a altura da ’caixa’ e a´ normalizada para 1, de forma que o volume da caixa ´ 1. No caso da ´rea da linha cobrir todo o pixel,e e atem-se I = Imax.1 = Imax. Figura 3.17: Filtro definido por um cubo para um pixel definido por um quadrado. Vamos agora construir uma fun¸˜o peso para a amostragem ponderada: a fun¸˜o adotada tem valor ca cam´ximo no centro do pixel e diminui linearmente a medida que a distˆncia ao centro aumenta, e seu a agr´fico define um cone, como indicado na Figura 3.18. A base do cone ´ uma circunferˆncia cujo centro a e ecoincide com o centro do pixel, e cujo raio corresponde a uma unidade da distˆncia entre os pixels na amalha. Note que as bases das fun¸˜es peso em diferentes pixels se sobrep˜em, e portanto uma unica co o ´pequena regi˜o da primitiva pode contribuir para a intensidade de diferentes pixels. Essa sobreposi¸˜o a catamb´m garante que n˜o existem ´reas da grade que n˜o s˜o cobertas por algum pixel (esse n˜o seria o e a a a a acaso se o raio da base fosse de meia unidade, por exemplo). Figura 3.18: Filtro cˆnico com diˆmetro igual ao dobro da largura de um pixel. o a Assim como na fun¸˜o ’caixa’, a soma das contribui¸˜es de intensidade para o cone ´ dada pelo ca co e 40
  • 42. volume sob o cone que est´ na regi˜o de interse¸˜o da primitiva com a base do cone. Esse volume, W s, a a ca´ uma se¸˜o vertical do cone, como mostrado na Figura 3.18. A altura do cone ´ normalizada para quee ca eo volume do mesmo seja igual a 1, garantindo que um pixel que est´ inteiramente sob a base do cone aseja tra¸ado com intensidade m´xima. Contribui¸˜es de ´reas da primitiva que interceptam a base mas c a co aest˜o distantes do centro do pixel s˜o pequenas, mas ´reas muito pequenas, por´m pr´ximas do centro a a a e odo pixel contribuem mais para a cor do mesmo. O resultado dessa abordagem ´ reduzir o contraste entre epixels adjacentes, de forma a gerar transi¸˜es visuais mais suaves. Particularmente, linhas horizontais coou verticais com espessura de um pixel agora resultam em mais do que uma unica linha ou coluna de ´pixels acesos, o que n˜o ocorre na abordagem n˜o ponderada. Essa abordagem pode ser embutida nos a aalgoritmos de convers˜o matricial, como descrito em Foley et al. [Fol90, se¸˜o 3.17.4]. Outros tipos de a cafun¸˜es podem ser usadas, sendo que existem fun¸˜es ´timas melhores do que a fun¸˜o cˆnica (v. Foley, co co o ca ose¸˜o 4.10). ca 41
  • 43. Cap´ ıtulo 4Preenchimento de Pol´ ıgonosA tarefa de preencher um pol´ ıgono pode ser dividida em duas: 1. Decidir que pixels pintar para preencher o pol´ ıgono; 2. Decidir com que valor pintar o pixel. Geralmente decidir que pixels devem ser pintados, consiste em se varrer (scan) sucessivas linhasque interceptam a primitiva, preenchendo os pixels em “blocos” (span) que est˜o dentro da primitiva a(que define o pol´ ıgono) da esquerda para a direita. Vamos considerar inicialmente o preenchimento deprimitivas gr´ficas n˜o “recortadas” (unclipped ) com uma unica cor. Em geral, a decis˜o sobre quais pixels a a ´ apreencher ´ feita “varrendo-se” (scan) linhas sucessivas que interceptam a primitiva, e preenchendo, da eesquerda para a direita, blocos de pixels adjacentes (spans) que est˜o dentro da primitiva que define o apol´ ıgono.4.1 Retˆngulos aPara preencher um retˆngulo com uma unica cor, pinta-se cada pixel dentro de uma linha de varredura a ´da esquerda para a direita com o mesmo valor de pixel, isto ´, pode-se preencher cada “bloco” de xmin ea xmax. As primitivas para blocos exploram a Coerˆncia Espacial: o fato que freq¨entemente n˜o h´ e u a aaltera¸˜o nas primitivas de um pixel para outro (pixels adjacentes) dentro de um bloco (span) ou de uma calinha de varredura para a pr´xima linha de varredura. Assim, podemos explorar a coerˆncia para buscar o eapenas os pixels em que ocorrem mudan¸as. Para um retˆngulo preenchido com a mesma cor, todos c aos pixels num bloco receber˜o um mesmo valor, o que garante coerˆncia de bloco (span coherence). O a eretˆngulo tamb´m exibe coerˆncia de linha de varredura (scan-line coherence), no sentido de que linhas a e ede varredura consecutivas que interceptam o retˆngulo s˜o idˆnticas. Posteriormente consideraremos a a etamb´m coerˆncia de arestas (edge coherence) para lados de pol´ e e ıgonos em geral. Coerˆncia ´ uma pro- e epriedade bastante explorada em CG, n˜o apenas para convers˜o matricial de primitivas 2D, mas tamb´m a a epara visualiza¸˜o de primitivas 3D. ca A capacidade de tratar v´rios pixels identicamente em um bloco (span) tem especial importˆncia a apara a diminui¸˜o de tempo gasto para gravar os pixels no Frame Buffer (mem´ria onde ´ armazenada ca o ea imagem). Assim, se em menos acessos a mem´ria pudermos escrever mais pixels estaremos ganhando otempo. Abaixo colocaremos um algoritmo para preencher um retˆngulo, sendo que nele n´s n˜o nos a o apreocuparemos em escrever eficientemente na mem´ria. Deixaremos isso para discuss˜o posterior. o a Para y = ymin at´ ymax do ret^ngulo { Por linha de varredura } e a Para x = xmin at´ xmax { Cada pixel dentro do bloco } e write_pixel (x,y,valor) Algoritmo 4.1: Trecho de Algoritmo para Preenchimento de Retˆngulo. a Consideremos agora dois retˆngulos que compartilham um mesmo lado. Se preenchermos cada aretˆngulo isoladamente, o lado (aresta) compartilhado pelos dois ser´ gerado duas vezes o que n˜o ´ a a a edesej´vel (perco tempo!). Aqui surge o problema de defini¸˜o de ´rea pertencente a cada primitiva, a ca aisto ´, quais os pixels que pertencem a cada primitiva e quais os pixels que n˜o pertencem. De forma e anatural, podemos definir os pixels que matematicamente se encontram no interior de uma ´rea definida apela primitiva, como pertencente a ela. Mas o que podemos falar acerca dos pixels que est˜o no limite ada primitiva? 42
  • 44. Se voltamos ao nosso problema do retˆngulo podemos adotar como uma regra que: os pixels que aconstituem os limites da primitiva, isto ´, os que est˜o sobre os seus lados, n˜o s˜o considerados parte e a a ada primitiva se o meio-plano definido pelo lado e que cont´m a primitiva est´ abaixo ou a esquerda do e alado. Ou, mais claramente, os pixels que est˜o sobre os lados (aresta) esquerdo e inferior pertencem a aprimitiva e ser˜o desenhados, por´m os lados superior e direito n˜o pertencem a primitiva e portanto n˜o a e a aser˜o desenhados. Assim, uma aresta vertical compartilhada por dois retˆngulos pertence ao lado que a aest´ mais a direita. Sendo que na realidade, blocos dentro de um retˆngulo representam uma intervalo a aque ´ fechado a esquerda e embaixo e aberto em cima e a direita. e Algumas considera¸˜es devem ser feitas sobre esta regra: co 1. A regra se aplica da mesma forma a pol´ ıgonos arbitr´rios e n˜o somente a retˆngulos. a a a 2. O v´rtice do canto inferior esquerdo ainda continua sendo desenhado duas vezes. e 3. A regra pode tamb´m ser aplicada para retˆngulos e pol´ e a ıgonos n˜o preenchidos. a 4. A regra faz com que em cada bloco esteja faltando o seu pixel mais a direita, e em cada retˆngulo a fique faltando o seu lado (aresta) superior. Os problemas apresentados nas considera¸˜es acima demonstram que n˜o h´ solu¸˜o perfeita para o co a a caproblema de n˜o escrever mais de uma vez linhas que sejam potencialmente compartilhadas por mais de aum pol´ ıgono.4.2 Pol´ ıgonos de Forma Arbitr´ria aO algoritmo que vamos discutir a seguir contempla tanto pol´ ıgonos cˆncavos quanto pol´ o ıgonos convexos,mesmo que eles tenham auto-intersec¸˜o e buracos em seu interior. Ele opera computando blocos de capixels que est˜o entre os lados esquerdo e direito do pol´ a ıgono. O extremo do bloco ´ calculado por um ealgoritmo incremental que calcula a linha de varredura/lado de intersec¸˜o a partir da intersec¸˜o com a ca calinha de varredura anterior.Figura 4.1: Esta figura ilustra o processo de linha de varredura para um pol´ ıgono arbitr´rio. As in- atersec¸˜es da linha de varredura 8 com os lados FA e CD possuem coordenadas inteiras, enquanto as cointersec¸˜es com os lados EF e DE possuem coordenadas reais. co ´ E preciso determinar que pixels da linha de varredura est˜o dentro do pol´ a ıgono, e estabelecer os pixelscorrespondentes (no exemplo da Figura 4.1, blocos para x = 2 at´ 4 e 9 at´ 13) com seu valor apropriado. e eRepetindo este processo para cada linha de varredura que intercepta o pol´ ıgono, o pol´ıgono inteiro ´econvertido. A Figura 4.2 ilustra este processo. Devemos nos preocupar com a defini¸˜o dos pontos extremos do pol´ ca ıgono. Uma forma de obtˆ-los ´ e eusar o algoritmo de convers˜o de linhas do “Ponto-M´dio” para cada lado do pol´ a e ıgono. Note que estaestrat´gia inclui alguns pixels no extremo do pol´ e ıgono que na realidade n˜o se encontram no pol´ a ıgono.Eles foram escolhidos pelo algoritmo de convers˜o matricial de linhas, e s˜o colocados sobre o lado porque a aest˜o mais pr´ximas a ele. a o N˜o podemos desenhar pixels que n˜o perten¸am verdadeiramente ao interior do pol´ a a c ıgono, pois po-demos estar invadindo o dom´ ınio de outro pol´ ıgono. Isto ´, se a linha em quest˜o define um extremo e a 43
  • 45. Figura 4.2: Linhas de varredura em um pol´ ıgno. Os extremos em preto, e os pixels no interior em cinza.(a) Extremo calculado pelo algoritmo do ”Meio-Ponto”. (b) Extremo interior ao pol´ıgno.que ´ compartilhado por outro pol´ e ıgono, estaremos entrando na regi˜o definida por ele. Assim, ´ ´bvio a eoque ´ prefer´ tra¸ar apenas os pixels que estejam estritamente na regi˜o definida pelo pol´ e ıvel c a ıgono, mesmoque um pixel exterior esteja mais pr´ximo a aresta real (pelo algoritmo de convers˜o (“Ponto-M´dio”)). o a eLogo, o algoritmo de convers˜o deve ser ajustado de acordo. Compare a Figura 4.2(a) com 2(b), e note aque os pixels fora da primitiva n˜o s˜o desenhados na parte (b). a a Com esta t´cnica, um pol´ e ıgono n˜o invade a regi˜o definida por outro - a mesma t´cnica pode ser a a eaplicada para pol´ıgonos n˜o preenchidos, por uma quest˜o de consistˆncia. Poder´ a a e ıamos, alternativamente,converter retˆngulos e pol´ a ıgonos n˜o cheios convertendo independentemente cada segmento de reta que aos comp˜e, mas nesse caso pol´ o ıgonos cheios e n˜o cheios n˜o teriam os mesmos pixels na fronteira! a a Como no algoritmo original do “Ponto-M´dio”, podemos usar um algoritmo incremental para calcular eo bloco (span) extremo sobre uma linha de varredura a partir da linha de varredura anterior, sem ter quecalcular analiticamente os pontos de intersec¸˜o da linha de varredura com os lados do pol´ ca ıgono. O processo de preencher os pol´ ıgonos pode ser dividido em trˆs passos: e 1. Obter a intersec¸˜o da linha de varredura com todos os lados do pol´ ca ıgono. 2. Ordenar os pontos de intersec¸˜o (em x crescente). ca 3. Preencher os pixels entre pares de pontos de intersec¸˜o do pol´ ca ıgono que s˜o internos a ele. Para a determinar quais os pares que s˜o internos ao pol´ a ıgono, podemos usar a regra de Paridade: A paridade inicialmente ´ par, e a cada intersec¸˜o encontrada o bit de paridade ´ invertido, o pixel e ca e ´ pintado quando a paridade ´ impar, e n˜o ´ pintado quando ´ par. e e a e e Vamos tratar dos dois primeiros passos do processo mais adiante, e consideremos agora a estrat´gia eusada para o preenchimento dos blocos (passo 3). Na Figura 4.1, a lista ordenada de coordenadas x ´ (2, e4.5, 8.5, 13) para a linha de varredura 8. H´ 4 pontos a serem discutidos sobre este passo: a I Se a intersec¸˜o ´ um valor fracion´rio, como determinar qual o pixel que dever´ ser ca e a a tomado para que fique interior ao pol´ ıgono? O valor dever´ ser arredondado de forma a que o ponto fique dentro do pol´ a ıgono. Se estamos dentro do pol´ıgono (paridade ´ ımpar) e atingimos uma intersec¸˜o fracion´ria pela direita, arredondamos ca a a coordenada x da intersec¸˜o para baixo; se estamos fora do pol´ ca ıgono arrendondamos para cima. Isso garante que sempre teremos um ponto dentro do pol´ ıgono. II Como tratar o caso de intersec¸˜o com coordenadas inteiras? ca Pode-se utilizar o crit´rio visto anteriormente, para evitar conflitos entre lados compartilhados em e retˆngulos. Se a coordenada x de um pixel mais a esquerda de um bloco (span) ´ inteira ele a e ´ definido como interno; se a coordenada x do pixel mais a direita de um bloco ´ inteira, ele ´ e e e definido como externo ao pol´ ıgono. III Como tratar o caso II para v´rtices que s˜o compartilhados por mais de uma aresta e a do pol´ ıgono? Usamos a t´cnica de paridade. Ou seja, contamos o v´rtice de ymin de um lado para alterar a e e paridade, mas n˜o contamos o v´rtice de ymax, dessa forma o v´rtice de ymax ´ desenhado somente a e e e 44
  • 46. se ele ´ o v´rtice de ymin do lado adjacente. Por exemplo, na Figura 4.1, o v´rtice A ´ contado uma e e e e vez no c´lculo de paridade porque ´ o v´rtice de ymin para o lado FA, mas ´ tamb´m o v´rtice de a e e e e e ymax para o lado AB. Assim ambos os lados e blocos s˜o tratados como intervalos que s˜o fechados a a em seu valor m´ ınimo e abertos em seu valor m´ximo. a IV Como tratar o caso especial de II em que os v´rtices definem uma linha horizontal? e Assim como no caso dos retˆngulos, arestas horizontais inferiores s˜o tra¸adas, e arestas horizontais a a c superiores n˜o s˜o. Como veremos, isso acontece automaticamente se n˜o contarmos os v´rtices a a a e dessas arestas no c´lculo da paridade, o que ´ natural, j´ que eles n˜o correspondem a v´rtices ymin a e a a e ou ymax. Ilustremos este processo, aplicando essas regras ` linha de varredura 8, na Figura 4.1. Os pixels aser˜o preenchidos a partir do ponto a (coordenadas (2, 8)), at´ o primeiro pixel a esquerda do ponto b a e(coordenadas (4, 8)); e do primeiro pixel a direita do ponto c (coordenadas (9, 8)) at´ 1 pixel a esquerda edo ponto d (coordenadas (12, 8)). Para a linha de varredura 3, o v´rtice A conta uma vez porque ´ o e ev´rtice de ymin do lado FA (e ´ tamb´m o v´rtice ymax do lado AB), isto causa paridade ´ e e e e ımpar, assim obloco ´ desenhado a partir de A at´ um pixel a esquerda da intersec¸˜o com o lado CB, onde a paridade e e ca´ estabelecida como par e o bloco ´ terminado. A linha de varredura 1 passa apenas pelo v´rtice B, ee e eos lados AB e BC tem como v´rtice de ymin B, o qual ´ dessa forma contado como paridade par. Este e ev´rtice atua como um bloco nulo, pois a linha de varredura entra pelo v´rtice, desenha o pixel e sai por e eele mesmo. Assim, um pixel m´ ınimo local ´ pintado, por´m pixel de m´ximo local n˜o o ´. Isso acontece e e a a ecom a intersec¸˜o da linha de varredura 9 com o v´rtice F, compartilhado pelos lados FA e EF. Para ca eambos os lados, B ´ v´rtice ymax, e dessa forma n˜o afeta a paridade, que continua par. e e a Figura 4.3: Tratamento dos lados horizontais de um pol´ ıgono.4.2.1 Arestas HorizontaisExaminemos os casos apresentados na Figura 4.3. Consideremos o lado AB (lado inferior). O v´rtice A e´ v´rtice ymin para o lado JA, e AB por ser horizontal n˜o possui m´e e a ınimo. Assim, a paridade ´ ´e ımpar(pela regra da paridade!) e o bloco (span) ´ desenhado. O lado vertical BC tem ymin em B, e pela emesma raz˜o anterior o lado AB n˜o contribui para alterar a paridade, assim a paridade torna-se par e o a abloco termina. O lado IJ tem v´rtice ymin em J (e em JA ele ´ m´ximo) assim a paridade torna-se ´ e e a ımpare o bloco ´ desenhado at´ o lado BC. O bloco que come¸a em IJ e encontra C, n˜o termina a´ porque e e c a ı,C ´ ymax para BC, assim o bloco continua sobre o lado CD (at´ D), no entanto DE tem ymin em D e e ea paridade torna-se par e o bloco termina. O lado IJ tem ymax em I e o lado HI n˜o contribui para a ac´lculo da paridade, assim a paridade continua e o bloco sobre o lado HI n˜o ´ desenhado. Entretanto, o a a elado GH tem v´rtice ymin em H, e a paridade torna-se ´ e ımpar, e o bloco ´ desenhado a partir de H at´ o e epixel a direita da intersec¸˜o da linha de varredura com o lado EF. Finalmente n˜o h´ v´rtice ymin em ca a a eG nem em F, e dessa forma o lado (que ´ o lado superior - topo) FG n˜o ´ desenhado. e a e ¸˜OBSERVACOES: • O algoritmo acima contempla pol´ ıgonos que possuem auto-intersec¸˜o. Mas n˜o desenha os pixels ca a das arestas superiores nem os das arestas ` direita, mesmo se a primitiva for isolada. a • N˜o desenha os pixels sobre o topo interno de um pol´ a ıgono cˆncavo em formato de U. o 45
  • 47. • N˜o desenha os pixels que s˜o pontos m´ximos locais. a a a • Neste algoritmo, em vez de escrever pixels em lugares errados, pixels n˜o s˜o escritos (mesmo em a a seus lugares certos!).4.2.2 SliversExiste um outro problema com o nosso algoritmo de convers˜o matricial: pol´ a ıgonos com lados muitopr´ximos criam um “sliver” - uma ´rea poligonal t˜o estreita que seu interior n˜o cont´m um bloco de o a a a epixels para cada linha de varredura (Figura 4.4). Devido ` regra de que s˜o tra¸ados apenas os pixels que a a cestejam no interior ou sobre arestas inferiores ou a esquerda, podem existir muitas linhas de varreduracom um unico pixel, ou sem nenhum. A ausˆncia de pixels ´ um outro exemplo do problema de aliasing, ´ e eou seja, da representa¸˜o de um sinal cont´ ca ınuo atrav´s de uma aproxima¸˜o discreta (digital). Para e camelhorar a aparˆncia nesses casos, pode-se usar t´cnicas de antialiasing (se tivermos m´ltiplos bits por e e upixel). Antialiasing implicaria em “suavizar” nossa regra de “tra¸ar apenas pixels que estejam no interior cou numa aresta inferior ou ` esquerda”, de forma a permitir que pixels na fronteira ou mesmo no exterior ado pol´ıgono assumam intensidades variando como uma fun¸˜o da distˆncia entre o centro do pixel e a ca aprimitiva. Nesse caso, m´ltiplas primitivas podem contribuir para o valor de um pixel. u Figura 4.4: Exemplo de uma convers˜o matricial de um Sliver a4.2.3 Algoritmo para Convers˜o Matricial de Segmento de Reta que Utiliza a “Coerˆncia de Arestas” de um Pol´ e ıgonoNo m´todo anterior us´vamos “for¸a bruta” para calcular a intersec¸˜o da linha de varredura com os e a c calados de um pol´ıgono. Mas, freq¨entemente, somente poucos lados de um pol´ u ıgono s˜o de interesse para auma dada linha de varredura. Al´m disso, notemos que muitos lados interceptados por uma linha de evarredura i tamb´m o s˜o pela linha de varredura i + 1. Esta “Coerˆncia de Arestas” ocorre para muitas e a elinhas de varreduras que interceptam um lado. Ao movermos de uma linha de varredura para a pr´xima, opodemos calcular o pr´ximo x da intersec¸˜o da linha de varredura com o lado, a partir do x da linha o cade varredura anterior que interceptou o lado. Usando a mesma t´cnica do algoritmo do “Ponto-M´dio”, e etemos: 1 xi+1 = xi + (4.1) m (ymax−ymin) onde m = (xmax−xmin) ´ a inclina¸ao da aresta. e c˜ No algoritmo do ponto-m´dio para convers˜o matricial de segmentos de reta, evitamos usar aritm´tica e a efracion´ria calculando uma vari´vel de decis˜o inteira, e verificando o seu sinal para escolher o pixel mais a a apr´ximo ` reta “verdadeira”. Aqui, tamb´m gostar´ o a e ıamos de usar aritm´tica inteira para calcular o pixel einterior mais pr´ximo da verdadeira intersec¸˜o. Consideremos arestas com inclina¸˜o maior que 1 que o ca cas˜o arestas a esquerda. Arestas a direita e outras inclina¸˜es s˜o tratadas com argumentos similares aos a co aque ser˜o vistos para esse caso, e arestas verticais s˜o casos especiais. (Arestas horizontais s˜o tratadas a a aimplicitamente pelas regras de tra¸ado de blocos, como vimos anteriormente.) c Precisamos tra¸ar um pixel no extremo (xmin, ymin). A medida que y ´ incrementado, a coordenada c e 1x do ponto na linha ideal ser´ aumentada de m . Este aumento resultar´ num valor de x com uma parte a ainteira e uma parte fracion´ria, a qual pode ser expressa como uma fra¸˜o com denominador igual a a ca 46
  • 48. ymax − ymin. Com a repeti¸˜o do processo, a parte fracion´ria vai se tornar maior do que 1 (overflow ), ca ae a parte inteira ter´ de ser incrementada. Por exemplo, se a inclina¸˜o ´ 5 , e xmin ´ 3, a seq¨ˆncia de a ca e 2 e uevalores de x ser´ a3, 3 5 , 3 4 , 3 6 = 4 5 2 5 5 1 e assim por diante. Quando a parte fracion´ria de x ´ zero, podemos tra¸ar diretamente o pixel (x, y) a e cque est´ sobre a linha, mas quando ela ´ diferente de zero precisamos arredondar (para cima!) de forma a a etomar um pixel que esteja estritamente dentro da linha. Quando a parte fracion´ria de x torna-se maior ado que 1, incrementamos x, subtraimos 1 da parte fracion´ria, e movemos um pixel a direita. Se com o aincremento obtemos um valor inteiro para x, tra¸amos o pixel correspondente e decrementamos a fra¸˜o c cade 1, de forma a mantˆ-la menor do que 1. e Podemos evitar o uso de aritm´tica fracion´ria mantendo apenas o numerador da fra¸˜o, e observando e a caque a parte fracion´ria ser´ maior do que 1 quando o numerador tornar-se maior que o denominador. a aO algoritmo abaixo implementa esta t´cnica, usando a vari´vel incremento para armazenar as sucessivas e aadi¸˜es feitas no numerador at´ que ocorra um overflow (ultrapasse o denominador), quando o numerador co e´ decrementado pelo denominador, e x ´ incrementado.e e void LeftEdgeScan (int xmin, int ymin, int xmax, int ymax, int valor){ int x, y; x = xmin; y = ymin; numerador = xmax - xmin; denominador = ymax - ymin; incremento = denominador; for (y = ymin; y <= ymax; y++){ PintaPixel (x,y,valor); incremento+=numerador; if (incremento > denominador){ /* Overflow, Arredonda o pr´ximo pixel e decrementa o incremento */ o x++; incremento-=denominador; }/* end if */ }/* end for */ }/* end LeftEdgeScan */ Algoritmo 4.2: Convers˜o matricial da aresta esquerda de um pol´ a ıgono. Vamos desenvolver um algoritmo de convers˜o matricial de linhas que se aproveita da coerˆncia a ede arestas e, para cada linha de varredura, armazena o conjunto de arestas por ela interceptadas numaestrutura de dados denominada AET - active-edge table (tabela das arestas ativas). As arestas na AET s˜o aordenadas de acordo com as coordenadas x dos pontos de intersec¸˜o, de forma que possamos preencher caos blocos definidos por pares de valores de intersec¸˜o (devidamente arredondados) - que definem as caextremidades dos blocos. A medida que movemos para a pr´xima linha de varredura, y +1, a AET ´ atualizada. Primeiramente, o earestas que est˜o na AET mas n˜o s˜o interceptadas por esta pr´xima linha de varredura (ou seja, aquelas a a a opara as quais ymax = y) s˜o removidas. Depois, quaisquer novas arestas interceptadas por essa linha (ou aseja, aquelas para as quais ymin = y + 1) s˜o incluidas na AET. Finalmente, para as arestas que ainda aest˜o na AET, os novos valores de x das intersec¸˜es s˜o calculados, usando o algoritmo incremental para a co aconvers˜o matricial de arestas j´ visto. a a Para que a inclus˜o de novas arestas na AET seja eficiente, criamos uma tabela de arestas global a(ET - Edge Table), contendo todas as arestas do pol´ ıgono em ordem crescente de sua menor coordenaday (ymin). A ET ´ uma tabela hashing aberta (v. Aho, Data Structures and Algorithms), com p eposi¸˜es (buckets, ou ”cestos”), uma para cada linha de varredura. A cada ”cesto”y ´ associada uma lista co eencadeada com as arestas com ymin = y. As arestas na lista est˜o ordenadas em ordem crescente da acoordenada x de sua extremidade inferior (xmin). Cada n´ da lista armazena ainda a coordenada ymax o 1da aresta, e o incremento em x utilizado para passar para a pr´xima linha de varredura, m . A Figura o4.5 mostra como estariam ordenadas as seis arestas do pol´ ıgono da Figura 4.1, e a Figura 4.6 mostra a 47
  • 49. AET para as linhas de varredura 9 e 10 daquele pol´ıgono. Uma vez constru´ a ET, os passos para o ıdaalgoritmo de convers˜o de arestas s˜o dados no Algoritmo 4.3. a a Este algoritmo explora coerˆncia de arestas para calcular o valor x das intersec¸˜es e coerˆncia e co ede linhas de varredura (juntamente com ordena¸˜o) para calcular blocos. Uma vez que a ordena¸˜o ca catrabalha com um n´mero pequeno de arestas, e a reordena¸˜o do passo 3.6 ´ feita numa lista quase que u ca etotalmente ordenada, pode-se usar um m´todo de ordena¸˜o por inser¸˜o, ou o m´todo bubblesort, que ´ e ca ca e eO(N ). Figura 4.5: ET para o pol´ ıgono de Figura 4.1. Para efeito de convers˜o matricial, triˆngulos e trapez´ides podem ser tratados como casos especiais a a ode pol´ ıgonos, uma vez que possuem apenas dois lados para cada linha de varredura (lembre-se que ladoshorizontais n˜o s˜o convertidos explicitamente). Na verdade, como um pol´ a a ıgono arbitr´rio sempre pode aser decomposto numa malha de triˆngulos que compartilham v´rtices e arestas, poder´ a e ıamos converterum pol´ ıgono decompondo-o numa malha de triˆngulos, convertendo os triˆngulos a seguir. Este ´ um a a eproblema cl´ssico da geometria computacional, o da triangula¸˜o. O processo de decomposi¸˜o ´ simples a ca ca epara pol´ıgonos convexos.Figura 4.6: AET para o pol´ıgono da Figura 4.1 a) linha de varredura 9 b) linha de varredura 10. Noteque a coordenada x da aresta DE em (b) foi arredondada para cima.. Note que o c´lculo dos blocos ´ cumulativo. Ou seja, quando a itera¸˜o corrente do algoritmo de a e caconvers˜o de arestas gera um ou mais pixels na mesma linha de varredura que os pixels gerados an- ateriormente, os blocos devem ser atualizados se um novo pixel tem um valor de x m´ximo ou m´ a ınimomais extremo. Tratar casos de c´lculo de blocos para arestas que se cruzam, ou para slivers requer um atratamento especial. Podemos calcular os blocos num passo, e preechˆ-los num segundo passo, ou calcu- elar um bloco e preenchˆ-lo num unico passo. Outra vantagem de se utilizar blocos ´ que o processo de e ´ eclipping pode ser feito simultaneamente ao c´lculo dos blocos: os blocos podem ser recortados (clipped ) aindividualmente nas coordenadas esquerda e direita do retˆngulo de corte. a 48
  • 50. 1. Obt´m a menor coordenada y armazenada na ET; ou seja, o valor de y do primeiro “cesto” e n˜o vazio. a2. Inicializa a AET como vazia.3. Repita at´ que a ET e a AET estejam vazias: e 3.1. Transfere do cesto y na ET para a AET as arestas cujo ymin = y (lados que est˜o a come¸ando a serem varridos), mantendo a AET ordenada em x, c 3.2. Retira os lados que possuem y = ymax (lados n˜o mais envolvidos nesta linha de a varredura, 3.3. Desenhe os pixels do bloco na linha de varredura y usando pares de coordenadas x da AET. 3.4. Incremente y de 1 (coordenada da pr´xima linha de varredura). o 3.5. Para cada aresta n˜o vertical que permanece na AET, atualiza x para o novo y. a 3.6. Como o passo anterior pode ter desordenado a AET, reordena a AET.Algoritmo 4.3: Algoritmo de convers˜o de arestas baseado na coerˆncia de arestas. a e 49
  • 51. Cap´ ıtulo 5Transforma¸˜es 2D e 3D coTransforma¸˜es Geom´tricas (TG) s˜o a base de in´meras aplica¸˜es gr´ficas, podendo estar desde em co e a u co asimples programas para representar layouts de circuitos eletrˆnicos; em programas de planejamento de ocidades, onde pode-se usar movimentos de transla¸˜o para colocar os s´ ca ımbolos que definem edif´ ıcios ea´rvores em seus devidos lugares, rota¸˜es para orientar corretamente esses s´ co ımbolos, e altera¸˜o de escala capara adequar o tamanho desses s´ ımbolos; ou mesmo em sistemas de software sofisticados que permitema constru¸˜o de cenas realistas. ca5.1 Transforma¸˜es em 2D coPrimeiramente estudaremos as transforma¸˜es Geom´tricas em duas dimens˜es. Pode-se efetuar a Transla¸˜o co e o cade pontos no plano (x, y) adicionando-se quantidades inteiras as suas coordenadas. Assim, cada pontoP (x, y) pode ser movido por dx unidades em rela¸˜o ao eixo x, e por dy unidades em rela¸˜o ao eixo y. ca caLogo, o ponto P (x , y ), pode ser escrito como: x = x + dx y = y + dy (5.1) E se definimos os vetores colunas: x P = y x P = y dx T = (5.2) dyent˜o a transla¸˜o, expressa pela Equa¸˜es , pode ser definida como: a ca co P =P +T (5.3) Podemos transladar um objeto, fazendo-o a todos os seus pontos (o que n˜o ´ muito eficiente). Para a etransladar uma linha podemos fazˆ-lo apenas para seus pontos limites e sobre estes pontos redesenhar a elinha. Isso tamb´m ´ verdade para altera¸˜es de Escala e Rota¸˜o. Na Figura 5.1 ´ mostrado o efeito de e e co ca euma transla¸˜o de um objeto por (3, −4). ca Pode-se efetuar Mudan¸as de Escala (ou apenas Escala) de um ponto pelo eixo x (sx), ou pelo eixo y c(sy), atrav´s das multiplica¸˜es: e co x = sx .x y = sy .y (5.4) Ou em forma matricial: x sx 0 x P =S·P ⇒ = · (5.5) y 0 sy y 50
  • 52. Figura 5.1: Transla¸˜o de uma casa. caFigura 5.2: Mudan¸a de escala de uma casa. Como a escala ´ n˜o uniforme, sua propor¸˜o ´ alterada. c e a ca e Na figura 5.2 a casa sofre uma escala de 1 em x e de 1 em y. 2 4 Observe que a escala ´ feita em rela¸˜o a origem. Assim a casa fica menor e mais pr´xima da origem. e ca oTamb´m as propor¸˜es da casa s˜o alteradas, isto ´, uma escala em que sx ´ diferente de sy . Por´m ao e co a e e eutilizar-se escalas uniformes (sx = sy ) as propor¸˜es n˜o s˜o afetadas. co a a A Rota¸˜o de pontos atrav´s de um ˆngulo θ qualquer tamb´m ´ feita a partir da origem. A rota¸˜o ca e a e e ca´ definida matematicamente por:e x = x. cos(θ) − y. sin(θ) y = x. sin(θ) + y. cos(θ) (5.6)e matricialmente: x cos θ − sin θ x P =R·P ⇒ = · (5.7) y sin θ cos θ y Escala e Rota¸˜o a partir de qualquer ponto ser˜o tratadas posteriormente. ca a Os ˆngulos positivos s˜o definidos quando a rota¸˜o ´ feita no sentido contr´rio aos do ponteiro do a a ca e arel´gio, e ˆngulos negativos quando a rota¸˜o ´ feita no sentido dos ponteiros do rel´gio. Lembremos que o a ca e osin(−θ) = − sin(θ) e que cos(−θ) = cos(θ). Observando a Figura 5.4 vemos que a rota¸˜o por θ transforma P (x, y) em P (x , y ). Como a rota¸˜o ca ca´ em rela¸˜o a origem, as distˆncias de P e P a origem, r na figura, s˜o iguais. Assim, temos que:e ca a a x = r. cos(φ) y = r. sin(φ) (5.8) x = r · cos(θ + φ) = r. cos(φ). cos(θ) − r. sin(φ) sin(θ) y = r · sin(θ + φ) = r cos(φ) sin(θ) + r. sin(φ). cos(θ) (5.9) Podemos obter a Equa¸˜o 5.6, substituindo a Equa¸˜o 5.8 na Equa¸˜o 5.9. ca ca ca 51
  • 53. Figura 5.3: Esta figura mostra a rota¸ao da casa por 45◦ . Da mesma forma que para a escala, a rota¸˜o c˜ catamb´m ´ feita em rela¸˜o a origem. e e ca Figura 5.4: Derivando a equa¸˜o de rota¸˜o. ca ca5.2 Coordenadas Homogˆneas e Matrizes de Transforma¸˜o e caPara a Transla¸˜o, Escala e Rota¸˜o, as matrizes de transforma¸˜o s˜o respectivamente: ca ca ca a P =T +P (5.10) P =S·P (5.11) P =R·P (5.12) Infelizmente, a transla¸˜o ´ tratada de forma diferente (como uma soma) das outras - Rota¸˜o e ca e caEscala - que s˜o tratadas atrav´s de multiplica¸˜es. Para que possamos combinar facilmente essas trans- a e coforma¸˜es, devemos poder tratar do mesmo modo todas as 3 transforma¸˜es de uma forma consistente. co co Se os pontos s˜o expressos em Coordenadas Homogˆneas, todas as 3 transforma¸˜es podem ser tra- a e cotadas como multiplica¸˜es. co Em coordenadas homogˆneas, adicionamos uma terceira coordenada ao ponto. Logo, em vez de eum ponto ser representado por um par de valores (x, y), ele ´ representado por uma tripla (x, y, W ). eDizemos que 2 conjuntos de coordenadas homogˆneas (x, y, W ) e (x , y , W ) representam o mesmo ponto ese e somente se um ´ m´ltiplo do outro. Assim, (2, 3, 6) e (4, 6, 12) ´ o mesmo ponto representado por e u ediferentes triplas. Isto ´, cada ponto tem muitas diferentes representa¸˜es homogˆneas. Tamb´m, pelo e co e emenos uma das coordenadas homogˆneas precisa ser diferente de zero, assim (0, 0, 0) n˜o ´ permitido. e a e x y Se W ´ a coordenada n˜o zero, podemos dividir (x, y, W ) por ela, obtendo o mesmo ponto ( W , W , 1). e a x yOs n´meros W e W s˜o chamados de Coordenadas Cartesianas do ponto homogˆneo. Usualmente, triplas u a erepresentam pontos em um espa¸o 3D, mas agora est˜o sendo usadas para representar pontos em 2D. c aObservemos que, se tomarmos todas as triplas que representam o mesmo ponto, isto ´, todas as triplas eda forma (tx, ty, tW ) com t diferente de 0, obtemos uma linha no espa¸o 3D. Se homogeneizamos o ponto c(dividimos por W ), obtemos um ponto da forma (x, y, 1). Logo, os pontos homogeneizados formam oplano definido pela equa¸˜o W = 1 no espa¸o (x, y, W ). A Figura 5.5, mostra esse relacionamento. Como ca cagora os pontos s˜o vetores de 3 elementos, as matrizes de transforma¸˜es que multiplicam um ponto por a cooutro tamb´m precisam ser de 3x3. A equa¸˜o de Transla¸˜o 5.1 para coordenadas homogˆneas fica: e ca ca e 52
  • 54. Figura 5.5: O espa¸o de Coordenadas Homogˆneas XY W , com o plano W = 1 e o ponto P (X, Y, W ) c eprojetado sobre o plano W = 1.       x 1 0 dx x  y  =  0 1 dy  ·  y  (5.13) 1 0 0 1 1 Assim, a equa¸˜o 5.13 pode ser representada como: ca P = T (dx , dy ) · P (5.14)onde:   1 0 dx T (dx , dy ) =  0 1 dy  (5.15) 0 0 1 O que acontece se um ponto P ´ transladado por T (dx1 , dy1 ) para P’ e ent˜o transladado por e aT (dx2 , dy2 ) para P ? Intuitivamente esperamos que essas transla¸˜es sejam equivalentes a T (dx1 + dx2 , dy1 + dy2 ). Ou seja, cose: P = T (dx1 , dy1 ) · P (5.16) P = T (dx2 , dy2 ) · P (5.17) (5.18) Substituindo 5.17 em 5.18, temos: P = T (dx2 , dy2 ) · [T (dx1 , dy1 ) · P ] = [T (dx2 , dy2 ) · T (dx1 , dy1 )] · P (5.19)e a matriz produto das matrizes T (dx2 , dy2 ) · T (dx1 , dy1 ), ´: e       1 0 dx2 1 0 dx1 1 0 dx1 + dx2  0 1 dy2  ·  0 1 dy1  =  0 1 dy1 + dy2  (5.20) 0 0 1 0 0 1 0 0 1e vemos que a Transla¸˜o ´ aditiva. ca e Essa transforma¸˜o expressa pelas duas transforma¸˜es, ´ chamada de Transforma¸˜o de Composi¸˜o. ca co e ca caPodemos mostrar similarmente que podemos realizar Composi¸˜es tamb´m com a Escala e a Rota¸˜o. co e caAssim, as equa¸˜es de Escala 5.4, s˜o representadas matricialmente: co a 53
  • 55.       x sx 0 0 x y  =  0 sy 0 · y  (5.21) 1 0 0 1 1e definindo,   sx 0 0 S(sx , sy ) =  0 sy 0 (5.22) 0 0 1temos P = S(sx1 , sy1 ) · P (5.23) P = S(sx2 , sy2 ) · P (5.24)e substituindo: P = S(sx2 , sy2 ) · [S(sx1 , sy1 ) · P ] = [S(sx2 , sy2 ).S(sx1 , sy1 )] · P (5.25) A matriz produto S(sx2 , sy2 ) · S(sx1 , sy1 ) ´: e       sx2 0 0 sx1 0 0 sx1 .sx2 0 0  0 sy2 0  ·  0 sy1 0 =  0 sy1 .sy2 0 (5.26) 0 0 1 0 0 1 0 0 1e temos que a Escala ´ multiplicativa. e Finalmente, verifiquemos como ficam as equa¸˜es de rota¸˜o: co ca       x cos θ − sin θ 0 x  y  =  sin θ cos θ 0 · y  (5.27) 1 0 0 1 1 Definindo:   cos θ − sin θ 0 R(θ) =  sin θ cos θ 0 (5.28) 0 0 1temos que: P = R(θ) · P (5.29) Como exerc´ ıcio, mostre que duas rota¸˜es s˜o aditivas! co aFigura 5.6: Um cubo unit´rio ´ rodados 45 graus, posteriormente escalado n˜o uniformemente. Obtem-se a e adessa forma uma transforma¸˜o afim. ca 54
  • 56. Uma sequˆncia arbitr´ria de rota¸oes, transla¸˜es e escalas, s˜o chamadas de transforma¸˜es afins. e a c˜ co a coAs Transforma¸˜es Afins preservam paralelismo de linhas, mas n˜o comprimentos e ˆngulos. A figura co a a5.6, mostra o resultado de se aplicar uma rota¸˜o de 45◦ e depois uma escala n˜o uniforme a um cubo ca aunit´rio. a Uma matriz de transforma¸˜o da forma: ca   r11 r12 tx M =  r21 r22 ty  (5.30) 0 0 1onde a submatriz 2x2 do canto superior esquerdo ´ ortogonal, preserva ˆngulos e comprimentos. Estas e atransforma¸˜es s˜o chamadas de Corpo R´ co a ıgido, porque o corpo do objeto n˜o ´ distorcido de forma a ealguma.5.3 Transforma¸˜es 2D Adicionais: Espelhamento e Shearing coDuas transforma¸˜es adicionais bastante usadas em CG s˜o o Espelhamento (Reflex˜o) e Distor¸˜o co a a ca(Shearing), discutidas a seguir.5.3.1 Espelhamento (Mirror)A transforma¸˜o de reflex˜o, ou espelhamento, aplicada a um objeto, produz um objeto que ´ o espelho do ca a eoriginal. No caso de uma reflex˜o 2D, o espelho ´ gerado relativamente a um eixo de reflex˜o rotacionando a e ao objeto de 180o em torno do eixo de reflex˜o. Por exemplo, pode-se aplicar uma reflex˜o em torno da a alinha y = 0 (o eixo x) usando a seguinte matriz de transforma¸˜o: ca   1 0 0 M irrorv =  0 −1 0 (5.31) 0 0 1 Esta transforma¸˜o mant´m as coordenadas x do objeto inalteradas, mas “inverte” os valores das ca ecoordenadas y, alterando a orienta¸˜o espacial do objeto. ca Analogamente, poder´ ıamos definir uma reflex˜o em torno do eixo y, que “inverteria” as coordenadas ax do objeto. Figura 5.7: Reflex˜o de um objeto em torno do eixo x. a Podemos tamb´m definir uma reflex˜o em torno de um eixo perpendicular ao plano xy e passando e a(por exemplo) pela origem do sistema de coordenadas, “invertendo” nesse caso ambas as coordenadas xe y. A matriz de transforma¸˜o ´ dada por: ca e   −1 0 0 M irrorxy =  0 −1 0  (5.32) 0 0 1 55
  • 57. A opera¸˜o ´ ilustrada na figura 5.8. Observe que a matriz de reflex˜o acima ´ idˆntica ` matriz de ca e a e e arota¸˜o R(θ) com θ = 180o , ou seja, estamos t˜o somente rotacionando o objeto de 180o em torno da ca aorigem. A opera¸˜o pode ser generalizada para adotar qualquer ponto de reflex˜o localizado no plano ca axy, e o efeito ´ o mesmo que aplicar uma rota¸˜o de 180o em torno do ponto pivˆ da reflex˜o. e ca o aFigura 5.8: Reflex˜o de um objeto em torno de um eixo perpendicular ao plano xy, passando pela origem. a Podemos tamb´m adotar um eixo de reflex˜o arbitr´rio. A matriz de reflex˜o pode ser derivada pela e a a aconcatena¸˜o de uma seq¨ˆncia de matrizes de reflex˜o e de rota¸˜o. Por exemplo, se a reflex˜o for em ca ue a ca atorno da linha diagonal definida por y = x, a matriz de reflex˜o pode ser derivada da combina¸˜o da a caseguinte seq¨ˆncia de transforma¸˜es: ue co 1. rota¸˜o de 45o na dire¸˜o hor´ria para fazer a linha y = x coincidir com o eixo x. ca ca a 2. reflex˜o em torno do eixo x. a 3. rota¸˜o de 45o na dire¸˜o anti-hor´ria para retomar a orienta¸˜o original da linha y = x. ca ca a ca5.3.2 ShearingShearing (cisalhamento) ´ uma transforma¸˜o que distorce o formato de um objeto - em geral, ´ aplicado e ca eum deslocamento aos valores das coordenadas x ou das coordenadas y do objeto. Uma distor¸˜o na cadire¸˜o x ´ produzida com a seguinte matriz de transforma¸˜o: ca e ca   1 shx 0 Shearx =  0 1 0 (5.33) 0 0 1 As coordenadas do objeto s˜o transformadas da seguinte maneira: a x = x + shx y y =y (5.34) Qualquer n´mero real pode ser usado como parˆmetro. O resultado ´ que as coordenadas (x, y) s˜o u a e adeslocadas horizontalmente segundo um valor proporcional ` sua distˆncia em do eixo x. Por exem- a aplo, se shx ´ 2, um quadrado ser´ transformado em um paralelogramo. Valores negativos deslocam as e acoordenadas para a esquerda. Pode-se gerar distor¸˜es na dire¸˜o relativamente a outros eixos de referˆncia y = yref com a matriz: co ca e   1 shx −shx .yref Shearyref = 0 1 0  (5.35) 0 0 1que produz as seguintes transforma¸˜es sobre as coordenadas: co 56
  • 58. x = x + shx (y − yref ) y =y (5.36) Analogamente, pode-se aplicar uma distor¸˜o na dire¸˜o y, relativa a uma linha x = xref, usando ca ca   1 0 0 Shearxref =  shy 1 −shy .xref  (5.37) 0 0 1 que gera as seguintes transforma¸˜es nas posi¸˜es das coordenadas: co co x =x y = y + shy .(x − xref ). (5.38) Esta transforma¸˜o desloca as coordenadas de uma posi¸˜o verticalmente segundo um fator propor- ca cacional ` sua distˆncia da linha de referˆncia x = xref . Qualquer opera¸˜o de distor¸˜o pode ser descrita a a e ca cacomo uma composi¸˜o de transforma¸oes envolvendo uma seq¨ˆncia de matrizes de rota¸˜o e escala. ca c˜ ue ca5.4 Transforma¸˜es entre sistemas de coordenadas coJ´ vimos que aplica¸˜es gr´ficas freq¨entemente requerem a transforma¸˜o de descri¸˜es de objetos de um a co a u ca cosistema de coordenadas para outro. Muitas vezes, o objeto ´ descrito em um sistema de coordenadas n˜o e aCartesiano (como coordenadas polares ou el´ ıpticas), e precisa ser convertido para o sistema de coordenadasCartesiano do dispositivo. Em aplica¸˜es de design e modelagem, objetos individuais s˜o definidos em co aseu pr´prio sistema de coordenadas, e as coordenadas locais devem ser transformadas para posicionar oos objetos no sistema de coordenadas global da cena. Neste texto vamos considerar especificamentetransforma¸˜es entre dois sistemas de coordenadas Cartesianos. co Para transformar descri¸˜es de um objeto dadas em um sistema de coordenadas xy para um sistema cox y com origens em (0, 0) e (x0 , y0 ), com um ˆngulo de orienta¸˜o θ entre os eixos x e x , precisamos a cadeterminar a transforma¸˜o que superp˜e os eixos xy aos eixos x y . Isso pode ser feito em 2 passos: ca o 1. transladar o sistema x y de modo que sua origem coincida com a origem do sistema xy: T (−x0 , −y0 ) 2. Rotacionar o eixo x de forma que ele coincida com o eixo x: R(−θ) Concatenando as duas matrizes de transforma¸˜o obt´m-se a matriz de composi¸˜o que descreve a ca e catransforma¸˜o necess´ria: ca a Mxy,x y = R(−θ) · T (−x0 , −y0 ) (5.39) Um m´todo alternativo para estabelecer a orienta¸˜o do segundo sistema de coordenadas consiste em e caespecificar um vetor V na dire¸˜o positiva do eixo y , passando pela origem do sistema xy. O vetor V ´ ca eespecificado como um ponto no sistema de referˆncia xy em rela¸˜o ` origem do sistema xy. Um vetor e ca aunit´rio que d´ a dire¸˜o de y pode ent˜o ser obtido: a a ca a V v= = (vx , vy ) (5.40) |V | E obtemos o vetor unit´rio u ao longo do eixo x rotacionando v de 90o no sentido hor´rio: a a u = (vy , −vx ) = (ux , uy ) (5.41) J´ vimos que os elementos de uma matriz de rota¸˜o podem ser expressos como elementos de um a caconjunto de vetores ortogonais. Portanto, a matriz de rota¸˜o a ser usada para rotacionar o sistema x y capara que este coincida com o sistema xy ´ dada por: e 57
  • 59.   ux uy 0 R =  vx vy 0 (5.42) 0 0 1 Por exemplo, se escolhermos que a nova orienta¸˜o deve ser dada pelos vetores U = (0, 1) (eixo y capositivo no sistema atual) e V = (−1, 0) (eixo x negativo no sistema atual), a matriz de rota¸˜o ´ dada ca epor:   0 1 0 R =  −1 0 0 (5.43) 0 0 1 Essa matriz ´ equivalente ` matriz de rota¸˜o para θ = 90o e a ca5.5 Composi¸˜o de Transforma¸˜es ca coUsaremos composi¸˜o como uma combina¸˜o de matrizes de transforma¸˜o R, S e T. O prop´sito de ca ca ca ocompor-se transforma¸˜es, ´ o ganho de eficiˆncia que se obt´m ao aplicar-se uma transforma¸˜o composta co e e e caa um ponto em vez de aplicar-lhe uma s´rie de transforma¸˜es, uma ap´s a outra. e co o Considerando a rota¸˜o de um objeto em torno de um ponto arbitr´rio P 1. Mas sabemos apenas ca arotacionar um ponto em rela¸˜o a origem. Assim, podemos dividir este problema de rota¸˜o em 3 ca caproblemas simples, ou seja: para rotacionar em rela¸˜o a P 1, pode-se usar a seguinte sequˆncia de ca etransforma¸˜es fundamentais: co 1. Efetuar uma transla¸˜o, levando P 1 ` origem. ca a 2. Efetuar a Rota¸˜o desejada. ca 3. Efetuar uma Transla¸˜o oposta ` realizada em (1), levando P 1 a posi¸˜o anterior. ca a ca Figura 5.9: Rota¸˜o em rela¸˜o ao Ponto P 1, por um ˆngulo θ. ca ca a Esta sequˆncia ´ ilustrada na figura 5.9, onde a casa ´ rotacionada em rela¸˜o a P1 (x1 , y1 ). A primeira e e e catransla¸˜o ´ por (−x1 , −y1 ), e a ultima transla¸˜o (oposta a primeira) ´ por (x1 , y1 ). A transforma¸˜o ca e ´ ca e caem sequˆncia ´: e e       1 0 x1 cos θ − sin θ 0 1 0 −x1 T (x1 , y1 ) · R(θ) · T (x1 , y1 ) =  0 1 y1  ·  sin θ cos θ 0  ·  0 1 −y1  = 0 0 1 0 0 1 0 0 1   cos θ − sin θ x1 (1 − cos θ) + y1 . sin θ  sin θ cos θ y1 (1 − cos θ) + x1 . sin θ  (5.44) 0 0 1 Esse procedimento pode ser usado de forma similar para se efetuar a Escala de um objeto em rela¸˜o caa um ponto arbitr´rio P1 . Primeiramente o ponto P1 ´ transladado para a origem, ent˜o ´ feita a escala a e a edesejada, e ent˜o o ponto P1 ´ transladado de volta. Dessa forma, a transforma¸˜o em seq¨ˆncia ´: a e ca ue e 58
  • 60.       1 0 x1 sx 0 0 1 0 −x1 T (x1 , y1 ) · S(sx , sy ) · T (x1 , y1 ) =  0 1 y1  ·  0 sy 0  ·  0 1 −y1  = 0 0 1 0 0 1 0 0 1   sx 0 x1 (1 − sx )  0 sy y1 (1 − sy )  (5.45) 0 0 1 Suponhamos que desejamos escalar, rotacionar e posicionar a casa mostrada na figura 5.10, com oponto P 1(x1 , y1 ) como o centro da rota¸˜o e da escala. A seq¨ˆncia de transforma¸˜es fica a seguinte: ca ue co 1. Transladar P 1(x1 , y1 ) para a origem; 2. Efetuar a escala e a rota¸˜o desejadas; ca 3. Efetuar a transla¸˜o da origem para a nova posi¸˜o P 2(x2 , y2 ), onde a casa deve ser posicionada. ca ca T (x2 , y2 ) · R(θ) · S(sx , sy ) · T (−x1 , −y1 ) ´ a matriz da Transforma¸˜o composta. e ca Figura 5.10: Escala e rota¸˜o de uma casa em rela¸˜o ao ponto P1 . ca ca Se M 1 e M 2 representam duas transforma¸˜es fundamentais (transla¸˜o, rota¸˜o ou escala), em que co ca cacasos M 1 · M 2 = M 2 · M 1? Isto ´, quando suas matrizes de transforma¸˜o comutam? Sabemos que e cageralmente a multiplica¸˜o de matrizes n˜o ´ comutativa. Entretanto ´ f´cil mostrar que nos seguintes ca a e e acasos especiais esta comutatividade existe (Tabela 5.1). m1 M2 Transla¸˜o ca Transla¸˜o ca Escala Escala Rota¸˜o ca Rota¸˜o ca Escala(s, s) Rota¸˜o ca Tabela 5.1: Transforma¸˜es comutativas. co Nestes casos n˜o precisamos estar atentos a ordem de constru¸˜o da matriz de transforma¸˜o. a ca ca5.6 Transforma¸˜o Janela - Porta de Vis˜o (“Window-to-Viewport”) ca aAlguns sistemas gr´ficos permitem ao programador especificar primitivas de sa´ em um sistema de a ıdacoordenadas em ponto-flutuante, chamado de sistema de coordenadas do Mundo Real, usando a unidadede medida que melhor se adeque ao seu programa de aplica¸˜o (angstrons, microns, metros, anos-luz, caetc.). O termo Mundo (World ) ´ usado para representar o ambiente interativamente criado ou apresentado epara o usu´rio. Como as primitivas s˜o especificadas em coordenadas do mundo, o pacote gr´fico precisa a a amapear as coordenadas do mundo em coordenadas de tela. Uma forma de se efetuar esta transforma¸˜o ´ especificando uma regi˜o retangular em coordenadas ca e ado mundo, chamada de janela de coordenadas do mundo, e uma regi˜o retangular correspondente em acoordenadas de tela, chamada de Porta de Vis˜o (Viewport), em que a janela em coordenadas do mundo areal ´ mapeada. A transforma¸˜o que mapeia a janela na porta de vis˜o ´ aplicada a todas as primitivas e ca a ede sa´ em coordenadas do mundo, mapeando-as na tela. Este procedimento ´ ilustrado na Figura 5.11. ıda eComo pode ser visto pela figura, se a janela e a porta de vis˜o n˜o possuem a mesma raz˜o largura-altura, a a auma escala n˜o uniforme ´ realizada. Se o programa de aplica¸˜o altera a janela ou a porta de vis˜o, a e ca a 59
  • 61. Figura 5.11: Janela em Coordenadas do mundo e porta de vis˜o em coordenadas de tela. a Figura 5.12: Duas portas de vis˜o associadas a mesma janela. aent˜o as novas primitivas de sa´ desenhadas sobre a tela precisam ser tamb´m atualizadas. Outro ponto a ıda e´ que pode-se ter m´ltiplas portas de vis˜o de uma mesma janela, o que ´ mostrado na Figura 5.12.e u a e Dada uma janela e uma porta de vis˜o, qual ´ a matriz de transforma¸˜o que mapeia a janela em a e cacoordenadas do mundo real, na porta de vis˜o em coordenadas de tela? Esta matriz pode ser desenvolvida acomo uma transforma¸˜o composta por 3 passos, como ´ sugerido na Figura 5.11. A janela especificada ca epelo seu canto inferior esquerdo e canto superior direito, ´ primeiramente transladada para a origem do emundo de coordenadas. A seguir o tamanho da janela ´ escalonado para ser igual ao tamanho da porta ede vis˜o. Finalmente, a transla¸˜o ´ usada para posicionar a porta de vis˜o. A matriz global Mjp ´: a ca e a e umax − umin vmax − vmin Mjp = T (umin , vmin ) · S( , ) · T (−xmin , −ymin ) = xmax − xmin ymax − ymin    umax −umin    1 0 umin xmax −xmin 0 0 1 0 −xmin  0 1 vmin  ·  vmax −vmin 0 ymax −ymin 0  ·  0 1 −ymin  = 0 0 1 0 0 1 0 0 1  umax −umin umax −umin  xmax −xmin 0 −xmin . xmax −xmin + umin vmax −vmin  0 ymax −ymin −ymin . ymax −vmin + vmin  v max −ymin (5.46) 0 0 1   x Multiplicando P = Mjp ·  y , temos: 1 (x − xmin ). umax −umin + umin  min  xmax −x v −v P =  (y − ymin ). ymax −ymin + vmin  · (5.47) max min 1 Muitos pacotes gr´ficos combinam a transforma¸˜o janela - porta de vis˜o com recorte (clipping) de a ca aprimitivas gr´ficas de sa´ a ıda. A figura 10.14 ilustra esta t´cnica de recorte. e 60
  • 62. Figura 5.13: Os passos da transforma¸˜o janela - porta de vis˜o. ca aFigura 5.14: Primitivas gr´ficas de sa´ em coordenadas do mundo s˜o recortadas pela janela. O seu a ıda ainterior ´ apresentado na tela (viewport). e5.7 Eficiˆncia eUma composi¸˜o gen´rica de transforma¸˜es R, S e T , produz uma matriz da forma: ca e co   r11 r12 tx M =  r21 r22 ty  (5.48) 0 0 1 A submatriz 2x2 superior esquerda, ´ uma composi¸˜o das matrizes de rota¸˜o e escala, enquanto tx e e ca caty s˜o obtidos por influˆncia da transla¸˜o. Ao calcularmos M · P (um vetor de 3 elementos multiplicado a e capor uma matriz 3x3), verificamos que s˜o necess´rias 9 multiplica¸˜es e 6 adi¸˜es. Mas, como a ultima a a co co ´linha da matriz ´ fixa, os c´lculos efetivamente necess´rios s˜o: e a a a x = x.r11 + y.r12 + tx y = x.r21 + y.r22 + ty (5.49)o que reduz o processo a quatro multiplica¸˜es e duas adi¸˜es, o que ´ um ganho significante em termos co co ede eficiˆncia. Especialmente se considerarmos que esta opera¸˜o deve ser aplicada a centenas ou mesmo e camilhares de pontos por cena ou figura. Outra ´rea onde a eficiˆncia ´ muito importante ´ na cria¸˜o de sucessivas vis˜es de um objeto, a e e e ca otal como por exemplo vis˜es consecutivas de sistemas de mol´culas, avi˜es, etc., onde cada vis˜o ´ o e o a egeralmente rotacionada a poucos graus da vis˜o anterior. Se cada vis˜o pode ser gerada e apresentada a ade forma bastante r´pida (30 a 100 milisegundos cada uma), ent˜o parecer´ ao observador que o objeto a a aest´ sendo rotacionado continuamente (efeito de anima¸˜o!). Para conseguirmos isto, devemos efetuar as a catransforma¸˜es sobre os pontos do objeto o mais rapidamente poss´ co ıvel. As equa¸˜es de rota¸˜o (Equa¸˜o co ca ca5.8) requerem 4 multiplica¸˜es e 2 adi¸˜es. Mas se θ ´ pequeno (poucos graus), cos θ ´ quase 1. Dessa co co e eaproxima¸˜o, temos que: ca x = x − y. sin θ 61
  • 63. y = x . sin θ + y (5.50) sin −θ = − sin θ (5.51)que requer 2 multiplica¸˜es e 2 adi¸˜es (livranos de 2 multiplica¸˜es pode ser muito importante em co co cocomputadores sem hardware espec´ ıfico para isto!). A Equa¸˜o 5.50, ´ somente uma aproxima¸˜o para os valores corretos de x e y (existe um erro ca e caembutido!). Cada vez que a f´rmula ´ aplicada a novos valores de x e y o erro torna-se um pouquinho o emaior. Uma aproxima¸˜o melhor ´ usar x em vez de x na segunda equa¸˜o: ca e ca x = x = y. sin θ y = x . sin θ + y = (x − y. sin θ). sin θ + y = x. sin θ + y.(1 − sin2 θ) (5.52) Esta ´ uma melhor aproxima¸˜o que a equa¸˜o 5.50, porque o determinante da matriz 2x2 correspon- e ca cadente ´ 1, o que significa que as ´reas transformadas pela equa¸˜o 5.52n˜o s˜o alteradas. e a ca a a 62
  • 64. Eixo de Rota¸˜o ca Dire¸˜o da Rota¸˜o Positiva ca ca x y para z y z para x z x para y Tabela 5.2: Sentido de rota¸˜o. ca5.8 Transforma¸˜es em 3D coA capacidade para representar e visualizar um objeto em trˆs dimens˜es ´ fundamental para a percep¸˜o e o e cade sua forma. Por´m, em muitas situa¸˜es ´ necess´rio mais do que isto, ou seja, poder “manusear” o e co e aobjeto, movimentando-o atrav´s de rota¸˜es, transla¸˜es e mesmo escala. e co co Assim, generalizando o que foi visto para TG em 2D, onde estas transforma¸˜es foram representadas copor matrizes 3x3 (utilizando coordenadas homogˆneas), as TGs em 3D ser˜o representadas por matrizes e a4x4 tamb´m em coordenadas homogˆneas. e e Dessa forma, um ponto P de coodenadas (x, y, z) ser´ representado por (x, y, z, W ). Padronizando a x y z(ou homogeneizando) o ponto, teremos se w for diferente de 0, ( W , W , W , 1). Figura 5.15: Sistema de Coordenadas dado pela Regra da M˜o Direita. a O sistema de coordenadas para 3D utilizado ser´ o da Regra da M˜o Direita, com o eixo Z perpen- a adicular ao papel e saindo em dire¸˜o ao observador, como poder ser visto na figura 5.15. ca O sentido positivo de uma rota¸˜o, ´ dado quando observando-se sobre um eixo positivo em dire¸˜o ca e ca` origem, uma rota¸˜o de 90◦ ir´ levar um eixo positivo em outro positivo. Ou conforme a Tabela 5.2.a ca a A Regra da M˜o Direita foi escolhida porque este ´ o padr˜o utilizado na matem´tica (lembre-se da a e a adefini¸˜o do produto vetorial!). ca ¸˜ A TRANSLACAO em 3D pode ser vista como simplesmente uma exten¸˜o a partir da transla¸˜o 2D, ca caou seja: x 1 0 0 dx x        y   0 1 0 dy   y   = ·  (5.53) z 0 0 1 dz z 1 0 0 0 1 1 Assim, a Equa¸˜o 5.53 pode ser representada tamb´m como: ca e P = T (dx , dy , dz ) · P (5.54) Similarmente a ESCALA em 3D, fica: x sx 0 0 0 x       y   0 sy 0 0 y   = ·  (5.55)  z 0 0 sz 0 z 1 0 0 0 1 1 P = S(sx , sy , sz ) · P (5.56) 63
  • 65. co ¸˜ Finalmente, verifiquemos como ficam as equa¸˜es de ROTACAO em 3D, pois as rota¸˜es podem ser coefetuadas em rela¸˜o a qualquer um dos trˆs eixos. ca e A equa¸˜o de rota¸˜o em 2D ´ justamente uma rota¸˜o em torno do eixo z em 3D, a qual ´: ca ca e ca e x cos θ − sin θ 0 0 x        y   sin θ cos θ 0 0 y   = ·  (5.57) z 0 0 1 0 z 1 0 0 0 1 1 A matriz de rota¸˜o em rela¸˜o ao eixo x ´: ca ca e x 1 0 0 0 x       y  0 cos θ − sin θ 0 y   = ·  (5.58) z 0 sin θ cos θ 0 z 1 0 0 0 1 1 A matriz de rota¸˜o em rela¸˜o ao eixo y ´: ca ca e x cos θ 0 sin θ 0 x       y   0 1 0 0 y   = ·  (5.59) z − sin θ 0 cos θ 0 z 1 0 0 0 1 1 Para a rota¸˜o tamb´m temos que: ca e P = R(θ) · P (5.60) OBS: Os vetores compostos pelas linhas e colunas da submatriz 3x3 do canto superior esquerdo deRx,y,z (θ) s˜o mutuamente perpendiculares, e a submatriz possui determinante igual a 1, o que significa aque as trˆs matrizes s˜o chamadas de Ortogonais Especiais. Al´m disso, uma sequˆncia arbitr´ria e a e e ade rota¸˜es ´ tamb´m ortogonal especial. Deve-se lembrar que as transforma¸˜es ortogonais preservam co e e codistˆncias e ˆngulos. a a Todas estas matrizes de transforma¸˜o (T, SeR) possuem inversas. A inversa de T ´ obtida simples- ca emente negando-se dx , dy e dz . Para a matriz S, basta substituir sx , sy e sz por seus valores inversos.Para cada uma das matrizes de rota¸˜o R, basta negar o ˆngulo de rota¸˜o. Al´m disso, para uma matriz ca a ca eortogonal B, sua inversa (B −1 ) ´ a sua matriz transposta, ou seja B −1 = B T . e Uma sequˆncia arbitr´ria de transforma¸˜es de transla¸˜o, escala e rota¸˜o podem ser multiplicadas e a co ca cajuntas, resultando uma matriz da seguinte forma: r11 r12 r13 tx    r21 r22 r23 ty  M = (5.61) r31 r32 r33 tz  0 0 0 1 Como no caso de 2D, a submatriz 3x3 do canto superior esquerdo R, agrega as transforma¸˜es de coescala e rota¸˜o, enquanto a ultima coluna ` direita T agrega as transla¸˜es. Para obter-se um pouco ca ´ a comais de eficiˆncia (ganho computacional) pode-se executar a transforma¸˜o explicitamente como: e ca x x     y  y  =R· +T (5.62) z z 1 15.8.1 Composi¸˜o de Transforma¸˜es em 3D ca coA composi¸˜o de transforma¸˜es em 3D pode ser entendida mais facilmente atrav´s do exemplo indicado ca co ena figura 5.16. O objetivo ´ transformar os segmentos de reta P1 P2 e P1 P3 da posi¸˜o inicial em (a) para e caa posi¸˜o final em (b). Assim o ponto P1 deve ser transladado para a origem, P1 P2 dever´ ficar sobre ca ao eixo z positivo, e P 1P 3 dever´ ficar no plano positivo de yz. Al´m disso, os comprimentos das linhas a en˜o devem ser alterados. a 64
  • 66. Figura 5.16: Transformando P1 , P2 e P3 da posi¸˜o inicial em (a) para a posi¸˜o final em (b). ca ca Uma primeira maneira de se obter a transforma¸˜o desejada ´ atrav´s da composi¸˜o das primitivas ca e e cade transforma¸˜o T , Rx , Ry e Rz . ca Subdividindo o problema, teremos os seguintes quatro passos: 1. Transladar P1 para a origem. 2. Rotacionar o segmento P1 P2 em rela¸˜o ao eixo y, de forma que ele (P1 P2 ) fique no plano yz. ca 3. Rotacionar o segmento P1 P2 em rela¸˜o ao eixo x, de forma que ele (P1 P2 ) fique sobre o eixo z. ca 4. Rotacionar o segmento P1 P3 em rela¸˜o ao eixo z, de forma que ele (P1 P3 ) fique no plano yz. caPrimeiro Passo: Transladar P1 para a OrigemA equa¸˜o de transla¸˜o ´: ca ca e 1 0 0 −x1   0 1 0 −y1  T (−x1 , −y1 , −z1 ) =  (5.63) 0 0 1 −z1  0 0 0 1 Aplicando T a P1 , P2 e P3 , temos: 0   0 P1 = T (−x1 , −y1 , −z1 ) · P1 =   0 1 x2 − x1    y − y1  P2 = T (−x1 , −y1 , −z1 ) · P2 =  2 z2 − z1  1 x3 − x1    y − y1  P3 = T (−x1 , −y1 , −z1 ) · P3 =  3 (5.64) z3 − z1  1Segundo Passo: Rotacionar em Rela¸˜o ao eixo Y caA Figura 5.17 (o ˆngulo θ indica a dire¸˜o positiva de rota¸˜o em rela¸˜o a y. O ˆngulo utilizado na a ca ca ca arealidade ´ −(90o − θ)) mostra P1 P2 ap´s o primeiro passo, bem como a proje¸˜o de P1 P2 no plano xz. e o caO ˆngulo de rota¸˜o ´ −(90o − θ) = θ − 90o . Ent˜o: a ca e a x2 x2 − x1 sin(θ − 90o ) = − cos θ = − =− D1 D1 z2 z2 − z1 cos(θ − 90o ) = sin θ = − =− (5.65) D1 D1 65
  • 67. Figura 5.17: Rota¸˜o dos pontos P1 , P2 e P3 . caonde D1 = (z2 )2 + (x2 )2 = (z2 − z1 )2 + (x2 − x1 )2 (5.66) Ent˜o substituindo estes valores na Equa¸˜o 5.59, temos: a ca 0    y − y1  P2 = Ry (θ − 90o ) · P2 =  2 (5.67) D1  1 Como era esperado, a componente x de P2 ´ zero, e z possui comprimento D1 . eTerceiro Passo: Rotacionar em Rela¸˜o ao eixo X caFigura 5.18: Rota¸˜o em rela¸˜o ao eixo x. P1 e P2 de comprimento D2 ´ rotacionado em dire¸˜o ao ca ca e caeixo z, pelo ˆngulo positivo f. a A Figura 5.18 mostra P1 P2 ap´s o segundo passo (o segmento de reta P1 P3 n˜o ´ mostrado porque o a en˜o ´ utilizado para determinar os ˆngulos de rota¸˜o. Ambos os segmento s˜o rotacionados por Rx (φ).) a e a ca aO ˆngulo de rota¸˜o ´ φ, e a ca e z2 cos φ = D2 y sin φ = 2 (5.68) D2 66
  • 68. onde D2 = |P1 P2 | ´ o comprimento do segmento de reta P1 P2 . Como as transla¸˜es e rota¸˜es preservam e co coo comprimento, o comprimento de P1 P2 ´ o mesmo de P1 P2 , dessa forma e D2 = |P1 P2 | = |P1 P2 | = (x2 − x1 )2 + (y2 − y1 )2 + (z2 − z1 )2 (5.69) O resultado da rota¸˜o no terceiro passo ´: ca e 0    0  P2 = Rx (φ) · P2 = Rx (φ) · Ry (θ − 90o ) · P2 = Rx (φ) · Ry (θ − 90o ) · T · P2 =  (5.70) |P1 P2 |  1 Dessa forma, agora P1 P2 agora est´ sobre (coincidindo) o eixo z positivo. aQuarto Passo: Rotacionar em Rela¸˜o ao eixo Z ca Figura 5.19: Rota¸˜o em rela¸˜o ao eixo z. ca ca A figura 5.19 mostra P1 P2 e P1 P3 ap´s o terceiro passo, com P2 sobre o eixo z e P3 em o x3   y  P3 =  3  = Rx (φ) · Ry (θ − 90o ) · T (−x1 , −y1 , −z1 ) · P3 (5.71) z3 1 A rota¸˜o ´ dada pelo ˆngulo positivo α, e ca e a y3 cos α = D3 x sin α = 3 D3 D3 = x3 2 + y3 2 (5.72)P1 P3 ´ trazido para o plano yz. e Dessa forma, ap´s o quarto passo o resultado ´ alcan¸ado como visto na Figura 5.16(b). o e c A matriz de composi¸˜o M ´ a transforma¸˜o necess´ria ` composi¸˜o solicitada na Figura 5.16. ca e ca a a ca M = Rx (α) · Rx (φ) · Ry (θ − 90o ) · T (−x1 , −y1 , −z1 ) = R · T (5.73) Exerc´ıcio: aplique a matriz de composi¸˜o a cada um dos pontos P1 , P2 e P3 para verificar que P1 ca´ transformado para a origem, P2 est´ sobre o eixo z positivo e P3 no plano yz positivo.e a 67
  • 69. Utilizando as propriedades de matrizes ortogonais (ver Equa¸˜es 5.61, 5.62 e a observa¸˜o da se¸˜o co ca ca5.8), podemos encontrar uma segunda forma de encontrar a matriz de transforma¸˜es. Relembremos que coos vetores unit´rios (de comprimento igual a 1) de R rotacionam em rela¸˜o aos eixos principais. a ca Assim,   r1x r2x r3x R =  r1y r2y r3y  (5.74) r1z r2z r3z Colocando Rz como o vetor unit´rio ao longo de P1 P2 que ir´ rotacionar em dire¸˜o ao eixo z positivo, a a ca T P1 P2 Rz = [ r1z r2z r3z ] = (5.75) |P1 P2 | O vetor unit´rio Rx ´ perpendicular ao plano de P1 , P2 e P3 e ir´ rotacionar em dire¸˜o ao eixo a e a cax positivo, dessa forma Rx deveria ser o produto vetorial de dois vetores do plano (relembre-se daspropriedades de Produto Vetorial vistos em Geometria Anal´ ıtica !): T P1 P3 × P1 P2 Rx = [ r1x r2x r3x ] = (5.76) |P1 P3 × P1 P2 |e finalmente, T Ry = [ r1x r2y r3z ] = Rz × Rx (5.77)ir´ rotacionar em dire¸˜o ao eixo y positivo. A matriz de composi¸˜o ´ dada por a ca ca e r1x r2x r3x 0    r1y r2y r3y 0  · T (−x1 , −y1 , −z1 ) = R · T (5.78) r1z r2z r3z 0  0 0 0 1 Figura 5.20: Os vetores unit´rios Rx , Ry e Rz , os quais s˜o transformados nos eixos principais. a ae R e T s˜o como em 5.78. A Figura 5.20 mostra os vetores individuais Rx , Ry e Rz . a 68
  • 70. Cap´ ıtulo 6Observa¸˜o de Cenas 3D ca6.1 Pipeline de observa¸˜o (“viewing pipeline”) caAp´s a cria¸˜o de cenas e objetos tridimensionais o pr´ximo passo ´ efetuar a sua apresenta¸˜o. Ao o ca o e cagerar imagens de cenas 3D em computa¸˜o gr´fica, fazemos uma analogia com uma cˆmera fotogr´fica: ca a a aimaginamos um observador que, posicionado em um ponto de observa¸˜o, vˆ a cena atrav´s das lentes de ca e euma cˆmera virtual que pode ser posicionada de forma a obter a imagem desejada da cena (o “fot´grafo” a opode definir a posi¸˜o da cˆmera, sua orienta¸˜o e ponto focal). A fotografia que se obt´m com uma ca a ca ecˆmera real ´ uma proje¸˜o da cena em um plano de imagem 2D (o filme na cˆmera). Da mesma forma a e ca aque no mundo real, a imagem que se obt´m da cena sint´tica depende de v´rios fatores que determinam e e acomo esta ´ projetada em um plano para formar a imagem 2D exibida (por exemplo) no monitor. Estes eparˆmetros incluem a posi¸˜o da cˆmera, sua orienta¸˜o e ponto focal, o tipo de proje¸˜o efetuada a ca a ca cae a posi¸˜o dos “planos de recorte” (clipping planes). ca A posi¸˜o e o ponto focal da cˆmera definem, respectivamente, aonde a cˆmera est´ e para onde ca a a aela est´ apontando. O vetor que vai da posi¸˜o da cˆmera ao ponto focal ´ denominado dire¸˜o de a ca a e caproje¸˜o. O plano de imagem, que ´ o plano no qual a cena ser´ projetada, est´ posicionado no ponto ca e a afocal e, tipicamente, ´ perpendicular ao vetor dire¸˜o de proje¸˜o (Figura 6.1). A orienta¸˜o da cˆmera e ca ca ca a´ controlada pela sua posi¸˜o, seu ponto focal e por um outro vetor denominado view up. Estes trˆse ca eparˆmetros definem completamente a cˆmera. a a Figura 6.1: Atributos da cˆmera [Schr¨eder, 1998]. a o O m´todo de proje¸˜o controla como os atores da cena s˜o mapeados no plano de imagem: na proje¸˜o e ca a caortogr´fica, ou proje¸˜o paralela, o processo de mapeamento ´ paralelo: assume-se que todos os raios de a ca eluz que atingem a cˆmera s˜o paralelos ao vetor de proje¸˜o. Na proje¸˜o perspectiva, todos os raios a a ca caconvergem para um ponto comum, denominado ponto de observa¸˜o, ou centro da proje¸˜o. Nesse caso, ca cadeve-se determinar o ˆngulo de vis˜o da cˆmera. a a a Os planos de recorte anterior e posterior interceptam o vetor de proje¸˜o e s˜o, geralmente, per- ca apendiculares a ele. Os planos de recorte s˜o usados para eliminar atores que est˜o muito pr´ximos ou a a omuito distantes da cˆmera, de forma que apenas os atores que est˜o na ´rea englobada pelos planos a a ade recorte s˜o potencialmente vis´ a ıveis. Em geral, os planos de recorte s˜o perpendiculares ` dire¸˜o a a ca 69
  • 71. de proje¸˜o. Suas posi¸˜es podem ser especificadas usando o chamado intervalo de recorte (“clipping ca corange”) da cˆmera: a localiza¸˜o dos planos ´ dada a partir da posi¸˜o da cˆmera, ao longo da dire¸˜o a ca e ca a cade proje¸˜o. A posi¸˜o do plano anterior d´ o valor m´ ca ca a ınimo do intervalo, e a posi¸˜o do plano posterior cad´ o valor m´ximo. a a A cˆmera pode ser manipulada diretamente atrav´s dos parˆmetros acima descritos, mas existem a e aalgumas opera¸˜es comuns que facilitam a tarefa de quem gera a imagem, como ilustradas nas figuras co6.2 e 6.3: • Azimuth - rotaciona a posi¸˜o da cˆmera ao redor do seu vetor view up, com centro no ponto focal ca a • Elevation - rotaciona a posi¸˜o da cˆmera ao redor do vetor dado pelo produto vetorial entre o ca a vetor view up e o vetor dire¸˜o de proje¸˜o, com centro no ponto focal. ca ca • Roll (Twist) - rotaciona o vetor view up em torno do vetor normal ao plano de proje¸˜o. ca • Yaw - rotaciona o ponto focal da cˆmera em torno do vetor view up, com centro na posi¸˜o da a ca cˆmera. a • Pitch - rotaciona o ponto focal ao redor do vetor dado pelo produto vetorial entre o vetor view up e o vetor dire¸˜o de proje¸˜o, com centro na posi¸˜o da cˆmera. ca ca ca a • Dolly - (in, out) move a posi¸˜o da cˆmera ao longo da dire¸˜o de proje¸˜o (mais pr´ximo ou mais ca a ca ca o distante do ponto focal). • Zoom - altera o ˆngulo de vis˜o da cˆmera, de modo que uma regi˜o maior ou menor da cena fique a a a a na regi˜o que ´ potencialmente vis´ a e ıvel. Figura 6.2: Movimentos de cˆmera [Schr¨eder, 1998]. a o Em resumo, gerar uma vista de um objeto em trˆs dimens˜es ´ similar a fotografar o objeto. Podemos e o ecaminhar na cena e fotografar de qualquer ˆngulo, de v´rias distˆncias e com diferentes orienta¸˜es da a a a cocˆmera. A regi˜o da cena que aparece no visor da m´quina ´ o que vai ser projetado na superf´ do a a a e ıciefilme. O tipo e o tamanho da lente da cˆmera determinam quais partes da cena aparecem na foto final. aEstas id´ias est˜o incorporadas nas APIs gr´ficas 3D, de forma que vistas de uma cena podem ser geradas e a aa partir da defini¸˜o de parˆmetros como posi¸˜o espacial, orienta¸˜o e ˆngulo de abertura da “cˆmera ca a ca ca a avirtual”.6.2 Coordenadas de Observa¸˜o ca6.2.1 Especifica¸˜o do sistema de coordenadas de observa¸˜o ca caEscolhemos uma “vista” espec´ ıfica para uma cena estabelecemos primeiramente um sistema de coordena-das de observa¸˜o (Viewing Coordinate System - VCS, ou View reference Coordinate System). Um plano ca 70
  • 72. Figura 6.3: Movimentos de cˆmera [Schr¨eder, 1998]. a ode observa¸˜o, ou plano de proje¸˜o, ´ definido, que ´ perpendicular ao eixo z do sistema de coordenadas ca ca e ede visualiza¸˜o VCS (esse plano faz o papel do plano do filme na cˆmera virtual). Em seguida, ´ preciso ca a etransformar a descri¸˜o da cena dada no sistema de coordenadas do mundo (WC - World Coordinates) capara uma descri¸˜o no sistema de coordenadas de observa¸˜o VCS. ca ca Mas, como determinamos o VCS? Inicialmente, estabelecemos a origem do sistema. Para isso, usamosum ponto inicialmente definido no WC, o View Reference Point - VRP. Podemos pensar nesse ponto comosendo a posi¸˜o da cˆmera. Em seguida, selecionamos a dire¸˜o positiva para o eixo z do VCS (vamos ca a cadenotar esse eixo por zv ), bem como a orienta¸˜o do plano de observa¸˜o, especificando o vetor normal ca caao plano de observa¸˜o, N . Finalmente, definimos a dire¸˜o do eixo y do VCS (yv ) especificando-se um ca cavetor V (View Up). Obviamente, V deve ser perpendicular a N . Pode ser dif´ para o programador ıcildeterminar V exatamente de forma a satisfazer essa condi¸˜o. Tipicamente, as transforma¸˜es de ob- ca coserva¸˜o implementadas nos pacotes gr´ficos ajustam V projetando-o em um plano que ´ perpendicular ca a eao vetor N : dessa forma, o programador pode escolher qualquer dire¸˜o conveniente para o vetor V , cadesde que n˜o seja paralela ` N . A partir dos vetores N e V , o pacote gr´fico pode computar um terceiro a a avetor U , perpendicular a ambos, que define a dire¸˜o para o eixo xv do VCS (veja Figuras 6.4 e 6.5). caFigura 6.4: Um VCS baseado na regra da m˜o direita com xv , yv e zv .relativos ao sistema de coordenadas ado mundo [Hearn and Baker, 1994].6.2.2 Transforma¸˜o do sistema de coordenadas do mundo para o sistema de ca coordenadas de observa¸˜o caAntes que as descri¸˜es do objeto (em WC) possam ser projetadas no plano de observa¸˜o, elas preci- co casam ser transformadas para as coordenadas do VCS. A convers˜o das coordenadas de WC para VCS ´ a e 71
  • 73. Figura 6.5: Orienta¸˜es do plano de observa¸˜o conforme o vetor normal. O vetor (1, 0, 0) d´ a orienta¸˜o co ca a caem (a) e (1, 0, 1), a orienta¸˜o em (b) [Hearn and Baker, 1994]. caequivalente a uma transforma¸˜o que superp˜e o VCS ao WC, usando as transforma¸˜es geom´tricas j´ ca o co e avistas. A seq¨ˆncia de transforma¸˜es ´ dada por: ue co e 1. translada o VRP para a origem do WC . 2. Aplica rota¸˜es para alinhar os eixos do VCS (xv , yv , zv ) com os eixos do WC (xw , yw , zw ), respec- co tivamente. Se as coordenadas do ponto VRP em WC s˜o dadas por (x0 , y0 , z0 ), a matriz de transla¸˜o ´ dada por a ca eT (−x0 , −y0 , −z0 ). A seq¨ˆncia de rota¸˜es pode exigir at´ trˆs rota¸˜es em torno dos eixos coordenados, ue co e e codependo da dire¸˜o escolhida para N . Em geral, se N n˜o est´ alinhado com qualquer um dos eixos, a ca a asuperposi¸˜o de ambos os sistemas vai exigir uma seq¨ˆncia Rz · Ry · Rx . Isto ´, primeiro rotacionamos ca ue eem torno do eixo xw para trazer o eixo zv para o plano xw zw . Em seguida, rotacionamos em torno doeixo yw para alinhar os eixos zw e zv . A rota¸˜o final em torno do eixo zw ´ para alinhar os eixos yw e ca eyv . A matriz de transforma¸˜o composta ´ ent˜o aplicada a todas as descri¸˜es de objetos no WC para ca e a cotransform´-las para VCS. a Uma forma alternativa de gerar a matriz que descreve as transforma¸˜es de rota¸˜o necess´rias ´ co ca a ecalcular os vetores unit´rios u, v e n do sistema de coordenadas de observa¸˜o, e formar a matriz a cade composi¸˜o diretamente, uma vez que esses vetores s˜o ortogonais entre si e definem uma matriz ca aortogonal. Dados os vetores N e V , os vetores unit´rios podem ser calculados da seguinte forma: a N n= = (n1 , n2 , n3 ) (6.1) |N | V ×N u= = (u1 , u2 , u3 ) (6.2) |V × N | v = n × u = (v1 , v2 , v3 ) (6.3) Este m´todo tamb´m ajusta automaticamente a dire¸˜o de V de forma que v seja perpendicular a n. e e caA matriz de rota¸˜o composta para a transforma¸˜o de visualiza¸˜o ´ ent˜o dada por: ca ca ca e a u1 u2 u3 0    v1 v2 v3 0 R= (6.4) n1 n2 n3 0  0 0 0 1 A matriz de transforma¸˜o completa a ser aplicada aos objetos da cena para transferi-los para o casistema de coordenadas de observa¸˜o ´ dada por: ca e u1 u2 u3 −x0    v1 v2 v3 −y0  Mwc,vc =R·T = (6.5) n1 n2 n3 −z0  0 0 0 1 72
  • 74. 6.3 Proje¸˜es coTendo os objetos descritos no sistema de coordenadas de observa¸˜o, pode-se projetar os objetos tridi- camensional no plano de observa¸˜o. No processo de gera¸˜o da imagem de uma cena deparamos com o ca caproblema de apresentar uma entidade tridimensional num meio bidimensional (2D), que ´ a tela do moni- etor de v´ıdeo. Esse processo, denominado de Proje¸˜o, tem sido tratado exaustivamente por desenhistas, caartistas e arquitetos que buscaram t´cnicas e artif´ e ıcios para sistematiz´-lo e solucion´-lo. A figura 6.6 a aapresenta uma taxonomia dos m´todos de proje¸˜o. e ca Figura 6.6: Taxomia de proje¸˜es [Plastock and Kalley, 1999]. co6.3.1 Proje¸˜o Perspectiva caAs t´cnicas utilizadas em proje¸˜o perspectiva s˜o derivadas daquelas utilizadas pelos artistas e dese- e ca anhistas profissionais. Pode-se dizer que o olho do observador coloca-se no centro de proje¸˜o, e o plano caque deve conter o objeto ou cena projetada transforma-se no plano de proje¸˜o. Dois segmentos de reta caque saem do centro de proje¸˜o e atingem o objeto projetado no plano de proje¸˜o, s˜o chamadas de ca ca aprojetantes (veja a Figura 6.7) Figura 6.7: Linha AB e sua proje¸˜o A’B’: (a) perspectiva; (b) ortogonal. ca Os desenhos em perspectiva s˜o caracterizados pelo encurtamento perspectivo e pelos pontos de fuga. aO encurtamento perspectivo, ´ a ilus˜o de que os objetos e comprimentos s˜o cada vez menores ` medida e a a aque sua distˆncia ao centro de proje¸˜o aumenta. Tem-se tamb´m a ilus˜o de que conjuntos de linhas a ca e aparalelas que n˜o s˜o paralelas ao plano de proje¸˜o, convergem para um ponto de fuga. Denominam-se a a ca 73
  • 75. pontos de fuga principais, quando d´-se a aparˆncia de haver uma intersec¸˜o entre um conjunto de a e caretas pararelas com um dos eixos principais Ox , Oy ou Oz . O n´mero de pontos de fuga principais ´ u edeterminado pelo n´mero de eixos principais intersectados pelo plano de proje¸˜o. Por exemplo: se o u caplano de proje¸˜o intercepta apenas os eixo z (ent˜o ´ perpendicular ao eixo z), somente o eixo z possui ca a eum ponto de fuga principal, pois linhas paralelas aos eixos x e y, s˜o tamb´m paralelas ao plano de a eproje¸˜o, e dessa forma n˜o ocorre a ilus˜o de convergˆncia. ca a a e Proje¸˜es Perspectivas s˜o categorizadas pelo seu n´mero de pontos de fuga principais, ou seja o co a un´mero de eixos que o plano de proje¸˜o intercepta. A Figura 6.8 mostra 2 proje¸˜es perspectivas (com u ca coum ponto de fuga) distintas de um cubo. Est´ claro que possui apenas um ponto de fuga? Somente as alinhas paralelas ao eixo z convergem, e as linhas paralelas aos eixos x e y continuam paralelas!Figura 6.8: Proje¸˜es de um cubo (com 1 ponto de fuga) sobre um plano cortando o eixo Z, apresentando coo ponto de fuga. Proje¸˜es perspectivas com 2 pontos de fuga (quando 2 eixos principais s˜o interceptados pelo plano co ade proje¸˜o) s˜o mais comumente usadas em arquitetura, engenharia, desenho publicit´rio e projeto ca a aindustrial (ver Figura 6.9). J´ as proje¸˜es perspectivas com 3 pontos de fuga s˜o bem menos utilizadas, a co apois adicionam muito pouco em termos de realismo comparativamente `s proje¸˜es com 2 pontos de fuga, a coe o custo de implementa¸˜o ´ bem maior (veja Figura 6.10). ca eFigura 6.9: Proje¸˜es perspectivas com 2 pontos de fuga ( o plano de proje¸˜o intercepta 2 eixos (x e z)). co caAnomalias da PerspectivaA proje¸˜o perspectiva introduz certas anomalias que aumentam o realismo em termos de profundidade, camas tamb´m alteram as medidas e formas reais do objetos. e 1. Encurtamente perspectivo: Quanto mais distante um objeto est´ do centro de proje¸˜o, menor a ca parece ser (o tamanho de sua proje¸˜o torna-se menor, como mostra a figura 6.11. ca 2. pontos de Fuga: As proje¸˜es de retas n˜o paralelas ao plano de proje¸˜o, provocam a ilus˜o de co a ca a que se interceptam num ponto do horizonte. 3. Confus˜o Visual: Os objetos situados atr´s do centro de proje¸˜o s˜o projetados no plano de a a ca a proje¸˜o de cima para baixo e de tr´s para a frente (ver Figura 6.12) ca a 4. Distor¸˜o Topol´gica: Consideremos o plano que cont´m o centro de proje¸˜o e que ´ paralelo do ca o e ca e plano de proje¸˜o. Os pontos deste plano s˜o projetados no infinito pela transforma¸˜o perspectiva. ca a ca 74
  • 76. Figura 6.10: Proje¸˜es perspectivas com 3 pontos de fuga ( o plano de proje¸˜o intercepta os 3 eixos). co ca Em particular, um segmento de reta que une um ponto situado ` frente do observador a um ponto a situado atr´s dele e efetivamente projetado segundo uma linha quebrada de comprimento infinito. aFigura 6.11: A esfera B ´ bem maior que a esfera A, por´m ambas aparecem com o mesmo tamanho e equando projetadas no plano de vis˜o. aDesenvolvimento Matem´tico para Proje¸˜es Perspectivas a coPara obter uma proje¸˜o perspectiva de um objeto 3D, s˜o transformados os pontos ao longo dos pro- ca ajetores que se encontram no centro de proje¸˜o. Suponha que o centro de proje¸˜o est´ posicionado ca ca aem zprp, um ponto no eixo zv, e que o plano de proje¸˜o, normal ao eixo z, est´ posicionado em zvp, ca acomo mostra a Figura 6.13. Precisamos determinar as coordenadas (xp , yp , zp ), que s˜o as coordenadas ado ponto P = (x, y, z) projetado no plano de proje¸˜o. Podemos escrever as equa¸˜es que descrevem as ca cocoordenadas (x , y , z ) de qualquer ponto ao longo da linha de proje¸˜o perspectiva como: ca x = x − xu y = y − yu z = z − (z − zprp )u (6.6) O parˆmetro u assume valores no intervalo [0, 1] quando u = 0, estamos em P = (x, y, z), e quando au = 1 temos exatamente o centro de proje¸˜o (0, 0, zprp ). As proje¸˜es perspectiva e paralela tamb´m ca co epodem, assim como as transforma¸˜es geom´tricas b´sica, ser definidas atrav´s de matrizes 4x4, o que ´ co e a e einteressante para a composi¸˜o de transforma¸˜es juntamente com a proje¸˜o. No plano de observa¸˜o, ca co ca casabemos que z = zvp , e podemos resolver a equa¸˜o de z’ para obter o valor do parˆmetro u nessa posi¸˜o ca a caao longo da linha de proje¸˜o: ca Zvp − z u= (6.7) Zprp − z 75
  • 77. Figura 6.12: Confus˜o visual da perpectiva (objeto atr´s do centro de proje¸˜o). a a caFigura 6.13: Proje¸˜o em perspectiva de um ponto P=(x, y, z) na posi¸˜o (xp, yp, zp) sobre o plano de ca caproje¸˜o [Hearn and Baker, 1994]. ca Substituindo esse valor de u nas equa¸˜es de z e y , obtemos as equa¸˜es de transforma¸˜o perspectiva: co co ca Zvp − z dp xp = x =x Zprp − z Zprp − z Zvp − z dp yp = y =y (6.8) Zprp − z Zprp − z Usando coordenadas homogˆneas pode-se escrever a transforma¸˜o na forma matricial: e ca  1 0 0 0    xh x   yh   0 1 0 0  y   =  0 0 − zvp zprp ·  (6.9) zh  dp −zvp dp  z z rp h 0 0 − d1 p − pp d 1 Nesta representa¸˜o o fator homogˆneo ´ ca e e zprp − z h= (6.10) dp E as coordenadas do ponto projetado no plano de observa¸˜o s˜o obtidas a partir das coordenadas ca ahomogˆneas dividindo-se por h: e xh xp = h yh yp = (6.11) h Observa-se que o valor original da coordenada z precisa ser mantido nas coordenadas de proje¸˜o capara uso por algoritmos de remo¸˜o de linhas ocultas. Em geral, o centro da proje¸˜o n˜o precisa ser ca ca a 76
  • 78. posicionado ao longo do eixo zv , e as equa¸˜es acima podem ser generalizadas para considerar o centro coem um ponto qualquer. Existem v´rios casos especiais a serem considerados para as equa¸˜es acima. a coPor exemplo, se o plano de proje¸˜o coincide com o plano uv, i.e., zvp = 0, ent˜o dp = zprp . Em alguns ca apacotes gr´ficos ´ assumido que o centro de proje¸˜o coincide com a origem do sistema de coordenadas a e cade observa¸˜o, i.e., nesse caso zprp = 0. ca6.3.2 Desenvolvimento Matem´tico para Proje¸˜es Paralelas a coPodemos especificar uma proje¸˜o paralela com um vetor de proje¸˜o que define a dire¸˜o dos projeto- ca ca cares. Quando a dire¸˜o proje¸˜o ´ perpendicular ao plano de proje¸˜o tem-se uma proje¸˜o ortogr´fica, ca ca e ca ca acaso contr´rio tem-se uma proje¸˜o obl´ a ca ıqua. Proje¸˜es ortogr´ficas s˜o muito comuns em engenharia e co a aarquitetura para gerar vistas frontais, laterais e traseiras de objetos. A deriva¸˜o das equa¸˜es de trans- ca coforma¸˜o para uma proje¸˜o paralela ortogr´fica ´ imediata. Se o plano de observa¸˜o est´ posicionado ca ca a e ca aem zvp ao longo do eixo zv , ent˜o a descri¸˜o de qualquer ponto P = (x, y, z) em coordenadas do sistema a cade observa¸˜o ´ transformada para as coordenadas de proje¸˜o (veja Figura 6.14): ca e ca Figura 6.14: Proje¸˜o ortogonal de um ponto no plano de proje¸˜o [Hearn and Baker, 1994]. ca ca A matriz de transforma¸˜o para coordenadas homogˆneas ´ dada por: ca e e 1 0 0 0   0 1 0 0 Mortograf = (6.12) 0 0 0 0  0 0 0 1 77
  • 79. Cap´ ıtulo 7Recorte de Primitivas 2DJ´ vimos que um “pacote gr´fico” atua como intermedi´rio entre o aplicativo (e o seu modelo/estrutura de a a adados interna) e o hardware de visualiza¸˜o. Sua fun¸˜o ´ aproximar primitivas matem´ticas (“ideais”), ca ca e adescritas em termos de v´rtices num sistema de coordenadas cartesianas, por conjuntos de pixels com a ecor ou n´ de cinza apropriado. Estes pixels s˜o armazenados num bitmap na mem´ria da CPU, ou num ıvel a oframe buffer (mem´ria de imagem no controlador do dispositivo. At´ o momento estudamos, de maneira o en˜o extensiva, alguns algoritmos b´sicos para convers˜o matricial utilizados por pacotes gr´ficos. Vamos a a a aestudar agora alguns algoritmos para clipping [recorte] de primitivas. (O “recorte” ´ necess´rio para que e aa imagem “apare¸a” dentro do retˆngulo de visualiza¸˜o definido para ela. c a ca Existem v´rias abordagens para o processo de clipping. Uma t´cnica ´bvia ´ recortar a primi- a e o etiva antes da convers˜o matricial, calculando analiticamente suas intersec¸˜es com o retˆngulo de re- a co acorte/visualiza¸˜o [clip rectangle]. Estes pontos de intersec¸˜o s˜o ent˜o usados para definir os novos ca ca a av´rtices para a vers˜o recortada da primitiva. A vantagem, evidente, ´ que o processo de convers˜o e a e amatricial precisa tratar apenas da vers˜o recortada da primitiva, cuja ´rea pode ser muito menor que a a aoriginal. Esta ´ a t´cnica mais freq¨entemente utilizada para recortar segmentos de reta, retˆngulos e e e u apol´ıgonos, e os algoritmos que vamos estudar s˜o baseados nesta estrat´gia. a e Outra estrat´gia seria converter todo o pol´ e ıgono, mas tra¸ar apenas os pixels vis´ c ıveis no retˆngulo de avisualiza¸˜o [scissoring]. lsto pode ser feito checando as coordenadas de cada pixel a ser escrito contra caos limites do retˆngulo. Na pr´tica, existem maneiras de acelerar o processo que evitam o teste de cada a apixel individualmente. Se o teste dos limites puder ser feito rapidamente [por hardware especializado,por exemplo], esta abordagem pode ser mais eficiente que a anterior, e tem a vantagem de ser extens´ ıvela regi˜es de recorte arbitr´rias. o a7.1 Recorte de segmentos de reta Figura 7.1: Exemplos de recorte de segmentos de reta. Vamos estudar especificamente o processo de recorte de segmentos de reta contra retˆngulos. Segmen- atos que interceptam uma regi˜o de recorte retangular, depois de recortados, s˜o sempre transformados a anum unico segmento. Segmentos que est˜o sobre a fronteira do retˆngulo de recorte s˜o considerados ´ a a acomo dentro dele, e portanto devem ser mostrados (Figura 7.1). 78
  • 80. 7.1.1 Recorte de Pontos ExtremosAntes de discutir o problema do recorte de segmentos de reta, vamos considerar o problema mais simplesde recortar pontos extremos. Se a fronteira do retˆngulo de recorte tem coordenada x no intervalo xmin ae xmax , e coordenada y no intervalo ymin e ymax , ent˜o 4 desigualdades precisam ser satisfeitas para que aum ponto (x, y) esteja dentro do retˆngulo de recorte: a xmin ≤ x ≤ xmax ymin ≤ y ≤ ymax (7.1)7.1.2 Algoritmo de Cohen-Sutherland para Recorte de Segmentos de RetaPara recortar um segmento de reta, precisamos considerar apenas os seus pontos extremos, e n˜o os ainfinitos pontos no interior. Se ambas as extremidades est˜o dentro do retˆngulo de visualiza¸˜o (AB na a a caFigura 7.1), toda a linha est´ dentro do retˆngulo e pode ser tra¸ada (neste caso diz-se que a reta foi a a ctrivialmente aceita). Se apenas uma das extremidades est´ dentro (CD na Figura 7.1), a linha intercepta ao retˆngulo de visualiza¸˜o, e o ponto de intersec¸˜o precisa ser calculado. Se ambas as extremidades a ca caest˜o fora, a linha pode ou n˜o interceptar o retˆngulo, e precisamos verificar se as intersec¸˜es existem a a a coe onde est˜o.a Uma estrat´gia de for¸a bruta seria checar a linha contra cada aresta do retˆngulo de visualiza¸˜o, para e c a calocalizar um eventual ponto de intersec¸˜o. Se existe um, a linha corta o retˆngulo, e est´ parcialmente ca a adentro dele. Para cada linha e cada aresta do retˆngulo, tomamos as duas retas (matematicamente ainfinitas) que as cont´m, e calculamos a intersec¸˜o entre elas. A seguir, testamos se este ponto ´ interior e ca e- ou seja, se est´ dentro do retˆngulo de visualiza¸˜o e da linha. Se este ´ o caso, existe uma intersec¸˜o a a ca e cacom o retˆngulo de visualiza¸˜o. Na Figura 7.1, os pontos de intersec¸˜o G e H s˜o interiores, mas I a ca ca ae J n˜o s˜o. a a Nesta abordagem, precisamos resolver duas equa¸˜es simultˆneas usando multiplica¸˜o e divis˜o para co a ca acada par < aresta, linha >. Entretanto, este ´ um esquema bastante ineficiente, que envolve quantidade econsider´vel de c´lculos e testes, e portanto deve ser descartado. a a O algoritmo de Cohen-Sutherland ´ mais eficiente, e executa testes iniciais na linha para determinar ese c´lculos de intersec¸˜o podem ser evitados. Primeiramente, verifica pares de pontos extremos. Se a a calinha n˜o pode ser trivialmente aceita, s˜o feitas verifica¸˜es por regi˜es. Por exemplo, duas compara¸˜es a a co o cosimples em x mostram que ambos os pontos extremos da linha EF na Figura 7.1 tˆm coordenada x menor eque xmin, e portanto est˜o na regi˜o a esquerda do retˆngulo de visualiza¸˜o (ou seja, fora do semi-plano a a a cadefinido pela aresta esquerda). A consequˆncia ´ que o segmento EF pode ser trivialmente rejeitado, e e en˜o precisa ser recortado ou tra¸ado. Da mesma forma, podemos rejeitar trivialmente linhas com ambos a cos extremos em regi˜es a direita de xmax , abaixo de ymin e acima de ymax . Se o segmento n˜o pode ser o atrivialmente aceito ou rejeitado, ele ´ subdividido em dois segmentos por uma aresta de recorte, um dos equais pode ser trivialmente rejeitado. Dessa forma, um segmento ´ recortado interativamente testando-se eaceita¸˜o ou rejei¸˜o trivial, sendo subdividido se nenhum dos dois testes for bem-sucedido, at´ que o ca ca esegmento remanescente esteja totalmente contido no retˆngulo ou totalmente fora dele. a Para executar os testes de aceita¸˜o ou rejei¸˜o trivial, as arestas do retˆngulo de visualiza¸˜o s˜o ca ca a ca aestendidas de forma a dividir o plano do retˆngulo de visualiza¸˜o em 9 regi˜es [Figura 7.2]. A cada a ca oregi˜o ´ atribu´ um c´digo de 4 bits, determinado pela posi¸˜o da regi˜o com rela¸˜o aos semi-planos a e ıdo o ca a caexternos `s arestas do retˆngulo de recorte. Uma maneira eficiente de calcular os c´digos resulta da a a oobserva¸˜o de que o bit 1 ´ igual ao bit de sinal de (ymax − y); o 2 ´ o bit de sinal de (y − ymin ); o 3 ´ o ca e e ebit de sinal de (xmax − x), e o 4 e o de (x − xmin ). • 1◦ bit: semiplano acima da aresta superior y > ymax • 2◦ bit: semiplano abaixo da aresta inferior y < ymin • 3◦ bit: semiplano a direita da aresta direita x > xmax • 4◦ bit: semiplano a esquerda da aresta esquerda x < xmin A cada extremidade do segmento de reta ´ atribu´ o c´digo da regi˜o a qual ela pertence. Esses e ıdo o ac´digos s˜o usados para determinar se o segmento est´ completamente dentro do retˆngulo de visualiza¸˜o o a a a caou em um semiplano externo a uma aresta. Se os 4 bits dos c´digos das extremidades s˜o iguais a zero, o aent˜o a linha est´ completamente dentro do retˆngulo. Se ambas as extremidades estiverem no semi plano a a aexterno a uma aresta em particular, como para EF na Figura 7.1, os c´digos de ambas as extremidades otem o bit correspondente `quela aresta igual a 1. Para EF, os c´digos s˜o 0001 e 1001, respectivamente, a o a 79
  • 81. Figura 7.2: C´digos das regi˜es. o oo que mostra com o 4◦ bit que o segmento est´ no semiplano externo ` aresta esquerda. Portanto, se a aum and bit a bit dos c´digos das extremidades for diferente de zero, o segmento pode ser trivialmente orejeitado. Se a linha n˜o puder ser trivialmente aceita ou rejeitada, devemos subdividi-la em dois segmentos de aforma que um deles possa ser rejeitado. A subdivis˜o ´ feita usando uma aresta que seja interceptada pela a elinha para subdividi-la em dois segmentos: a se¸˜o que fica no semiplano externo ` aresta ´ descartada. 0 ca a eteste de quais arestas interceptam a linha segue a mesma ordem dos bits nos c´digos: de cima-para-baixo, oda direita-para-a-esquerda. Uma propriedade chave dos c´digos ´ que os bits iguais a um correspondem o ea arestas interceptadas: se uma extremidade est´ no semiplano externo a uma aresta, e o segmento falha anos testes de rejei¸˜o trivial, ent˜o a outra extremidade deve estar no semiplano interno `quela aresta, ca a aque ´ portanto interceptada pelo segmento. Assim, o algoritmo sempre escolhe um ponto que esteja fora, ee usa os bits do c´digo iguais a um) para determinar uma aresta de recorte. A aresta escolhida ´ a o eprimeira encontrada na ordem pr´-definida, ou seja, a correspondente ao primeiro bit igual a 1 no c´digo. e o 0 algoritmo funciona da seguinte maneira: Calcula primeiramente os c´digos de ambas as extremi- odades, e checa aceita¸˜o ou rejei¸˜o trivial. Se nenhum dos testes for bem-sucedido, tomamos uma ca caextremidade externa (pelo menos uma delas ´ externa), e testamos seu c´digo para obter uma aresta que e oseja interceptada e determinar o ponto de intersec¸˜o. Podemos ent˜o descartar o segmento que vai do ca aextremo externo ao ponto de intersec¸˜o, substituindo o ponto externo pela intersec¸˜o. 0 novo c´digo ca ca opara o segmento correspondente ´ calculado, preparando os dados para a pr´xima itera¸˜o. e o ca Considere por exemplo o segmento AD na Figura 7.4. 0 c´digo do ponto A ´ 0000, e o do ponto D o e´ 1001 . O segmento n˜o pode ser trivialmente aceito ou rejeitado. 0 algoritmo escolhe D como o pontoe aexterno, e o seu c´digo mostra que a linha cruza as arestas superior e esquerda. De acordo com a ordem ode teste, usamos primeiro a aresta superior para recortar AD, gerando B. O c´digo de B ´ 0000 e na o epr´xima intera¸˜o o segmento ser´ trivialmente aceito e tra¸ado. o ca a c Figura 7.3: Funcionamento do algoritmo de Cohen-Sutherland para recorte de segmentos. 80
  • 82. A linha EI requer mais itera¸˜es. O primeiro extremo, E, tem c´digo 0100 e ´ escolhido pelo algoritmo co o ecomo ponto externo. O c´digo ´ testado para obter a primeira aresta que a linha cruza, no caso a aresta o einferior, e EI ´ recortado para FI. Na segunda itera¸˜o, FI n˜o pode ser trivialmente aceito ou rejeitado. e ca aO c´digo da primeira extremidade, F, ´ 0000, de forma que o algoritmo escolhe o ponto externo I, cujo o ec´digo ´ 1010. A primeira aresta interceptada ´ a superior, resultando no segmento FH. O c´digo de H o e e o´ 0010, e a terceira itera¸˜o resulta num corte pela aresta direita. O segmento resultante ´ trivialmentee ca eaceito e tra¸ado na quarta itera¸˜o. O Algoritmo 7.1 e 7.2 ilustram este procedimento. c ca Este algoritmo n˜o ´ o mais eficiente - como os testes e recorte s˜o executados numa ordem fixa, a e aeventualmente ser˜o feitos recortes desnecess´rios. Por exemplo, quando a intersec¸˜o com uma aresta a a cado retˆngulo ´ uma “intersec¸˜o externa”, que n˜o est´ na fronteira do retˆngulo de visualiza¸˜o (ponto a e ca a a a caH na linha EI, Figura 7.4). Existem algoritmos mais eficientes (v. Foley, 3.12), mas este ainda ´ o mais eutilizado, por ser simples e bastante conhecido. typedef enum {LEFT = 0, RIGHT = 1, BOTTOM = 2, TOP = 3} aresta; typedef enum {TRUE, FALSE} boolean; typedef boolean outcode; /* Retorna TRUE se todos os outcodes em codigo sao FALSE, e * FALSE c.c. */ boolean Vazio(outcode codigo[]); /* Retorna TRUE se a interseccao logica entre codigo1 e codigo * 2 e vazia, e FALSE c.c. */ boolean InterseccaoVazia(outcode codigo0[], outcode codigo1 []); /* Retorna TRUE se codigo0 e codigo 1 sao iguais, e FALSE c.c. */ boolean Igual(outcode codigo0[], outcode codigo1[]); /* Calcula outcode para ponto (x,y) */ void CalculaOutCode(float x, float y, outcode codigo[]) { int i; for (i - LEFT; i < = TOP; i++) codigo[i] = FALSE; /* Fim for */ if (y > YMAX) codigo[TOP] = TRUE; else if (y < YMIN) codigo[BOTTOM] = TRUE; /* Fim se */ if (x > xmax) codigo[RIGHT] = TRUE; else if (x < xmax) codigo[BOTTOM] = TRUE; /* Fim Se */ }/* End CalculaOutCode */ Algoritmo 7.1: Calculando os c´digos do algoritmo de Cohen-Sutherland. o7.2 Recorte de Circunferˆncias ePara recortar uma circunferˆncia contra um retˆngulo, podemos primeiro executar um teste de aceita¸˜o/rejei¸˜o e a ca catrivial interceptando a extens˜o da circunferˆncia (um quadrado do tamanho do diˆmetro da circun- a e aferˆncia) com o retˆngulo de visualiza¸˜o usando o algoritmo para recorte de pol´ e a ca ıgonos que ser´ visto a se- aguir. Se a circunferˆncia intercepta o retˆngulo, ela ´ subdivida em quadrantes, e testes de aceita¸˜o/rejei¸˜o e a e ca ca a ´trivial s˜o feitos para cada um. Estes testes podem levar a testes por octantes. E poss´ ent˜o calcular ıvel aa intersec¸˜o da circunferˆncia e da aresta analiticamente, resolvendo suas equa¸˜es simultaneamente, e ca e coa seguir fazer a convers˜o matricial dos arcos resultantes. Se a convers˜o matricial ´ r´pida, ou se a cir- a a e acunferˆncia n˜o ´ muito grande, seria provavelmente mais eficiente usar a t´cnica de scissoring, testando e a e ecada pixel na circunferˆncia contra os limites do retˆngulo antes de tra¸´-lo. e a ca Um algoritmo para recorte de pol´ ıgonos precisa tratar de muitos casos distintos, como mostra a Figura7.5. O caso (a) ´ particularmente interessante porque um pol´ e ıgono cˆncavo ´ recortado em dois pol´ o e ıgonos 81
  • 83. /* algoritmo de recorte de Cohen-Sutherland para linha P0(x0,y0) a * P1(x1,y1), e retangulo de recorte com diagonal de (xmin,ymin) a * (xmax,ymax). */ void RecorteLinhaCohenSutherland(float x0,float y0,float x1,float y1,int valor){ boolean aceito, pronto; outcode outcode0[4], outcode1 [4], *outcode0ut; /* outcodes para P0, P1 e quaisquer outros pontos que estao fora do retangulo de recorte */ float x, y; aceito = FALSE; pronto = FALSE; CalculaOutCode(x0,y0,outcode0); CalcuiaOutCode(xl ,y1 ,outcode1); do { if (vazio(outcode0) && vazio(outcode1)){ /* aceitacao trivial e sai */ aceito = TRUE; pronto = TRUE; }else if (interseccao_vazia(outcode0,outcode1)) /* rejeicao trivial e sai */ pronto = TRUE; else { /* ambos os testes falharam, entao calcula o segmento de reta a recortar: a partir de um ponto externo a uma interseccao com a aresta de recorte */ /* pelo menos um ponto esta fora do retangulo de recorte; seleciona-o */ outcode0ut= vazio(outcode0) ? outcode1 : outcode0; /* acha agora o ponto de interseccao, usando as formulas: y = y0 + inclinacao * (x-x0), x = x0 + ( 1 /inclinacao) * (y-y0) */ if (outcodeOut(TOP)) { /* divide a linha no topo do retangulo de recorte */ x= x0 + (x1-x0) * (ymax-y0)/(y1-y0); y= ymax; }else if (outcode0ut[BOTTOM]) { /* divide a linha na base do retangulo de recorte */ x = x0 + (x1-x0) + (ymin-y0)/(y1-y0); y = ymin; }else if (outcode0ut[RIGHT]) { /* divide a linha na aresta direita do retangulo de recorte */ y = y0 + (y1 -y0) + (xmax-x0)/(x1-x01; x = xmax; }else if (outcode0ut[LEFT]) { /* divide a linha na aresta esquerda do retangulo de recorte */ y = y0 + (y 1 -y0) + (xmin-x0)/(x1-x0); x = xmin; } /* Fim se */ /* agora move o ponto externo para o ponto de interseccao, para recortar e preparar para o proximo passo */ if (igual(outcode0ut,outcode0)) { x0 = x; y0 = y; CalculaOutCode(x0,y0,outcode0); }else{ x1 = x; y1 = y; CalculaOutCode(x1,y1,outcode1); } }/* fim do else da subdivisao */ } while (pronto); if (aceito) MeioPontoLinhaReal(x0,y0,x1,y1),valor); /* versao do algoritmo para coordenadas reais */ } /* fim do algoritmo de recorte e tracado */Algoritmo 7.2: Desenhando a linha com o algoritmo de Cohen-Sutherland. Algumas das fun¸˜es cousadas est˜o ilustradas no Algoritmo 7.2. a 82
  • 84. Figura 7.4: Algoritmo de Sutherland-Hodgman para Recorte de Pol´ ıgonos.Figura 7.5: Exemptos de recorte de pol´ıgonos. (a) M´ltiplos componentes. (b) Caso convexo (c) Caso ucˆncavo com muitas arestas exteriores. oseparados. O problema ´ complexo porque cada aresta do pol´ e ıgono precisa ser testada contra cada arestado retˆngulo de visualiza¸˜o; novas arestas precisam ser acrescentadas, arestas existentes precisam ser a cadescartadas, mantidas ou subdivididas. V´rios pol´ a ıgonos podem resultar do recorte de um unico, e ´ ´ enecess´rio uma abordagem organizada para tratar todos os caso poss´ a ıveis. O algoritmo para recorte de pol´ ıgonos de Sutherland-Hodgman usa a estrat´gia “dividir para conquis- etar”; resolve uma s´rie de problemas simples e idˆnticos cujas solu¸˜es, quando combinadas, resolvem o e e coproblema todo. O problema b´sico consiste em recortar o pol´ a ıgono contra uma unica aresta de recorte ´infinita. Quatro arestas, cada qual definindo um lado do retˆngulo, recortam o pol´ a ıgono sucessivamentecontra o retˆngulo de visualiza¸˜o. a ca Note a diferen¸a entre esta estrat´gia para um pol´ c e ıgono e o algoritmo de Cohen-Sutherland pararecorte de linhas: O algoritmo para pol´ ıgonos recorta quatro arestas sucessivamente, enquanto que oalgoritmo para linhas testa o c´digo para verificar qual aresta ´ interceptada, e recorta apenas quando o enecess´rio. O algoritmo de Sutherland-Hodgman ´ na verdade mais geral: um pol´ a e ıgono (cˆncavo ou oconvexo) pode ser recortado contra qualquer pol´ ıgono de recorte convexo. Em 3D, pol´ ıgonos podem serrecortados contra volumes poliedrais convexos definidos por planos. O algoritmo aceita como entradauma s´rie de v´rtices v1, v2, ..., vn que, em 2D, definem as arestas de um pol´ e e ıgono. A seguir, recortao pol´ıgono contra uma unica aresta de recorte infinita, e retorna outra s´rie de v´rtices que definem o ´ e epol´ ıgono recortado. Num segundo passo, o pol´ ıgono parcialmente recortado ´ recortado novamente contra ea segunda aresta, e assim por diante. O algoritmo movimenta-se em torno do pol´ ıgono, indo do v´rtice vn ao v´rtice v1, e de volta a vn, e eexaminando a cada passo a rela¸˜o entre um v´rtice e a aresta de recorte. Em cada passo, zero, um ou ca edois v´rtices s˜o adicionados ` lista de sa´ dos v´rtices que definem o pol´ e a a ıda e ıgono recortado, dependendo 83
  • 85. da posi¸˜o do v´rtice sendo analisado em rela¸˜o ` aresta de recorte. ca e ca a Figura 7.6: Quatro situa¸˜es poss´ co ıveis no recorte de pol´ ıgonos. S˜o quatro situa¸˜es poss´ a co ıveis (Figura 7.6). Consideremos uma aresta do pol´ ıgono que vai do v´rtice es ao v´rtice p. Suponha que o v´rtice s foi analisado na itera¸˜o anterior, e a intera¸˜o corrente est´ e e ca ca aanalisando p. No caso 1 , a aresta do pol´ ıgono est´ completamente dentro da fronteira do retˆngulo de a avisualiza¸˜o, e o v´rtice p ´ adicionado ` lista de sa´ ca e e a ıda. No caso 2, o ponto i, que define a intersec¸˜o caentre a aresta do pol´ıgono e a aresta do retˆngulo, ´ colocado como um v´rtice na lista de sa´ a e e ıda. No caso3, ambos os v´rtices est˜o fora do retˆngulo, e nenhum ´ colocado na lista de sa´ e a a e ıda. No caso 4, ambos ospontos i (intersec¸˜o) e p, s˜o colocados na lista de sa´ ca a ıda. O procedimento, mostrado no Algoritmo 7.3, aceita um vetor de v´rtices, inVertexArray, e cria outro evetor outVertexArray. Para manter o c´digo simples, n˜o inclu´ o a ımos verifica¸˜o dos erros nos limites dos cavetores, e usamos o procedimento Output() para incluir um v´rtice em outVertexArray. O procedimento eIntersect() calcula a intersec¸˜o de uma aresta s -¿p do pol´ ca ıgono com a aresta clipBoundary, definidapor dois v´rtices da fronteira do pol´ e ıgono de recorte. A fun¸˜o Inside() retorna true se o v´rtice est´ ca e ano interior da fronteira de recorte. Assume-se que o v´rtice est´ no interior da fronteira se estiver “a e aesquerda da aresta de recorte, quando olha-se do primeiro para o segundo v´rtice da aresta”. Esta eorienta¸˜o corresponde a uma enumera¸˜o das arestas no sentido anti-hor´rio. Para calcular se um ponto ca ca aest´ fora da fronteira de recorte, podemos testar o sinal do produto vetorial do vetor normal ` fronteira a ade recorte e da aresta do pol´ıgono. 0 algoritmo ´ bastante geral, e pode ser estruturado para chamar a si pr´prio recursivamente de uma e oforma que o torna bastante eficiente para implementa¸˜o em hardware. ca 84
  • 86. /* Algoritmo de Sutherland-Hodgman para recorte do pol´gonos */ ı#define MAX 20typedef struct {float x,y;} ponto;typedef ponto vertice;typedef vertice aresta[2];typedef vertice VetorVertices[MAX];typedef enum {TRUE = 1, FALSE = 0} boolean;/* Acrescenta um novo vertice a vetorSaida, e atualiza tamSaida */void saida(vertice novoVertice, int *tamSaida, VetorVertices vetorSaida);/* Checa se o vertice esta dentro ou fora da aresta de recorte */boolean dentro(vertice testeVertice, aresta arestaRecorte);/* recorta a aresta (prim,seg) do poligono contra arestaRecorte, * retorna o novo ponto */vertice intercepta(vertice prim, vertice seg, aresta arestaRecorte);void RecortePoligonosSutherlandHodgman( VetorVertices vetorEntrada, /* vetor de vertices de entrada */ VetorVertices vetorSaida, /* vetor de vertices de saida */ int tamEntrada, /* numero de entradas em vetorEntrada */ int tamSaida, /* numero de vertices em vetorSaida */ aresta arestaRecorte /* aresta do poligono de recorte */){ vertice s, p; /* pontos inicial e final da aresta de recorte corrente */ vertice i; /* ponto de interseccao com uma aresta de recorte */ int j; /* contador para o loop de vertices */ *tamSaida = 0; s = vetorEntrada[tamEntrada]; / * comeca com o ultimo vertice em vetorEntrada */ for (j = 1 ;j < = tamEntrada;j + + ) { p= vetorEntrada[j]; /* agora s e p correspondem aos vertices na Fig. */ if (dentro(s,arestaRecorte)) { /* casos 1 e 4 */ if (dentro(s,arestaRecorte)) saida(p,tamSaida,vetorSaida); else { i = intercepta(s,p,arestaRecorte); saida(i,tamSaida,vetorSaida); saida(p,tamSaida,vetorSaida); }/* Fim Se */ }else{ /* casos 2 e 3 */ if (dentro(s,arestaRecorte)) { i = intercepta(s,p,arestaRecorte); saida(i,tamSaida,vetorSaida); }/* Fim Se */ }/*Fim Se */ s = p; }/* fim do for */}/* fim do algoritmo de recorte */ Algoritmo 7.3: Algoritmo de Cohen-Sutherland. 85
  • 87. Cap´ ıtulo 8Curvas e Superf´ ıcies em Computa¸˜o caGr´fica aCurvas e superf´ ıcies tridimensionais (espaciais) desempenham um papel importante: • na engenharia, projeto e manufatura de uma ampla gama de produtos, como autom´veis, cascos de o navios, fuselagem e asas de avi˜es, lˆminas de propuls˜o, sapatos, garrafas, edifica¸˜es, etc. o a a co • na descri¸˜o e interpreta¸˜o de fenˆmenos f´ ca ca o ısicos em ´reas como geologia, f´ a ısica e medicina. • Projeto Geom´trico Apoiado por Computador (Computer Aided Geometric Design): nova e disciplina que incorpora modelos matem´ticos e computacionais desenvolvidos para apoiar os pro- a cessos de engenharia, projeto e manufatura. Frequentemente, superf´ ıcies s˜o descritas por uma malha de curvas definidas em planos ortogonais a(Figura 8.1). As curvas podem ser obtidas atrav´s da digitaliza¸˜o de um modelo f´ e ca ısico ou desenho, eposterior ajuste de uma curva matem´tica aos pontos digitalizados, ou geradas a partir de formula¸˜es a cocriadas especificamente para a defini¸˜o de curvas no espa¸o. ca c Figura 8.1: Representa¸˜o de superf´ ca ıcies atrav´s de malhas. e8.1 Representa¸˜o de Curvas caExistem duas formas alternativas de representa¸˜o: ca • por um conjunto de pontos: nesse caso, uma representa¸˜o visual adequada pode ser gerada ca conectando-se os pontos por segmentos de reta, se estes forem espa¸ados adequadamente (Figura c ??). Observe que nas regi˜es da curva onde a curvatura ´ grande, a proxima¸˜o por segmentos de o e ca 86
  • 88. reta ´ particularmente ruim (Figura ??(a)). Uma maneira de melhorar a representa¸˜o ´ aumentar e ca e a densidade dos pontos nessas regi˜es (Figura ??(b)). o • anal´ ıtica: ou seja, atrav´s de formula¸˜es matem´ticas, o que apresenta v´rias vantagens em rela¸˜o e co a a ca a ` representa¸˜o anterior: ca • precis˜o, a • armazenagem compacta, • facilidade de c´lculo (exato) de pontos intermedi´rios (em uma representa¸˜o por pontos pontos a a ca intermedi´rios precisam ser determinados por interpola¸˜o), a ca • facilidade para calcular propriedades da curva como inclina¸˜o e curvatura (em uma representa¸˜o ca ca por pontos tais propriedades precisam ser calculadas por diferencia¸˜o num´rica, um procedimento ca e que ´ pouco preciso), e • facilidade para desenhar as curvas, • facilidade para fazer altera¸˜es cont´ co ınuas no formato da curva de forma a atender requisitos de projeto (“design”). Figura 8.2: Aproxima¸˜o de curvas por segmentos de reta conectados. ca8.2 Curve Fitting x Curve Fairing8.2.1 Ajuste de curvas (curve fitting)Frequentemente, deseja-se obter representa¸˜es anal´ co ıticas para curvas definidas originalmente por con-juntos de pontos - por exemplo, pontos em uma curva ou superf´ real foram digitalizados. Do ponto ıciede vista matem´tico, esse ´ um problema de interpola¸˜o. Uma curva que ajusta (fit) os pontos da- a e cados passa por todos esses pontos. Uma t´cnica usual de ajuste de curvas s˜o as splines c´ bicas, uma e a uestrat´gia de aproxima¸˜o polinomial por partes. e ca8.2.2 Aproxima¸˜o de curvas (curve fairing) caSe os pontos dados s˜o aproxima¸˜es para valores desconhecidos, por exemplo, s˜o pontos coletados ou a co aobtidos em medidas experimentais, ent˜o o que se deseja ´ uma curva que mostre a tendˆncia dos dados. a e eEm geral, a curva obtida pode n˜o passar por nenhum dos pontos dados, e diz-se que a curva aproxima a(fair ) os dados. Alternativamente, pode-se desejar gerar uma descri¸˜o matem´tica de uma curva no ca aespa¸o sem qualquer conhecimento pr´vio da forma da curva. Para esse caso, t´cnicas usuais s˜o as c e e arepresenta¸˜es de B´zier e B-splines (ambas s˜o estrat´gias de aproxima¸˜o de curvas). co e a e ca8.3 Representa¸˜es Param´tricas e N˜o Param´tricas (expl´ co e a e ıcita e impl´ ıcita)Para uma curva plana, a forma n˜o param´trica expl´ a e ıcita ´ dada por e y = f (x) (8.1)por exemplo, a equa¸˜o de uma linha reta ´ dada por ca e 87
  • 89. y = mx + b (8.2) Desta forma, obt´m-se um valor de y para cada valor de x dado. Consequentemente, curvas fechadas, eou com valores m´ltiplos, como um c´ u ırculo, n˜o podem ser representadas explicitamente. Essa limita¸˜o a can˜o existe no caso de representa¸˜es impl´ a co ıcitas, na forma f (x, y) = 0 (8.3) A equa¸˜o impl´ ca ıcita de segundo grau gen´rica: e ax2 + 2bxy + cy 2 + 2dx + 2ey + f = 0 (8.4) engloba uma variedade de curvas bi-dimensionais denominadas se¸˜es cˆnicas. Os trˆs tipos de co o ese¸˜es cˆnicas s˜o a par´bola, a hip´rbole e a elipse (um c´ co o a a e ırculo ´ um caso especial de uma elipse) e(Figura ??). Figura 8.3: Aproxima¸˜o de curvas por segmentos de reta conectados. ca Dependendo dos valores de a, b, c, d, e e f , diferentes tipos de se¸˜es cˆnicas s˜o produzidas. Se a co o ase¸˜o cˆnica ´ definida em rela¸˜o a um sistema de coordenadas local e passa pela origem, ent˜o f = 0. ca o e ca a8.3.1 Limita¸˜es das representa¸˜es n˜o param´tricas co co a e • Ambas (expl´ ıcita e impl´ıcita) s˜o dependentes do sistema de coordenadas, cuja escolha afeta a a facilidade de uso. Por exemplo, surgem problemas se no sistema de coordenadas escolhido for necess´ria uma inclina¸˜o infinita como condi¸˜o de contorno, pois essa inclina¸˜o n˜o pode ser a ca ca ca a usada diretamente como uma condi¸˜o de contorno num´rica. Ou o sistema de coordenadas ´ ca e e alterado, ou a inclina¸˜o infinita ser´ representada numericamente por um valor muito grande, ca a positivo ou negativo. 88
  • 90. • pontos em uma curva calculados a partir de incrementos uniformes em x ou y n˜o est˜o distribu´ a a ıdos uniformemente ao longo da curva, o que afeta a qualidade e precis˜o de uma representa¸˜o gr´fica. a ca a Estas limita¸˜es s˜o superadas pelo uso de representa¸˜es param´tricas. co a co e Na forma param´trica, cada coordenada de um ponto em uma curva ´ representada como uma fun¸˜o e e cade um unico parˆmetro, sendo que a posi¸˜o de um ponto na curva ´ fixada pelo valor do parˆmetro. ´ a ca e aPara uma curva 2D que usa t como parˆmetro, as coordenadas cartesianas de um ponto na curva s˜o: a a x = x(t) y = y(t) (8.5) O vetor que define a posi¸˜o de um ponto na curva ´ portanto dado por ca e P (t) = [ x(t) y(t) ] (8.6) A derivada, ou vetor tangente da curva ´ dada por e P (t) = [ x (t) y (t) ] (8.7) A inclina¸˜o da curva ´ dada por ca e dx dx dt x (t) = dy = (8.8) dy dt y (t)Observa¸˜es co • A forma param´trica ´ adequada para representar curvas fechadas e com valores m´ltiplos. A forma e e u n˜o param´trica pode ser obtida eliminando-se o parˆmetro para obter uma unica equa¸˜o em x e a e a ´ ca y. • Uma vez que um ponto na curva ´ especificado por um unico valor de parˆmetro, a forma pa- e ´ a ram´trica ´ independente do sistema de coordenadas. Os extremos e o comprimento da curva s˜o e e a fixos pelo intervalo de varia¸˜o do parˆmetro, frequentemente normalizado para , por conveniˆncia. ca a e Como as curvas s˜o independentes do sistema de coordenadas, elas s˜o facilmente manipuladas a a usando as transforma¸˜es geom´tricas afins (ver Cap´ co e ıtulo 5). • Determinar um ponto em uma curva, i.e., determinar o valor de y, dado x, ´ trivial no caso da e representa¸˜o expl´ ca ıcita. No caso da param´trica, ´ necess´rio obter o valor do parˆmetro t, a partir e e a a de x, e a seguir usar este valor para obter y. (Para equa¸˜es param´tricas mais complexas, uma co e t´cnica iterativa pode ser mais conveniente). e • Ambas as formas de representa¸˜o tˆm vantagens e desvantagens em situa¸˜es espec´ ca e co ıficas! Exemplos: 1. segmento de reta Para 2 vetores que especificam as posi¸˜es iniciais P1 e P2, uma representa¸˜o param´trica do co ca e segmento ´ dada por e Como P (t) ´ um vetor de posi¸˜o, cada um de seus componentes tem uma representa¸˜o param´trica e ca ca e x(t) e y(t) entre P 1 e P 2. 2. C´ ırculo no primeiro quadrante Uma compara¸˜o das representa¸˜es visuais obtidas a partir das formas param´trica e n˜o-param´trica ca co e a e para um c´ırculo no primeiro quadrante ´ apresentada na Figura 8.4 (observe que a representa¸˜o e ca param´trica para uma curva n˜o ´ unica!) e a e´ Os pontos na circunferˆncia mostrados nas Figuras 8.4(b) e 8.4(c) foram obtidos com intervalos e constantes dos parˆmetros q e t, respectivamente. A primeira representa¸˜o produz comprimentos a ca de arcos idˆnticos ao longo da circunferˆncia, ao contr´rio da segunda (a qual, entretanto, tem e e a aparˆncia visual melhor que a mostrada em 8.4(a), gerada pela representa¸˜o expl´ e ca ıcita). Por outro lado, o c´lculo das fun¸˜es trigonom´tricas ´ computacionalmente caro, de maneira que a segunda a co e e forma de representa¸˜o param´trica representa um meio termo entre a forma expl´ ca e ıcita e a forma param´trica padr˜o. e a 89
  • 91. Figura 8.4: Pontos de uma circunferˆncia. e8.4 Curvas de B´zier eT´cnicas de aproxima¸˜o de curvas s˜o muito usadas em ambientes de projeto (CAD) interativos, por e ca aserem mais intuitivas do que as t´cnicas de ajuste. Um m´todo adequado para o design de curvas e e esuperf´ ıcies de forma-livre em ambientes interativos foi desenvolvido por Pierre B´zier. Uma curva de eB´zier ´ determinada por um pol´ e e ıgono de defini¸˜o (Figuras 8.5 e ??). ca Figura 8.5: Representa¸˜o de uma curva de B´zier definida pelos pontos B0 , B1 , B2 e B3 . ca e Matematicamente, uma curva de B´zier param´trica ´ definida como e e e n P (t) = Bi Jn,i (t) 0≤t≤1 (8.9) i=0onde as fun¸˜es de blending, ou fun¸˜es base de B´zier s˜o co co e a n Jn,i (t) = ti (1 − t)n−i (8.10) icom n n! = (8.11) i i!(n − i)! Jn,i (t) ´ a i-´sima fun¸˜o base de Bernstein de ordem n, onde n, o grau da fun¸˜o-base, e portanto e e ca cado segmento de curva polinomial, ´ um menos o n´mero de pontos do pol´ e u ıgono de defini¸˜o. Os v´rtices ca edo pol´ ıgono s˜o numerados de 0 a n (como na Figura 8.5). A Figura 8.6 mostra as fun¸˜es de blending a co 90
  • 92. Figura 8.6: Fun¸˜es de blending para v´rios valores de n. co apara v´rios valores de n. Observe a simetria das fun¸˜es. Examinando-se as Equa¸˜es 8.9 a 8.11 para o a co coprimeiro ponto na curva, i.e., em t = 0, verifica-se que Jn,0 (0) = 1 i=0 Jn,i (0) = 0 i=0 (8.12) Portanto, P (0) = B0 Jn,0 (0) = B0 (8.13)e o primeiro ponto na curva coincide com o primeiro ponto do pol´ ıgono de controle. Verifica¸˜o an´loga ca apode ser feita para o ultimo ponto, i.e., em t = 1. As fun¸˜es base da Figura 8.6 ilustram estes resultados. ´ co Al´m disso, pode-se mostrar que para qualquer valor do parˆmetro t, o somat´rio das fun¸˜es base ´ e a o co e1, i.e., n Jn,i = 1 (8.14) i=0 A equa¸˜o para uma curva de B´zier pode ser expressa na forma matricial como ca e P (t) = T N G = F G (8.15) onde F = Jn,0 Jn,1 · · · Jn,n e Gr = B0 B1 · · · Bn . As matrizes espec´ıficas para valores pequenos de n (n = 3, 4) s˜o de particular interesse. Para qualquer avalor de n, a matriz [N] ´ sim´trica em rela¸˜o ` diagonal principal e o canto triangular inferior direito e e ca acont´m apenas zeros. e Em geral, uma forma complexa n˜o pode ser modelada por uma unica curva, mas por v´rias curvas a ´ aque s˜o conectadas em seus pontos extremos. Ao criar as jun¸˜es, o projetista, em geral, deseja controlar a co 91
  • 93. a continuidade nos pontos de jun¸˜o. Continuidade de ordem 0 significa que as 2 curvas se encontram; cacontinuidade de primeira ordem exige que as curvas sejam tangentes no ponto de jun¸˜o, e continuidade cade segunda ordem exige que as curvaturas sejam as mesmas. A formula¸˜o de B´zier apresenta v´rias propriedades interessantes: ca e a • As fun¸˜es-base s˜o reais. co a • O grau do polinˆmio que define uma curva ´ um menos o n´mero de pontos do pol´ o e u ıgono de defini¸˜o. ca • A forma da curva geralmente acompanha a forma do pol´ ıgono de defini¸˜o (na verdade ´ uma vers˜o ca e a “suavizada” da forma do pol´ ıgono (v. Fig. 3.3)). Assim, para desenhar uma curva, basta definir o pol´ ıgono e depois ajustar os pontos que forem necess´rios para aproximar melhor a forma desejada. a Isso torna a formula¸˜o adequada para o design interativo. Um projetista experiente consegue obter ca a forma desejada depois de 2 ou 3 intera¸˜es com um sistema computacional. co • O primeiro e ultimo pontos da curva coincidem com o primeiro e ultimo pontos do pol´ ´ ´ ıgono de defini¸˜o. Em situa¸˜es pr´ticas, em geral ´ desej´vel ter controle direto sobre os pontos extremos ca co a e a da curva. • Os vetores tangentes nos extremos da curva tˆm a mesma dire¸˜o que o primeiro e o ultimo seg- e ca ´ mentos do pol´ıgono de defini¸˜o, respectivamente. ca • A curva est´ contida no fecho convexo do pol´ a ıgono de defini¸˜o, i.e., no maior pol´ ca ıgono convexo que pode ser obtido com os v´rtices do pol´ e ıgono de defini¸˜o (Figura 8.5). Uma consequˆncia simples ca e deste fato ´ que um pol´ e ıgono plano sempre gera uma curva plana. A importˆncia desta propriedade est´ principalmente no contexto de verifica¸˜o de interferˆncia. a a ca e Suponha que desejamos saber se 2 curvas se interceptam. Por exemplo, cada uma representa o caminho a ser percorrido pelo bra¸o de um robˆ, e nosso objetivo ´ garantir que os caminhos n˜o se c o e a interceptam, evitando colis˜es. Ao inv´s de tentar calcular uma poss´ intersec˜o, podemos fazer o e ıvel a um teste muito mais barato: envolver o pol´ ıgono de controle no menor retˆngulo que o cont´m a e e cujas arestas s˜o paralelas a um sistema de coordenadas (minmax boxes). O retˆngulo cont´m a a e o pol´ıgono de controle e, pela propriedade do fecho convexo, cont´m tamb´m a curva. Verficar e e se os 2 retˆngulos se interceptam ´ um teste trivial, e fica simples checar a n˜o-intersec¸˜o. Se a e a ca houver intersec¸˜o dos retˆngulos, mais verifica¸˜es precisam ser feitas nas curvas. A possibilidade ca a co de detectar n˜o-interferˆncia de forma r´pida ´ muito importante, pois na pr´tica ´ freq¨ente que a e a e a e u tais testes precisem ser feitos milhares de vezes para cada objeto. • A curva exibe a propriedade da varia¸˜o decrescente (variation diminishing property). Isto significa, ca basicamente, que a curva n˜o oscila em rela¸˜o a qualquer linha reta com mais frequˆncia que o a ca e pol´ ıgono de defini¸˜o. Algumas representa¸˜es matem´ticas tˆm a tendˆncia de amplificar, ao inv´s ca co a e e e de suavizar, quaisquer irregularidades de formato esbo¸adas pelos pontos de defini¸˜o, enquanto c ca que outras, como as curvas de B´zier, sempre suavizam os pontos de controle. Assim, a curva nunca e cruza uma linha reta arbitr´ria mais vezes que a sequˆncia de segmentos que conectam os pontos a e de controle (v. Fig.) • A curva ´ invariante sob transforma¸˜es afins. Transforma¸˜es afins est˜o dispon´ e co co a ıveis em qualquer sistema de CAD, pois ´ essencial reposicionar, escalar, etc. os objetos. Esta propriedade garante e que os 2 procedimentos abaixo produzem os mesmos resultados: a) primeiro calcula um ponto na curva, e depois aplica a ele uma transforma¸˜o afim; e b) primeiro, aplica uma transforma¸˜o afim ca ca ao pol´ ıgono de defini¸˜o, e depois gera o ponto na curva. ca Uma consequˆncia pr´tica: suponha que tra¸amos uma curva c´bica calculando 100 pontos sobre ela; e a c ue que agora queremos desenhar a mesma curva depois de uma rota¸˜o. Podemos aplicar a rota¸˜o a ca cacada um dos 100 pontos, e desenhar os pontos resultantes, ou aplicar a rota¸˜o a cada um dos 4 pontos cado pol´ ıgono de controle, calcular novamente os 100 pontos e tra¸´-los. A primeira estrat´gia requer que ca e ca ca ´a rota¸˜o seja aplicada 100 vezes, e a segunda requer a sua aplica¸˜o apenas 4 vezes! E interessanteobservar que as curvas de B´zier n˜o s˜o invariantes sob transforma¸˜es projetivas. e a a coBibliografiaFonte: Caps. 4,5 Rogers & Adams - Mathematical Elements for Computer Graphics 92
  • 94. Cap´ ıtulo 9Apostila ModelagemO texto sobre modelagem pode ser encontrado no seguinte endere¸o: c http://gbdi.icmc.usp.br/documentacao/apostilas/cg/downloads/modelagem.pdf 93
  • 95. Cap´ ıtulo 10RenderingEsta apostila est´ sob revis˜o e ser´ adicionada nesta vers˜o assim que poss´ a a a a ıvel. A vers˜o anterior pode aser encontrada em: http://gbdi.icmc.usp.br/∼cg/ap10.html 94
  • 96. Cap´ ıtulo 11Cores e Sistemas de Cores11.1 Percep¸˜o de Cor caA cor ´ o atributo da percep¸˜o visual que pode ser descrito atrav´s dos nomes usados para identificar as e ca ecores, como branco, cinza, preto, amarelo, etc., ou da combina¸˜o delas. As diferentes cores, ou espectros caluminosos, que podem ser percebidos pelo sistema visual humano correspondem a uma pequena faixa defreq¨ˆncias do espectro eletromagn´tico, que inclui as ondas de r´dio, microondas, os raios infravermelhos ue e ae os raios X, como mostrado na Figura 11.1. Figura 11.1: Espectro eletromagn´tico [Gro94]. e A freq¨ˆncia mais baixa do espectro vis´ ue ıvel corresponde ` cor vermelha (4.3 × 1014 hertz) e a mais a 14alta ` cor violeta (7.5 × 10 hertz). Os valores de freq¨ˆncia intermedi´rios correspondem a cores que a ue apassam pelo alaranjado e amarelo e por todas as outras cores, at´ chegar nos verdes e azuis. As cores es˜o ondas eletromagn´ticas descritas pelo seu comprimento de onda (l) e especificadas, tipicamente, em a enanˆmetros (nm). o Os comprimentos de onda maiores possuem distˆncias focais maiores e, conseq¨entemente, requerem a umaior curvatura da lente do olho para serem focalizados, (a cor vermelha possui a maior distˆncia focal ae a azul, a menor). A utiliza¸˜o simultˆnea de cores localizadas em extremos opostos do espectro fazem ca acom que a lente altere o seu formato constantemente, causando cansa¸o no olho. A vis˜o estereosc´pica c a oda cor ´ um efeito relacionado ao processo de focaliza¸˜o da imagem na retina, que faz com que cores e capuras localizadas ` mesma distˆncia do olho pare¸am estar a distˆncias diferentes; por exemplo, a cor a a c avermelha parece estar mais pr´xima e a cor azul parece estar mais distante. o Uma fonte de luz (como, por exemplo, o sol ou uma lˆmpada) emite em todas as freq¨ˆncias do a ueespectro vis´ ıvel, produzindo a luz branca que incide sobre um objeto. Parte dessa luz ´ absorvida e a outra eparte ´ refletida, determinando a cor resultante do objeto. Quando h´ predominˆncia das freq¨ˆncias e a a uebaixas, diz-se que o objeto ´ vermelho, ou que a luz percebida possui uma freq¨ˆncia dominante (ou um e uecomprimento de onda dominante) na freq¨ˆncia baixa do espectro. A freq¨ˆncia dominante tamb´m ´ ue ue e echamada de matiz ou, simplesmente, de cor da luz. O matiz ´ o atributo de uma sensa¸˜o visual que faz com que uma ´rea pare¸a ser similar a uma e ca a cou 2 das cores percebidas vermelha, amarela, laranja, azul, p´rpura [Hun78]. A partir dessa defini¸˜o, u capode-se diferenciar a cor crom´tica, que possui matiz, da acrom´tica, que ´ desprovida de matiz. As a a ecaracter´ ısticas da luz s˜o descritas atrav´s de propriedades como o matiz e as sensa¸˜es de brilho e a e cosatura¸˜o. O matiz ´ usado para dar um nome a uma cor, o brilho corresponde ao grau de luminˆncia ca e a 95
  • 97. de uma cor em rela¸˜o ` luminˆncia de outra ou em rela¸˜o ao fundo, e a satura¸˜o ´ a pureza aparente ca a a ca ca ede um matiz. Quanto maior o dom´ ınio de um comprimento de onda, maior ´ a sua satura¸˜o. As cores e capreta, branca e cinza possuem satura¸˜o uniforme em todos os comprimentos de onda e, por isso, s˜o ca adiferenciadas apenas pelo brilho. As propriedades de satura¸˜o e de matiz de uma cor s˜o referenciadas ca acomo cromaticidade. Algumas pessoas possuem uma anomalia, denominada daltonismo, que impede a distin¸˜o de uma ou camais cores. O daltonismo se deve a um defeito na constitui¸˜o dos cones e est´ vinculada ao sexo. Ele ca aatinge cerca de 8% dos homens, e apenas 0.5% das mulheres. Esse defeito pode se manifestar em 1, 2 ounos 3 tipos de receptores. Os tricomatas s˜o daltˆnicos que possuem os 3 sistemas de pigmentos, mas que a outilizam os sistemas em propor¸˜es diferentes das pessoas normais e das pessoas com o mesmo defeito. Os codicromatas percebem as cores defeituosamente porque combinam apenas 2 sistemas. Os monocromataspercebem apenas gradua¸˜es de claro e de escuro, pois sua estimula¸˜o visual se baseia em um unico co ca ´sistema crom´tico. Um outro aspecto que tamb´m influencia na percep¸˜o de cores ´ o amarelamento das a e ca elentes do olho que ocorre com o passar dos anos, fazendo com que as pessoas se tornem menos sens´ ıveis,por exemplo ` cor amarela do que ` cor azul. a a11.2 Sistemas de Cores Prim´rias aO conte´do desta se¸˜o, que descreve alguns sistemas de cores prim´rias, foi baseado principalmente em u ca aHearn [Hea94], Cap´ ıtulo 15. Um sistema de cores ´ um m´todo que explica as propriedades ou o comportamento das cores num e econtexto particular. N˜o existe um sistema que explique todos os aspectos relacionados ` cor. Por isso, a as˜o utilizados sistemas diferentes para ajudar a descrever as diferentes caracter´ a ısticas da cor que s˜o apercebidas pelo ser humano. Existem v´rios sistemas de cores, sendo que ser˜o apresentados apenas a aalguns dos principais: o XYZ, o RGB, o HSV e o HLS. As cores prim´rias s˜o as 2 ou 3 cores que um sistema utiliza para produzir outras cores. As cores a apodem ser produzidas a partir de uma combina¸˜o das prim´rias, ou ent˜o, da composi¸˜o de 2 com- ca a a cabina¸˜es. O universo de cores que podem ser reproduzidas por um sistema ´ chamado de espa¸o de cores co e c(color space ou color gamut). Alternativamente, um espa¸o de cores (color space) pode ser definido como cuma representa¸˜o visual de um modelo de cores, como o cubo definido pelas componentes do modelo caRGB, ou o cone definido pelo modelo HSV. N˜o existe um conjunto finito de cores prim´rias que pro- a aduza todas as cores vis´ ıveis, mas sabe-se que uma grande parte delas pode ser produzida a partir de 3prim´rias. a O estudo da utiliza¸˜o de 3 fontes de luz espectral para a gera¸˜o de cores ´ chamado de colorimetria, e ca ca etem como um de seus objetivos determinar espa¸os de cor perceptualmente uniformes. Um espa¸o de cores c c(ou sistema de cores) perceptualmente uniforme ´ um no qual distˆncias perceptuais iguais separam todas e aas cores. Por exemplo, a escala de cinzas do espa¸o deve transmitir uma transi¸˜o suave entre o preto c cae o branco. A defini¸˜o de um espa¸o de cores uniforme ´ feita atrav´s de medi¸˜es emp´ ca c e e co ıricas obtidassob condi¸˜es experimentais rigidamente controladas - as condi¸˜es do ambiente e outros parˆmetros co co aimportantes devem ser mantidos constantes, como o tamanho das amostras de cores, o espa¸amento centre as amostras, a luminˆncia e cromaticidade do fundo e da luz ambiente. Apesar dessa limita¸˜o, a caos espa¸os perceptuais de cores fornecem ferramentas adequadas para a solu¸˜o de problemas como a c cacompress˜o de imagens (para decidir o n´ a ıvel de codifica¸˜o da informa¸˜o de cor) e pseudo-colora¸˜o1 ca ca ca(para mapear as cores da imagem em um conjunto com espa¸amento perceptual m´ximo). c a Os sistemas de cores podem ser aditivos ou subtrativos. Nos modelos aditivos (por exemplo, RGBe XYZ), as intensidades das cores prim´rias s˜o adicionadas para produzir outras cores. A Figura 11.2 a ailustra a demonstra¸˜o do funcionamento desses modelos atrav´s da sobreposi¸˜o de c´ ca e ca ırculos coloridos. Pode-se pensar que o branco ´ a mistura das intensidades m´ximas das 3 cores prim´rias aditivas e a a(vermelha, verde e azul). Os matizes intermedi´rios (amarelo, turquesa e magenta) s˜o obtidos atrav´s a a eda combina¸˜o das intensidades m´ximas de 2 cores. ca a Nos modelos subtrativos (por exemplo, o CMY), as cores s˜o geradas subtraindo-se o comprimento da aonda dominante da luz branca, por isso, a cor resultante corresponde ` luz que ´ refletida. A Figura 11.3 a eilustra a demonstra¸˜o do funcionamento desses modelos atrav´s da sobreposi¸˜o de c´ ca e ca ırculos coloridos. Pode-se pensar que o preto ´ a combina¸˜o das 3 cores subtrativas (turquesa, magenta e amarela). e caA quantidade de preto numa cor ´ indicada pela diferen¸a entre o branco e a intensidade m´xima das 3 e c acores prim´rias aditivas. E, da mesma forma, a quantidade de branco numa cor ´ indicada pela diferen¸a a e centre o preto e a intensidade m´ ınima das 3 cores prim´rias aditivas. a 1 A colora¸˜o “falsa” (“pseudocoloring”) ocorre quando as cores “verdadeiras” de uma imagem s˜o mapeadas em outro ca aconjunto de cores, ou quando uma imagem adquirida em tons de cinza ´ colorida. e 96
  • 98. Figura 11.2: Ilustra¸˜o da mistura de cores aditivas [For94]. ca Figura 11.3: Ilustra¸˜o da mistura de cores subtrativas [For94]. ca As cores puras e saturadas n˜o representam toda a classe de cores poss´ a ıveis, existem ainda os tints,shades e tones que correspondem, respectivamente, `s cores obtidas atrav´s da adi¸˜o de branco, preto e a e cacinza `s cores saturadas, causando uma altera¸˜o no efeito da cor. A Figura 11.42 ilustra de tints, shades a cae tones obtidos a partir da cor vermelha. Figura 11.4: Ilustra¸˜o da obten¸˜o de tints, shades e tones. ca ca A adi¸˜o de branco clareia uma cor e cria um tint (por exemplo, adicionando branco ao vermelho capara obter a cor pink). A adi¸˜o de preto escurece uma cor e cria um shade (por exemplo, adicionando capreto ao vermelho para obter um castanho-avermelhado (maroon). Al´m disso, a adi¸˜o de cinza reduz e cao brilho de uma cor e cria um tone. Uma composi¸˜o monocrom´tica ´ formada inteiramente de tints, ca a eshades e tones da mesma cor.11.3 Modelo XYZO sistema XY Z de cores prim´rias da CIE (Comiss˜o Internacional de Ilumina¸˜o) ´ um sistema aditivo a a ca eque descreve as cores atrav´s de 3 cores prim´rias virtuais X, Y e Z. Esse sistema foi criado devido ` e a ainexistˆncia de um conjunto finito de cores prim´rias que produza todas as cores vis´ e a ıveis poss´ ıveis. Nessesistema, as cores Cl podem ser expressas pela seguinte equa¸˜o: ca Cl = x.X + y.Y + z.Z (11.1) 2 reproduzida de http://www.contrib andrew.cmu.edu:8001/usr/dw4e/color/tints.html. 97
  • 99. em que X, Y e Z especificam as quantidades das prim´rias padr˜es necess´rias para descrever uma a o acor espectral. A normaliza¸˜o dessa quantidade em rela¸˜o ` luminˆncia (X + Y + Z) possibilita a ca ca a acaracteriza¸˜o de qualquer cor. As cores desse sistema podem ser expressas como combina¸˜es das ca coquantidades normalizadas abaixo: X Y Z x= y= z= (11.2) X +Y +Z X +Y +Z X +Y +Z com x + y + z = 1. Assim, qualquer cor pode ser definida apenas pelas quantidades de x e yque, por dependerem apenas do matiz e da satura¸˜o, s˜o chamadas de coordenadas de cromaticidade. ca aA descri¸˜o completa de uma cor ´ dada pelas coordenadas de cromaticidade e pelo valor de um dos 3 ca eest´ ımulos originais, normalmente do Y , que cont´m a informa¸˜o de luminˆncia. Essa descri¸˜o possibilita e ca a caa obten¸˜o das quantidades de X e Z com as equa¸˜es abaixo: ca co x z X= Y Z= Y (11.3) y yonde z = 1 − x − y. O sistema XYZ ´ formado por cores imagin´rias que s˜o definidas matematicamente. Nesse sistema, as e a acombina¸˜es de valores negativos e outros problemas relacionados ` sele¸˜o de um conjunto de prim´rias co a ca areais s˜o eliminados. As coordenadas de cromaticidade x e y permitem representar todas as cores num agr´fico bidimensional. O tra¸ado dos valores normalizados de x e y para as cores no espectro vis´ a c ıvelresulta na curva ilustrada na Figura 11.5. Figura 11.5: Diagrama de cromaticidade do CIE [Hea94]. Os pontos que representam as cores puras no espectro eletromagn´tico s˜o rotulados de acordo com os e aseus comprimentos de onda e est˜o localizados ao longo da curva que vai da extremidade correspondente aa` cor vermelha at´ a extremidade correspondente ` cor violeta. A linha reta que une os pontos espectrais e avermelho e violeta ´ chamada linha p´rpura, e n˜o faz parte do espectro. Os pontos internos correspondem e u aa todas as combina¸˜es poss´ co ıveis de cores vis´ ıveis, e o ponto C corresponde ` posi¸˜o da luz branca. a ca Devido ` normaliza¸˜o, o diagrama de cromaticidade n˜o representa os valores de luminˆncia. Por isso, a ca a aas cores com luminˆncias diferentes e cromaticidades iguais s˜o mapeadas no mesmo ponto. Atrav´s desse a a ediagrama, ´ poss´ e ıvel determinar e comparar os espa¸os de cores dos diferentes conjuntos de prim´rias, c aidentificar as cores complementares (2 cores que, somadas, produzem a cor branca) e determinar ocomprimento de onda dominante e a satura¸˜o de uma cor. ca Os espa¸os de cor s˜o representados no diagrama, ilustrado na Figura 11.6a, atrav´s de linhas retas c a eou de pol´ıgonos. Todas as cores ao longo da linha que une os pontos C1 e C2 na Figura 11.6a podemser obtidas atrav´s da mistura de quantidades apropriadas das cores correspondentes a esses pontos. A eescala de cores para 3 pontos (por exemplo, C3 , C4 e C5 na Figura 11.6a) ´ representada por um triˆngulo e acujos v´rtices s˜o definidos pelas cores correspondentes `s 3 posi¸˜es e inclui cores contidas no interior e e a a conas margens fronteiri¸as desse triˆngulo. c a Observando o diagrama ´ poss´ perceber que nenhum conjunto formado por 3 prim´rias pode gerar e ıvel atodas as cores, pois nenhum triˆngulo contido no diagrama abrange todas as cores poss´ a ıveis. As corescomplementares s˜o identificadas por 2 pontos localizados em lados opostos do ponto C e conectados por auma linha reta. Por exemplo, misturando quantidades apropriadas de 2 cores C1 e C2 (Figura 11.6b),obt´m-se a luz branca. e 98
  • 100. Figura 11.6: Representa¸˜o de escalas de cor no diagrama de cromaticidade do CIE [Hea94]. ca A determina¸˜o do comprimento de onda dominante de uma cor pode ser feita interpretando-se caa escala de cores entre 2 prim´rias. O comprimento de onda dominante da cor C1 , representada na aFigura 11.6c, ´ determinado tra¸ando-se uma linha reta que parte do ponto C passando pelo ponto C1 e e cintersectando a curva espectral no ponto Cs . A cor C1 , corresponde ent˜o, ` combina¸˜o da luz branca a a cacom a cor espectral Cs , pois Cs ´ o comprimento de onda dominante de C1 . O comprimento de onda edominante das cores que est˜o entre o ponto C e a linha p´rpura ´ determinado de outra forma. Tra¸a-se a u e cuma linha a partir do ponto C (Figura 11.6c) passando pelo ponto C2 e intersectando a linha p´rpurauno ponto Cp . Como esse ponto n˜o pertence ao espectro vis´ a ıvel, o ponto C2 ´ referenciado como sendo euma cor n˜o espectral e o seu comprimento de onda dominante ´ obtido atrav´s do prolongamento da a e ereta at´ que ela intercepte a curva espectral, no ponto Csp . As cores n˜o espectrais est˜o entre p´rpura e a a ue magenta, e s˜o geradas atrav´s da subtra¸˜o do comprimento da onda dominante (como, por exemplo, a e cao Csp ) da luz branca. A pureza de uma cor (por exemplo, de C1 na figura 11.6c) ´ determinada atrav´s da distˆncia relativa e e ado ponto C1 , que corresponde ` linha reta que vai do ponto C at´ o ponto Cs . Pode-se calcular a pureza a edo ponto C1 atrav´s da rela¸˜o dc1 , onde dc1 representa a distˆncia entre C e C1 e dcs representa a e ca dcs a 1distˆncia entre C e Cs . A cor C1 ´ cerca de 25% pura porque est´ situada a aproximadamente 4 da a e adistˆncia total entre C e Cs . a11.4 Modelo RGB (Red, Green, Blue)O sistema RGB de cores prim´rias tamb´m ´ aditivo e est´ baseado na teoria dos 3 est´ a e e a ımulos (TristimulusColor Theory) proposta por Young-Helmholtz e discutida na se¸˜o 2.3. Segundo essa teoria, o olho cahumano percebe a cor atrav´s da estimula¸˜o dos 3 pigmentos visuais presentes nos cones da retina, que e capossuem picos de sensibilidade aproximada nos seguintes comprimentos de onda: 630 nm (Vermelho-Red ), 530 nm (Verde-Green) e 450 nm (Azul-Blue). Esse sistema pode ser representado graficamenteatrav´s do cubo unit´rio definido sobre os eixos R, G e B, como ilustrado na Figura 11.7. e a A origem representa a cor preta, o v´rtice de coordenadas (1, 1, 1) representa a cor branca, os v´rtices e eque est˜o sobre os eixos representam as cores prim´rias e os demais v´rtices representam o complemento a a ede cada cor prim´ria. Cada ponto no interior do cubo corresponde a uma cor que pode ser representada apela tripla (R, G, B), com os valores R, G e B variando de 0 a 1. Os tons de cinza s˜o representados ao alongo da diagonal principal do cubo, que vai da origem (ponto correspondente a cor preta) at´ o v´rtice e eque corresponde ` cor branca. Cada tom ao longo dessa diagonal ´ formado por contribui¸˜es iguais de a e cocada prim´ria. Logo, um tom de cinza m´dio entre o branco e o preto ´ representado por (0.5, 0.5, 0.5). a e eAs cores Cl desse sistema podem ser expressas na forma: Cl = r.R + g.G + b.B (11.4) A resposta do olho aos est´ ımulos espectrais n˜o ´ linear e, por isso, algumas cores n˜o podem ser a e areproduzidas pela sobreposi¸˜o das 3 prim´rias. Isso significa que algumas cores existentes na natureza ca an˜o podem ser mostradas nesse sistema. Por isso, um fenˆmeno natural colorido como, por exemplo, de a oforma¸˜o de rochas, n˜o pode ser reproduzido com precis˜o (conforme discutido em Wolf [Wol93]). ca a a 99
  • 101. Figura 11.7: Cubo do RGB [Fol96].11.5 Modelo HSV (Hue, Saturation, Value)O sistema HSV utiliza descri¸˜es de cor que s˜o mais intuitivas do que combina¸˜es de um conjunto co a code cores prim´rias e, por isso, ´ mais adequado para ser usado na especifica¸˜o de cores em n´ a e ca ıvel deinterface com o usu´rio. A cor ´ especificada atrav´s de uma cor espectral e das quantidades de branco e a e epreto que ser˜o adicionadas para a obten¸˜o de shades, tints e tones diferentes. A representa¸˜o gr´fica a ca ca atridimensional do sistema HSV ´ um cone de 6 lados derivado do cubo RGB, mostrado na figura 11.8. e Figura 11.8: Cone hexagonal do HSV [Fol96]. Os parˆmetros de cor utilizados nesse sistema s˜o o matiz (hue), a satura¸˜o (saturation) e a lu- a a caminˆncia (value). Os v´rios matizes est˜o representados na parte superior do cone, a satura¸˜o ´ medida a a a ca eao longo do eixo horizontal e a luminˆncia ´ medida ao longo do eixo vertical, que passa pelo centro do a econe. O matiz, que corresponde `s arestas ao redor do eixo vertical, varia de 0◦ (vermelho) a 360◦ , e o aˆngulo entre os v´rtices ´ de 60◦ . A satura¸˜o varia de 0 a 1 e ´ representada como sendo a raz˜o entrea e e ca e aa pureza de um determinado matiz e a sua pureza m´xima (S = 1). Um determinado matiz possui 1 a 4de pureza em S = 0.25. Quando S = 0 tem-se a escala de cinzas. A luminˆncia varia de 0 (no pico do acone), que representa a cor preta, a 1 (na base), onde as intensidades das cores s˜o m´ximas. a a11.6 Modelo HLS (Hue, Lightness, Saturation)O sistema HLS3 tamb´m ´ baseado em parˆmetros mais intuitivos para a descri¸˜o de cores. e e a ca A representa¸˜o gr´fica tridimensional desse sistema ´ um cone duplo, como mostra a figura 9. Os 3 ca a eparˆmetros de cor utilizados s˜o o matiz (hue), a luminosidade (lightness 4 ) e a satura¸˜o (saturation). a a ca 3 Outros autores denominam esse sistema como Hue, Luminance, Saturation [Rog93a]. 4 Luminosidade (lightness): Segundo Foley [Fol96], esse termo est´ relacionado ` no¸˜o acrom´tica da intensidade per- a a ca acebida de um objeto que reflete luz. Brilho (brightness) ´ usado no lugar de luminosidade para denotar a intensidade epercebida de um objeto que emite luz. 100
  • 102. Figura 11.9: Cone duplo do HLS [Fol96].O ˆngulo em rela¸˜o ao eixo vertical varia de 0◦ (matiz azul) a 360◦ em intervalos de 60◦ e especifica a caum matiz. O eixo vertical corresponde ` luminosidade e varia de 0 (preto) a 1 (branco) e ´ onde se a eencontra a escala de cinzas. A satura¸˜o varia de 0 a 1, e os matizes puros s˜o encontrados no plano ca aonde a luminosidade ´ igual a 0.5 e a satura¸˜o ´ igual a 1. Quanto menor o valor da satura¸˜o menor ´ e ca e ca ea pureza do matiz; e quando a satura¸ao ´ igual a 0, tem-se a escala de cinzas. c˜ e Os sistemas HLS e HSV permitem que se pense em termos de cores mais “claras” e mais “escuras”. Ascores s˜o especificadas atrav´s de um ˆngulo, e os diversos shades, tints, e tones de cada cor s˜o obtidos a e a aatrav´s do ajuste do brilho ou luminosidade e da satura¸˜o. As cores mais claras s˜o obtidas atrav´s do e ca a eaumento do brilho ou da luminosidade e as cores mais escuras pela diminui¸˜o dos mesmos. As cores caintermedi´rias s˜o obtidas atrav´s da diminui¸˜o da satura¸˜o. a a e ca ca 101
  • 103. Cap´ ıtulo 12Processamento Digital de Imagens12.1 Introdu¸˜o caA ´rea de Processamento Digital de Imagens tem crescido consideravelmente nas ultimas duas d´cadas, a ´ ecom a utiliza¸˜o de imagens e gr´ficos em uma grande variedade de aplica¸˜es, aliado ao fato de que ca a coa tecnologia de constru¸˜o de computadores tamb´m tem se aprimorado, possibilitando a utiliza¸˜o de ca e casistemas mais eficientes e mais baratos. Muitas ´reas vˆm utilizando Sistemas de Processamento Digital a ede Imagens, tais como: reconhecimento de padr˜es (ind´stria), medicina, agricultura, pesquisas espaciais, o umeteorologia, etc.12.2 Considera¸˜es Sobre Imagens coUma imagem cont´ ınua, ´ digitalizada atrav´s de dois processos: e e • Amostragem (Sampling): digitaliza¸˜o em termos espaciais (tamanho da grade de digitaliza¸˜o); ca ca • Quantiza¸˜o: digitaliza¸˜o em termos de amplitude (no de n´ ca ca ıveis de cinza). A Figura 12.1, ilustra o processo de quantiza¸˜o, para v´rios tamanhos de grade. A Figura ??, ca aapresenta uma imagem de 512x512 pixels, quantizada de v´rias formas. a Matematicamente, Imagem Digital pode ser definida como uma fun¸˜o bidimensional A(x, y) definida caem uma certa regi˜o do plano. a A : [0, r] × [0, s] → [0, t] (12.1) Assim a imagem ´ definida num retˆngulo [0, r]×[0, s], e os valores tomados est˜o contidos no intervalo e a a[0, t]. Ao valor A(x, y) no ponto (x, y) d´-se o nome de N´ de cinza. a ıvel Imagens s˜o geralmente definidas como uma grande cole¸˜o de dados, que est˜o frequentemente a ca adispostos em forma de uma matriz ou alguma outra estrutura de dados discreta. Uma imagem, ´ representada atrav´s de um conjunto de valores, onde cada valor ´ um n´mero que e e e udescreve os atributos de um pixel na imagem. Usualmente estes n´meros s˜o inteiros positivos, que u arepresentam a intensidade na escala de tons de cinza de um ponto da imagem, ou a cor associada aoponto pela “look-up table”, em sistemas que comportam este procedimento. Quando utiliza-se escalas detons de cinza, usualmente associa-se a tonalidade de cinza mais escura, o preto, ao n´ zero da escala de ıvelcinza, e o mais claro, o branco, ao maior valor permitido na escala. Ou seja, se cada pixel ´ representado eem um sistema de 8-bits, o preto ´ associado ao valor zero, e o branco ao valor 255. e As dimens˜es do conjunto de valores que especifica a imagem s˜o chamadas de largura e altura da o aimagem, e o n´mero de bits associado com cada pixel da matriz ´ chamado de profundidade da imagem. u eA profundidade da imagem est´ associada ao n´mero de planos de mem´ria em que uma imagem ´ a u o emapeada, sendo que cada bit da palavra que armazena o valor do pixel reside em um plano da imagem(“frame buffer”). Na Figura 12.3 mostra-se um esquema de um pixel p com profundidade 8. Atrav´s de Processamento Digital de Imagens, pode-se analisar e modificar imagens por computador. eOs objetivos deste processamento s˜o: a 1. Extrair informa¸˜o da imagem, ou seja, reconhecer elementos que comp˜em a imagem, permitir ca o medir elementos contidos na imagem, classific´-los e compar´-los com algum modelo colocado. a a 102
  • 104. Figura 12.1: Efeitos sobre uma imagem, de se reduzir o tamanho da grade de amostragem. 2. Transformar a imagem (aumentando contraste, real¸ando bordas, corrigindo alguma imperfei¸˜o c ca gerada na imagem durante o processo de aquisi¸˜o), de forma que a informa¸˜o seja mais facilmente ca ca discern´ por um analista humano. ıvel12.3 Tabelas “Look-up”Em sistemas que permitem trabalhar com cores, cada cor ´ uma composi¸˜o de trˆs cores prim´rias: e ca e avermelho, verde e azul (do inglˆs, RGB). E os n´ e ıveis de cinza tamb´m s˜o uma composi¸˜o das trˆs e a ca ecores, sendo que todas entram em partes iguais. Logo, o n´mero de bits utilizados para representar o uvalor do pixel ´ dividido entre as trˆs cores. Assim, se um pixel possui profundidade 1 (um bit por pixel), e eo pixel poder´ ser pintado apenas com duas cores (21 ) (por exemplo, em preto e branco). Se o pixel autiliza dois bits, poder´ produzir no m´ximo quatro cores (22 ), e assim por diante. Usualmente 6 bits s˜o a a asuficientes para permitir a visualiza¸˜o da imagem de forma que n˜o se perceba descontinuidade entre ca aas tonalidades de cinza, mas 8 ou mais bits podem ser necess´rios em algumas aplica¸˜es. Assim, para a comonitores coloridos, sugere-se que trˆs vezes a quantidade de bits necess´ria ´ um bom valor, ou seja, 8 e a ebits para cada cor prim´ria aditiva (vermelha, verde e azul - RGB), produzindo 24 bits por pixel. a Em muitos sistemas gr´ficos ´ desej´vel poder-se alterar rapidamente a colora¸˜o da imagem sem a e a caalterar a sua forma. Assim permite-se alterar a aparˆncia visual de uma imagem, sem na realidade ealterar os pr´prios dados que a definem. Por exemplo, mostrar todos os pixels abaixo de um certo valor ocom o preto, ou mesmo a partir de uma imagem monocrom´tica criar uma imagem em pseudo-cor. a Um dispositivo que facilita grandemente essa manipula¸˜o com cores, sem comprometer a eficiˆncia ca eda opera¸˜o de visualiza¸˜o de imagens s˜o as tabelas de Busca (“Look-up Table” - LUT), que os ca ca acontroladores de monitores por varredura vem utilizando. A tabela “look-up” possui tantas entradasquanto o n´mero de valores armazenados pelo pixel, ou seja, se o pixel tem profundidade 8, a LUT ter´ u a256 (28 ) entradas. Assim, o valor do pixel n˜o indica a cor em que ele ´ mapeado, mas sim a entrada a ena LUT onde a cor est´ armazenada. A Figura 12.4 ilustra o procedimento de mapeamento de um pixel aatrav´s da LUT. e12.4 Tipos de Manipula¸˜o de Imagens caNa an´lise de imagens, a entrada do processamento ´ uma imagem, enquanto a sa´ ´ uma descri¸˜o n˜o a e ıda e ca apict´rica da imagem. Este processo pode ser entendido como de “redu¸˜o de dados”, em que se diminui o ca 103
  • 105. Figura 12.2: Uma imagem de 512 x 512 pixels, quantizada em (a) 256 n´ ıveis, (b) 128 n´ ıveis, (c) 64 n´ ıveis,(d) 32 n´ ıveis, (e) 16 n´ ıveis, (f) 8 n´ ıveis, (g) 4 n´ ıveis e (h) 2 n´ ıveis de cinza. Figura 12.3: Representa¸˜o de um pixel P com 8-bits (8 planos) de profundidade. cao volume dos dados, mas mant´m-se o conte´do da informa¸˜o relevante para uma dada aplica¸˜o. e u ca ca Na manipula¸˜o de imagens em geral, tanto as entradas quanto as sa´ ca ıdas s˜o imagens. Duas grandes aclasses de transforma¸˜es s˜o: co a • Transforma¸˜es Radiom´tricas: onde os valores de n´ co e ıveis de cinza dos pontos da imagem s˜o a alterados, sem modifica¸˜o de sua geometria. ca • Transforma¸˜es Geom´tricas: onde a geometria da imagem ´ alterada, mantendo-se o m´ximo co e e a poss´ os valores dos n´ ıvel ıveis de cinza. As transforma¸˜es radiom´tricas e geom´tricas podem ser feitas com a finalidade de eliminar distor¸˜es co e e coda imagem, introduzidas geralmente pelo pr´prio sistema de aquisi¸˜o de imagens (“restaura¸˜o”), ou o ca caenfatizar certas caracter´ ısticas da imagem (“realce”).12.5 Transforma¸˜es Radiom´tricas co ePode-se ter basicamente dois tipos de transforma¸˜es ou opera¸˜es radiom´tricas: co co e • Restaura¸˜o - que visa corrigir alguma distor¸˜o sofrida pela imagem; ca ca • Realce - que procura enfatizar alguma caracter´ ıstica de interesse da imagem. Por vezes estes dois objetivos produzem resultados coincidentes. ´ E o caso, por exemplo, quando uma imagem sofreu uma distor¸˜o que diminuiu seu contraste; uma catransforma¸˜o que realce as bordas dos objetos das imagens pode, de fato, restaur´-la. ca a Embora muitas da t´cnicas de restaura¸˜o e realce sejam as mesmas (por exemplo, filtragem), os e caobjetivos e enfoques divergem num e noutro caso. O procedimento geral da restaura¸˜o ´ a modelagem ca edo processo de distor¸˜o para tentar invertˆ-lo. No realce esta preocupa¸˜o n˜o existe, pois no realce as ca e ca at´cnicas utilizadas s˜o, na maioria, heur´ e a ısticas, n˜o havendo compromisso com a imagem original. a As transforma¸˜es radiom´tricas podem tamb´m ser classificadas quanto ao seu grau de abrangˆncia, co e e eem: 104
  • 106. Figura 12.4: Organiza¸˜o de uma LUT, para um sistema de pixels de 8 bits. ca 1. Opera¸˜es Pontuais: onde o n´ co ıvel de cinza de um ponto na imagem transformada depende s´ o do n´ ıvel de cinza do ponto da imagem original (ou nas imagens originais se houver mais de uma imagem de entrada (“frames”)). 2. Opera¸˜es Locais: onde o novo n´ de cinza de um ponto depende n˜o s´ de seu antigo n´ co ıvel a o ıvel de cinza, mas tamb´m dos n´ e ıveis de cinza de seus pontos vizinhos.12.5.1 Opera¸˜es Pontuais sobre Imagens coAlgoritmos que realizam Opera¸˜es Pontuais percorrem a imagem e utilizam o valor do pixel associado coa cada ponto, modificando a escala de tonalidades de cinza de uma imagem. Por exemplo caso deseja-setornar uma imagem mais brilhante, pode-se adicionar algum valor a todos os pontos da imagem. Porexemplo, em um sistema de 8-bits por pixel, os valores associados v˜o de 0 a 255, pode-se definir uma afun¸˜o brilho(p) = p + 40, cuja fun¸˜o ´ tornar a imagem mais “clara”. Atrav´s de opera¸˜es pontuais ca ca e e copode-se tamb´m corrigir sombras que porventura tenham surgido junto com o processo de aquisi¸˜o da e caimagem. Ou seja, define-se uma fun¸˜o cujo efeito reverta a opera¸˜o de sombreamento indesej´vel, ca ca apor´m isto requer que se estime as fun¸˜es de sombreamento. e co Assim, uma opera¸˜o pontual que toma uma imagem A(x, y) e produz outra imagem B(x, y), pode caser definida matematicamente como: B(x, y) = f [A(x, y)] (12.2)Histogramas de IntensidadesO Histograma de Intensidades indica para cada n´ ıvel de cinza da imagem a quantidade de pontosmapeados com tal n´ ıvel. Ele cont´m uma informa¸˜o global sobre os “objetos” da imagem. Se todos os e capontos da imagem s˜o de um mesmo objeto, o histograma mostra a probabilidade condicional p(z/objeto) ade um ponto possuir um dado n´ ıvel de cinza z, sendo que o ponto pertence ao objeto. A Figura 12.5apresenta uma imagem e seu histograma de intensidades associado. Atrav´s de Histogramas de Intensidades pode-se obter uma maneira simples para se manipular o econtraste de imagens. Dessa forma, pode-se definir as “janelas” de intensidade que se queira manipular.Por exemplo, se ao construir o histograma de uma imagem vˆ-se que n˜o se est´ utilizando toda a e a aabrangˆncia dos n´ e ıveis de cinza, resultando uma imagem com pouco contraste, pode-se for¸ar que ela seja cmapeada usando todos os n´ ıveis de cinza, ou uma faixa deles (“janela”), ou mesmo aumentar o contrasteem apenas uma regi˜o dos n´ a ıveis de intensidade da imagem [Gonzalez and Wintz, 1987]. Suponha-se uma imagem A(x, y) e seu histograma H1 (A). Se um ponto p da imagem est´ mapeado acom o n´ N dentro da faixa de valores ∆1 , cujo n´ mais baixo ´ min1 e o mais alto ´ max1 , e atrav´s ıvel ıvel e e ede manipula¸˜o no histograma deseja-se transform´-lo para o valor p com n´ N , o qual estar´ dentro ca a ıvel ada faixa ∆2 cujo valor m´ ınimo ´ min2 e m´ximo max2 , a fun¸˜o de transforma¸˜o ser´: e a ca ca a (N − min1 )(max2 − min2 ) f (N ) = + min2 (12.3) (max1 − min1 ) N = f (N ) (12.4) A Figura 12.6 ilustra a transforma¸ao do histograma H1 (A) da imagem A para o histograma H2 (A). c˜ 105
  • 107. Figura 12.5: Imagens e histogramas de intensidade. Esse procedimento de manipula¸˜o do histograma para ampliar ou diminuir o contraste de uma caimagem ´ mostrado na Figura 12.7. Na parte (a) apresenta-se um histograma de uma imagem, na equal especifica-se uma janela de visualiza¸˜o, e na parte (b) o histograma da mesma imagem depois da camanipula¸˜o do histograma. caOpera¸˜es Alg´bricas co ePor defini¸˜o, opera¸˜es Alg´bricas, s˜o aquelas que produzem uma imagem que ´ a soma, diferen¸a, ca co e a e cproduto ou quociente pixel a pixel de suas imagens. No caso de soma ou multiplica¸˜o mais de duas caimagens podem estar envolvidas. As quatro opera¸˜es alg´bricas de processamento de imagens podem ser explicitadas: co e C(x, y) = A(x, y) + B(x, y) (12.5) C(x, y) = A(x, y) − B(x, y) (12.6) C(x, y) = A(x, y) × B(x, y) (12.7) C(x, y) = A(x, y)/B(x, y) (12.8)onde: A(x, y) e B(x, y) s˜o imagens de entrada e C(x, y) ´ a imagem resultante. a e A seguir s˜o apresentadas algumas aplica¸˜es imediatas para as opera¸˜es alg´bricas: a co co e 1. Uma importante utiliza¸˜o de adi¸˜o de imagens, ´ para se obter a m´dia de m´ltiplas imagens de ca ca e e u uma mesma cena. Isto ´ eficazmente utilizado para reduzir os efeitos de ru´ e ıdos aleat´rios aditivos. o Pode tamb´m ser utilizado para colocar o conte´do de uma imagem sobrepondo outra. e u 2. Subtra¸˜o de imagens pode ser utilizada para remover algum padr˜o indesej´vel presente em uma ca a a imagem. A subtra¸˜o ´ tamb´m utilizada para detectar mudan¸as entre duas imagens da mesma ca e e c cena. Por exemplo, pode-se detectar movimento subtraindo-se imagens sequenciais de uma cena. Subtra¸˜o de imagens pode ser usada para calcular o gradiente, uma fun¸˜o muito usada para ca ca detec¸˜o de bordas (ver se¸˜o 2.4.2.2?). Uma utiliza¸˜o t´ ca ca ca ıpica em medicina, ´ para se comparar e duas imagens de uma mesma regi˜o do corpo. Obt´m-se a imagem da regi˜o (ou ´rg˜o) normal e a e a o a tamb´m ap´s injetar um meio de contraste, adquire outra imagem. Ap´s esta opera¸˜o, pode-se e o o ca comparar as duas atrav´s de subtra¸˜o digital. Assim, por exemplo, se o cora¸˜o ´ o ´rg˜o em e ca ca e o a aprecia¸˜o, consegue-se obter uma imagem apenas das art´rias e veias. ca e 3. Multiplica¸˜o e divis˜o de imagens podem ser utilizadas, por exemplo, para corrigir poss´ ca a ıveis defeitos de um digitalizador em que a sensibilidade do sensor de luz varia conforme a posi¸˜o dos pontos ca da imagem. Multiplicar uma imagem por uma “m´scara” pode esconder certas regi˜es da imagem a o deixando expostos apenas objetos de interesse. 106
  • 108. Figura 12.6: Efeito de uma transforma¸˜o dos n´ ca ıveis de cinza efetuado sobre o histograma. Figura 12.7: Manipula¸˜o de janelas de intensidade da imagem atrav´s do histograma. ca e Ao se efetuar opera¸˜es sobre as imagens, deve-se estar atento para que o novo valor obtido n˜o co aultrapasse o dom´ınio de valores, permitido pela amplitude dos n´ıveis de intensidade em que a imagemest´ mapeada. Se este cuidado n˜o for tomado, pode-se obter valores totalmente inconsistentes, levando-se a aa uma degenera¸˜o da imagem. ca12.5.2 Opera¸˜es Locais Sobre a Imagem coAlgor´ıtmos que realizam Opera¸˜es Locais utilizam informa¸˜o dos valores dos pontos vizinhos para co camodificar o valor de um ponto, ou mesmo para verificar a existˆncia de alguma propriedade neste ponto eda imagem. Opera¸˜es Locais s˜o tipicamente utilizadas para filtragem espacial e altera¸˜o da pr´pria estrutura co a ca oda imagem. Elas podem “agu¸ar” a imagem, acentuando as mudan¸as de intensidades (atrav´s de filtros c c ePassa-Altas), ou “suavizar” a imagem, tornando as mudan¸as de intensidade menos abruptas (atrav´s de c efiltros Passa-Baixas), ou podem prover outras formas de se melhorar a imagem. Assim, pode-se procurarformas na imagem atrav´s de “padr˜es de busca” (“match”), obter medidas dos elementos da imagem, e odefinir bordas na imagem, remover ru´ suavizando a imagem [?]. ıdo As transforma¸˜es locais s˜o divididas em dois grandes grupos: co a • Transforma¸˜es Lineares: s˜o aquelas em que os pixels vizinhos ao que est´ sendo calculado co a a influenciam no novo valor segundo uma combina¸˜o linear dos mesmos. Tais opera¸˜es incluem ca co superposi¸˜o e convolu¸˜o de imagens, o que ´ usualmente utilizado para implementar filtros dis- ca ca e cretos. • Transforma¸˜es n˜o Lineares: utilizam outra forma de arranjo que n˜o a linear. co a a 107
  • 109. Opera¸˜o de Convolu¸˜o ca caUm dos algoritmos cl´ssicos de processamento de imagens ´ aquele que efetua a Convolu¸˜o entre a e caimagens, sendo comumente usado para realizar filtragem espacial e procurar peculiaridades na imagem. A opera¸˜o de convolu¸˜o substitui o valor de um ponto com o valor obtido atrav´s de uma opera¸˜o ca ca e calinear do ponto e de seus vizinhos, sendo que ´ atribu´ “peso” aos vizinhos e ao ponto. Estes “pesos” e ıdos˜o colocados em uma matriz, usualmente de dimens˜o pequena, chamada de m´scara. Se para obter um a a anovo valor de um ponto deseja-se que apenas os vizinhos imediatos influenciem, escolhe-se uma m´scara ade dimens˜o 3x3, onde o ponto base para a gera¸˜o do novo ponto ´ colocado no centro da m´scara. a ca e a Dadas duas imagens A(x, y) e B(x, y), com x = 0, 1, ..., M − 1 e y = 0, 1, ...N − 1, a convolu¸˜o ca(discreta) destas duas imagens ´ uma terceira imagem C(x, y) com x = 0, 1, ..., M − 1 e y = 0, 1, ..., N − 1, edada pela seguinte express˜o: a M −1 N −1 1 C(x, y) = A(m, n).B(x − m, y − n) (12.9) M.N m=0 n=0e para os valores da borda da imagem, que se encontram fora dos intervalos [0, M − 1] e [0, N − 1], deve-seutilizar as seguintes rela¸˜es: co A(x, −y) = A(x, N − y) (12.10) A(−x, y) = A(M − x, y) (12.11) As rela¸˜es acima s˜o equivalentes a considerar uma imagem A(x, y) definida em [0, M −1] e [0, N −1], co acomo definida em [−M, M − 1] e [−N, N − 1]. O resultado da convolu¸˜o de A por B num ponto p ´ na ca erealidade uma m´dia ponderada dos pontos de A, onde os pesos s˜o dados pela imagem B. e a Como foi mencionado acima, a opera¸˜o de convolu¸˜o ´ a base para efetuar-se filtragem espacial ca ca ede imagens. A imagem que indica os pesos para a convolu¸˜o normalmente possui dimens˜o pequena e ca a´ımpar (3, 5, 7 ou 9), pois a opera¸˜o de convolu¸˜o envolve uma grande quantidade de c´lculos, e quanto ca ca amaior o m´scara maior ser´ o tempo de processamento da opera¸˜o. a a ca A seguir ser˜o apresentadas algumas m´scaras normalmente utilizadas para filtragem espacial [Mascarenhas and Vel a a   1/9 1/9 1/9  1/9 1/9 1/9  (12.12) 1/9 1/9 1/9 Implementa um filtro passa-baixas (de suaviza¸˜o): ca   0 −1 0  −1 5 −1  (12.13) 0 −1 0 Normalmente utilizada para “agu¸ar” uma imagem, pois como alguns pesos s˜o negativos eles tendem c aa real¸ar diferen¸as. c c     1 1 1 −1 −1 −1 (a)  1 −2 1  (b)  1 −2 1  (12.14) −1 −1 −1 1 1 1 Apresenta uma m´scara de filtro para dete¸˜o de borda ao (a) norte e (b) ao sul do ponto. a ca     −1 1 1 1 1 −1 (a)  −1 −2 1 (b)  1 −2 −1  (12.15) −1 1 1 1 1 −1 Apresenta uma m´scara de filtro para dete¸˜o de borda a (a) leste e (b) a oeste do ponto. a ca O realce de bordas, independente da dire¸˜o pode ser obtido atrav´s de m´scaras como: ca e a       0 −1 0 −1 −1 −1 1 −2 1  −1 4 −1   −1 8 −1   −2 4 −2  (12.16) 0 −1 0 −1 −1 −1 1 −2 1 Pode-se tamb´m utilizar m´scaras que contenham algum padr˜o que se quer procurar na imagem. e a aNeste caso a m´scara ´ normalmente chamada de tentativa (“template”), onde o tamanho da m´scara a e adepende do padr˜o a ser procurado. a 108
  • 110. Exemplos de Transforma¸˜es n˜o Lineares co aUsualmente as transforma¸˜es n˜o lineares conseguem uma melhor rela¸˜o sinal/ru´ na imagem pro- co a ca ıdoduzida do que por transforma¸˜es lineares. Os filtros lineares utilizados para atenuar os ru´ co ıdos de umaimagem (passa-baixas) produzem uma imagem “borrada”, ou seja as bordas n˜o ficam mais t˜o n´ a a ıtidas.Este efeito indesejado pode ser minorado atrav´s de transforma¸˜es (filtros) n˜o lineares. e co a Figura 12.8: Sinais “ru´ ıdo” (a) e “degrau” (b). Tome-se como exemplo os sinais unidimensionais dos tipos “ru´ ıdo” e “degrau” mostrados na Figura12.9 [Mascarenhas and Velasco, 1989]. Os efeitos de uma transforma¸˜o linear (filtro) dos tipos m´dia ca e[1/3, 1/3, 1/3] e diferen¸a [−1, 3, −1] s˜o mostrados na Figura 12.9. Pode-se notar nestes casos os efeitos c ade atenua¸˜o do ru´ (a), “borramento” da borda (b), amplia¸˜o do ru´ (c) e realce da borda (d). ca ıdo ca ıdoOs efeitos indesejados mostrados na Figura 12.10 (c) e (d) podem ser minorados atrav´s de filtros n˜o e alineares, como ser´ visto a seguir. a Figura 12.9: Sinais “ru´ ıdo” (a) e “degrau” (b). Por exemplo, no filtro da mediana, os pontos da vizinhan¸a do ponto (x, y) s˜o ordenados, e tomado c acomo novo valor para (x, y) o valor mediano obtido pela ordena¸˜o. O efeito do filtro da mediana ca(unidimensional) que envolve 3 elementos (o ponto e seus vizinhos mais pr´ximos) ´ mostrado na Figura o e 109
  • 111. Figura 12.10: Efeitos de filtros lineares ao “ru´ıdo” e ` “borda”: (a) efeitos de atenua¸˜o; (b) borramento a cada borda; (c) amplia¸˜o do ru´ ca ıdo; (d) realce da borda.12.11. Note-se que na parte (a) da figura o ru´ foi eliminado (n˜o somente atenuado), enquanto em (b) ıdo ao degrau permaneceu inalterado. Figura 12.11: Efeito do filtro da mediana sobre o “ru´ ıdo” e o “degrau”. ´ E tamb´m usual, em vez de se utilizar a mediana da vizinhan¸a, escolher o valor m´ximo ou o valor de e c aordem qualquer. Se a imagem ´ bin´ria, para se obter o valor m´ e a ınimo entre dois pontos, pode-se utilizara opera¸˜o l´gica E dos valores da vizinhan¸a dois a dois, e para o valor m´ximo a opera¸˜o l´gica OU. ca o c a ca o Uma outra alternativa utilizada ´ tomar-se o valor mais frequente de uma vizinhan¸a, ou seja, utilizar e ca Moda, entre eles. Pode-se utilizar vizinhan¸a seletiva de um ponto, isto ´, tomar a m´dia n˜o em toda a vizinhan¸a, c e e a cmas sim numa sub-vizinhan¸a que satisfa¸a alguma propriedade dada, como uniformidade, ou seja, que c capresente um valor m´dio pr´ximo do valor do ponto (x, y). O uso do filtro da vizinhan¸a seletiva presume e o cque a imagem seja composta de regi˜es razoavelmente uniformes. Assim, a sele¸˜o da vizinhan¸a procura o ca cfazer com que o ponto (x, y) seja operado s´ com pontos de sua regi˜o. o a Pode-se tamb´m utilizar filtros n˜o-lineares para detectar, bordas e linhas curvas. Para o realce e ade bordas o m´todo n˜o-Linear mais simples ´ o Operador Gradiente de Roberts (GR), dado por e a e[Mascarenhas and Velasco, 1989]: 1 2 2 GR(x, y) = [[A(x, y) − A(x − 1, y − 1)] + [A(x, y − 1) − A(x − 1, y)] ] 2 (12.17)onde A(x, y) ´ a imagem dada. e 110
  • 112. Uma desvantagem do operador de Roberts ´ sua assimetria, pois, dependendo da dire¸˜o, certas e cabordas s˜o mais real¸adas que outras, mesmo tendo igual magnitude. a c Um operador gradiente para delimita¸˜o de bordas mais sofisticado (3x3), ´ o Operador de Sobel ca e(GS), o qual ´ frequentemente utilizado como o primeiro passo para algoritmos de vis˜o computacional. e aEste operador ´ dado por: e 1 GS(x, y) = (X 2 + Y 2 ) 2 (12.18)onde: X = [A(x − 1, y + 1) + 2.A(x, y + 1) + A(x + 1, y + 1)]−  [A(x − 1, y − 1) + 2A(x, y − 1) + A(x + 1, y − 1)]  (12.19) Y  = [A(x − 1, y − 1) + 2.A(x − 1, y) + A(x − 1, y + 1)]− [A(x + 1, y + 1) + 2A(x + 1, y) + A(x + 1, y − 1)]Transforma¸˜es Geom´tricas co eAs transforma¸˜es geom´tricas mudam o arranjo espacial dos pixels da imagem. Muitas vezes s˜o uti- co e alizadas para corrigir distor¸˜es causadas pelo processo de aquisi¸˜o, ou mesmo para efetuar alguma co camanipula¸˜o solicitada pelo usu´rio. Tranforma¸˜es geom´tricas t´ ca a co e ıpicas s˜o: rota¸˜o, transla¸˜o, am- a ca caplia¸˜o, ou diminui¸˜o da imagem. Algoritmos para efetuarem estas opera¸˜es podem ser apresentados ca ca cocomo um conjunto de equa¸˜es que mapeiam um pixel localizado na posi¸˜o (x, y) em um novo endere¸o, co ca c(x , y ). Na realidade, em processamento digital de imagens, geralmente s˜o necess´rios dois algoritmos se- a aparados para a maior parte das transforma¸˜es geom´tricas. O primeiro ´ o algoritmo que define a co e emovimenta¸˜o dos pixels, como ele move a partir da posi¸˜o inicial para a posi¸˜o final. ca ca ca Figura 12.12: Uma transforma¸˜o geom´trica de 90o graus. ca e Como exemplo, pode-se tomar a imagem ilustrada na Figura 12.12. Ali uma imagem ´ rotacionada ede 90o graus. Um pixel na posi¸˜o (0,0) ´ mapeado segundo a f´rmula: ca e o x = (Y SIZE − 1) − y y =x (12.20)onde Y SIZE ´ o n´mero de pixels no eixo y. e u Em muitas aplica¸˜es, ´ necess´rio preservar a continuidade dos objetos que definem a imagem. Isso co e apode ser feito transformando-se ponto a ponto a imagem, ou transformando-se apenas pontos chave daimagem, fazendo que os outros pontos acompanhem a transforma¸˜o por algum outro processo. Pode-se caver que o primeiro processo ´ geralmente mais oneroso em termos de tempo de computa¸˜o do que o e casegundo. ´ E conveniente especificar matematicamente o relacionamento espacial entre pontos das imagem deentrada e da imagem de sa´ıda. A defini¸˜o geral para opera¸˜es geom´tricas ´ [Castleman, 1979]: ca co e e g(x, y) = f (x , y ) = f (a(x, y), b(x, y)) (12.21) 111
  • 113. onde f (x, y) ´ a imagem de entrada e g(x, y) ´ a imagem de sa´ e e ıda. As fun¸˜es a(x, y) e b(x, y) especificam coas transforma¸˜es espaciais. Se essas tranforma¸˜es forem cont´ co co ınuas, a continuidade ser´ preservada na anova imagem. O segundo algoritmo necess´rio para uma transforma¸˜o geom´trica ´ um algoritmo para interpola¸˜o a ca e e cados valores dos n´ ıveis de cinza. Na imagem de entrada f (x, y), os valores do n´ ıveis de cinza s˜o definidos asomente para valores inteiros de x e y. Mas na equa¸˜o geral acima, pode-se ver que o valor do n´ de ca ıvelcinza para g(x, y) pode ser tomado a partir de coordenadas n˜o inteiras (pela continuidade) de f (x, y). Se aa opera¸˜o geom´trica ´ considerada como um mapeamento de f para g, pixels de f podem ser mapeados ca e eentre pixels de g e vice-versa. Assim novamente deve ser realizada alguma opera¸˜o (ex. escala) para cacorrigir a distor¸˜o de pontos n˜o inteiros. ca a 112
  • 114. Referˆncias Bibliogr´ficas e a[Castleman, 1979] Castleman, K. R. (1979). Digital Image Processing. Prentice-Hall, Inc., Englewood Cliffs, N.J.[Gonzalez and Wintz, 1987] Gonzalez, R. C. and Wintz, P. (1987). Digital Imagem Processing. Addison- Wesley Publishing Company, second edition edition.[Hearn and Baker, 1994] Hearn, D. and Baker, P. (1994). Computer Graphics. Prentice-Hall.[Mascarenhas and Velasco, 1989] Mascarenhas, N. D. A. and Velasco, F. R. D. (1989). Processamento digital de imagens. In IV Escola Brasileiro-Argentina de Inform´tica, Universidade Cat´lica de Santiago a o del Estero, Termas do Rio Hondo - Argentina.[Minghim and Oliveira, 1997] Minghim, R. and Oliveira, M. C. F. (1997). Uma introdu¸˜o ` visualiza¸˜o ca a ca computacional xvi jai’97. In XVII Congresso da SBC, volume 1777 of Jornadas de Atualiza¸˜o em ca Inform´tica, pages 85–131, Bras´ - Brazil. a ılia[Persiano and Oliveira, 1989] Persiano, R. C. M. and Oliveira, A. A. F. (1989). Introdu¸˜o ` Computa¸˜o ca a ca Gr´fica. Livros T´cnicos e Cient´ a e ıficos Editora Ltda.[Plastock and Kalley, 1999] Plastock, R. and Kalley, G. (1999). Computa¸˜o Gr´fica. Mc Graw Hill. ca a[Schr¨eder, 1998] Schr¨eder, W. (1998). The Visualization Toolkit. o o[Schr¨eder et al., 1996] Schr¨eder, W. J., Martin, K., and Lorensen, W. (1996). The Visualization Toolkit o o - An Object-Oriented Approach to 3D Graphics. Prentice-Hall. 113
  • 115. Apˆndice A eHist´rico o01.11.2003Novidades • Apostila de processamento de imagens adicionada. • Links externos corrigidos.Problemas • Os cap´ ıtulos de Rendering e Modelagem ainda est˜o faltando; a • Ainda h´ referˆncias com problemas. a e27.08.2003Novidades • Vers˜o totalmente revisada. aProblemas • Os cap´ ıtulos de Rendering, Modelagem e Processamento de Imagens est˜o faltando; a • Algumas referˆncias precisam ser corrigidas. e 114