Prévia do material em texto
Computação Gráfica
Módulo 1
Presente em diversos segmentos da atividade humana, como nas artes, na medicina, arquitetura, segurança pública, propaganda, processamento de dados, lazer, educação, etc. a Computação Gráfica (CG) é a área da Ciência da Computação que mobiliza os recursos matemáticos para gerar, manipular e interpretar imagens com a ajuda do computador. Praticamente tudo que poderíamos realizar usando imagens por meios tradicionais pode ser tratado mais rápida e eficientemente com a CG.
Na medicina, por exemplo, o emprego de scanners para a sondagem de órgãos internos sem intervenção cirúrgica tornou o diagnóstico de doenças mais seguro e precoce. O uso de ferramentas de CAD/CAM (Computer-Aided Design/Computer-Aided Manufacturing) possibilitam arquitetos e engenheiros elaborarem projetos de estruturas mais arrojadas e complexas, com cálculos mais precisos e visualização prévia dos resultados antes mesmos que estes sejam executados, permitindo avaliações mais seguras e rápidas.
Embora o domínio da tecnologia da CG não faça do indivíduo um artista, um médico, ou arquiteto, nas mãos de tais profissionais, seu domínio pode levar o sujeito à dimensões inimagináveis anteriormente.
Já para o cientista da computação, engenheiro, ou o analista de sistemas de informação a CG pode ser vista como um fim em si. Ou seja, cabe a esses profissionais o desenvolvimento e a integração das ferramentas que virão a ser utilizadas por outros profissionais no desenvolvimento de seus produtos.
Sendo uma das grandes área da Ciência da Computação podemos subdividir a Computação Gráfica, didaticamente, em três subáreas a saber:
Síntese de Imagens
Processamento (Manipulação) de Imagens
Análise de Imagens (Visão Computacional)
Cada uma dessas subáreas, embora interligadas e, muitas vezes, sobrepostas, goza de certa independência das demais, requerendo o desenvolvimento de competências específicas.
Na síntese de imagens consideramos as representações visuais de objetos criados pelo computador a partir de especificações geométricas e visuais de seus componentes, ou seja, da representação gráfica da informação. Exemplos: elaboração de um gráfico representativo da distribuição de freqüências de um determinado evento registrado em uma planilha, o registro digital de uma imagem por meio de um scanner ou câmera, a criação de imagem de uma cena para um filme de animação.
O processamento de imagens considera o tratamento da imagem em sua forma digital, suas transformações e melhoramentos. Exemplos: A restauração de uma fotografia antiga utilizando meios digitais, o realce de detalhes de uma imagem de uma câmera de segurança, a vetorização de uma imagem cartográfica (isso já não seria objeto da área de análise?).
Já a análise de imagens considera a especificação dos componentes da imagem a partir de sua representação visual. Exemplos: o reconhecimento de caracteres em um texto digitalizado (OCR – Optical Character Recognition), o estudo de manchas urbanas, áreas de desmatamento, levantamento topográfico, etc. ... a partir de imagens de satélite ou aerofotogrametria.
Assim, podemos definir a Computação Gráfica de várias maneiras, mais ou menos abrangentes:
"Computação Gráfica é a área da Ciência da Computação que trata a geração, manipulação e interpretação de modelos matemáticos, na forma de imagens, utilizando o computador."
"A Computação Gráfica consiste no conjunto de métodos e técnicas de converter dados para um dispositivo gráfico, via computador."
“A computação gráfica é a área da ciência da computação que estuda a transformação dos dados em imagem. Esta aplicação estende-se à recriação visual do mundo real por intermédio de fórmulas matemáticas e algoritmos complexos.” <pt.wikipedia.org>
Observe a maior ou menor abrangência de cada uma das tentativas de definirmos Computação Gráfica e tente elaborar a sua própria. O importante é compreender Computação Gráfica como uma área de desenvolvimento e pesquisa de uma ciência maior, a Ciência da Computação.
O Conceito de Primitivas Gráficas
Chamamos de primitivas gráficas os elementos básicos de gráficos/desenhos a partir dos quais são construídos outros objetos, mais complexos, mas também entram na definição de primitivas os comandos e funções que manipulam e alteram os elementos gráficos de uma imagem.
Conforme a primeira definição de primitiva gráficas podemos exemplificar as primitivas como:
Em 2D: pontos, linhas, polilinhas, retângulos, circunferência, elipse, etc. ...
Em 3D: planos, caixas, esferóides, cilindros, cones, etc. ...
Mas também servem como exemplos de primitivas gráficas funções como:
Em 2D: WritePixel(x,y,cor), cor = GetColor(x,y), Form1.Canvas.Pixel[x,y]:=RGB(r,g,b)
Em 3D: plane{ y,0 texture{pigment{color rgb <r,g,b>}}}}
Rasterização e Renderização
Dois termos muito empregados em Computação Gráfica e Processamento de Imagens são RASTERIZAÇÃO (rastering) e RENDERIZAÇÃO (rendering). Na Wikipédia (pt.wikipedia.org) encontramos definições bastante simples para ambos:
i. Rasterização, é a tarefa de tomar uma imagem descrita vetorialmente e convertê-la em uma imagem raster (matriz de pixel) para a saída em vídeo ou impressora.
ii. Renderização é o processo pelo qual se pode obter o produto final de um processamento digital qualquer.
EXERCÍCIOS RESOLVIDOS
R1. Presente em diversos segmentos da atividade humana, como nas artes, medicina, arquitetura, segurança pública, propaganda, processamento de dados, lazer, educação, etc. a Computação Gráfica (CG) é a área da Ciência da Computação que mobiliza os recursos matemáticos para gerar, manipular e interpretar imagens com a ajuda do computador. Praticamente tudo que poderíamos realizar usando imagens por meios tradicionais pode ser tratado mais rápida e eficientemente com a CG. Uma vez entendida a real natureza desta verdadeira caixa de ferramentas tecnológica é incorreto afirmar que:
(a) Computação Gráfica é a área da Ciência da Computação que trata da geração, manipulação e interpretação da informação, de maneira visual, utilizando o computador
(b) Computação Gráfica é a área da Ciência da Computação que estuda representações visuais a partir de especificações geométrica de seus componentes.
(c) Computação Gráfica é a área da Ciência da Computação que trata da imagem em sua forma digital, suas transformações e melhoramentos.
(d) Computação Gráfica é a área da Ciência da Computação que cuida da especificação dos componentes da imagem a partir de sua representação visual.
(e) Computação Gráfica é uma disciplina do curso de Ciência da Computação ou Sistemas de Informação onde se aprende a desenhar e manipular imagens através de softwares apropriados.
RESP.: Alternativa (e). Embora possa haver cursos em que seja fundamental aprender a usar programas de manipulação gráfica, como cursos de nível técnico, Comunicação Visual, Design Gráfico e etc, onde a CG não é caracterizada como um fim em si, nos cursos de Ciência da Computação, Sistemas de Informação e Engenharia da Computação, onde o objetivo é desenvolver os aplicativos que irão servir para manipulação gráfica, ou desenvolver pesquisa científica e tecnológica para seu avanço enquanto área da Ciência da Computação, a disciplina de CG deve enfatizar o uso da lógica de programação e algoritmos mobilizando todos os recursos matemáticos necessários para sua realização.
R2. Assinale a alternativa que melhor indica os elementos fundamentais de um sistema de visualização gráfica.
(a) Memória RAM e Processador
(b) Processador, Controladora Gráfica e Monitor de Vídeo
(c) Memória RAM, Controladora Gráfica e Monitor de Vídeo
(d) Processador, Controladora Gráfica e Memória RAM
(e) Memória RAM, Processador e Monitor de Vídeo
RESP.: Alternativa (b). Um sistema de visualização gráfica é constituído por três elementos fundamentais: o sistema de processamento de dados, a controladora gráfica e o monitor de vídeo. O sistema de processamento de dados tem como função processar os dados relativos às imagens que pretendemos visualizar natela do monitor de vídeo. A controladora gráfica atua como uma interface entre o processador e o monitor, tendo como principal função armazenar e converter os sinais de vídeo enviados pelo processador. O monitor de vídeo é um dispositivo de saída, que tem como função mostrar as imagens em uma tela, atuando como uma interface entre as aplicações e o usuário.
Módulo 2
Primitivas Gráficas em 2D
Como dito no módulo anterior, primitivas gráficas são ambos elementos básicos de gráficos/desenhos, a partir dos quais são construídos outros objetos, mais complexos, e também os comandos e funções que manipulam e alteram os elementos gráficos de uma imagem.
No que diz respeito à primeira definição, a modelagem de objetos por meio de primitivas dá-se por instanciação: uma linha é uma seqüência de pontos, uma polilinha é uma seqüência de linhas, etc. ... Já uma circunferência PODE ser vista como uma polilinha fechada, onde o número de linhas define a qualidade da curva e assim por diante. (figura 1).
Atributo da primitiva gráfica PONTO
Em CG o PONTO matemático, sem dimensão, transforma-se no PIXEL, a menor unidade gráfica manipulável (PIXEL: de PIcture ELement).
Ao contrário do PONTO, o PIXEL tem forma, dimensão, mas estes atributos não são, em geral, manipuláveis diretamente através de funções e dependem do hardware.
Por outro lado, em CG, tanto o PONTO quanto o PIXEL são objetos de um desenho que se inscreve em um espaço bidimensional. No caso do ponto matemático tal espaço pertence ao R2. Já o pixel é um elemento de uma matriz de tamanho W x H (Width-largura e Height-altura, em pixels, da matriz do dispositivo gráfico de saída), cujas coordenadas pertencem ao N2. (R é o conjunto dos números reais e N é o conjunto dos naturais).
Assim, podemos atribuir ao pixel apenas duas propriedades fundamentais: COR e POSIÇÃO.
Como as coordenadas do PONTO, que formam um VETOR com valores no espaço real, e as coordenadas do PIXEL são elementos de uma MATRIZ, possuindo coordenadas inteiras e positivas, devemos converter os valores adequadamente.
Esse cálculo é denominado de MAPEAMENTO WINDOW-TO-VIEWPORT. Podemos chamá-lo de RASTERIZAÇÃO do ponto, já que o termo rasterização (rastering) é o processo de converter vetores para pixels em dispositivos raster. (lembre que as coordenadas de um ponto é uma grandeza vetorial).
O MAPEAMENTO WINDOW-TO-VIEWPORT
Sejam XR e YR as coordenadas (reais) de um ponto pertencente ao R2 e XP e YP (o P refere-se a Pixel) as coordenadas do pixel correspondente (inteiros positivos) na matriz gráfica (tela ou canvas).
As coordenadas reais (XR, YR) são, muitas vezes, referidas como COORDENADAS DO UNIVERSO (ou do MUNDO) e estão descritas em um SISTEMA DE REFERÊNCIA DO UNIVERSO (SRU), ou sistema de referências do mundo. São, em última análise, as coordenadas que usamos normalmente na modelagem de objetos matemáticos.
Por outro lado, as coordenadas inteiras (XP, YP) são descritas no SISTEMA DE REFERÊNCIA DO DISPOSITIVO gráfico de saída (SRD). Quando elas representam diretamente os valores das LINHAS e COLUNAS no dispositivo gráfico, portanto valores inteiros que correspondem aos índices dos elementos da matriz de pixel, serão referidas como coordenadas do dispositivo. Caso essas coordenadas expressem os VALORES REAIS de seus respectivos pontos no SRU, serão referidas como COORDENADAS LÓGICAS.
Uma vez que o espaço disponível para desenho no dispositivo gráfico de saída é limitado pela matriz de pixels, devemos especificar os valores mínimos e máximos de uma JANELA DE VISUALIZAÇÃO (viewport) na qual visualizaremos o nosso modelo matemático (desenho, função, etc...)
Portanto, a viewport corresponde a uma área no interior da matriz de pixels do dispositivo de saída gráfica. Ela pode corresponder a toda a matriz, como podem haver várias viewports no dispositivo, sobrepostas ou não...
Já o plano cartesiano onde localizamos as coordenadas reais (XR, YR) é infinito. Para representarmos qualquer modelo matemático deste espaço no interior da viewport, devemos definir um DOMÍNIO que contém os objetos a serem representados. Esse domínio será chamado de WINDOW por falta de um nome melhor. A window tem o mesmo papel de uma janela no sentido comum, através da qual vemos uma cena que queremos representar. Cada elemento primitivo descrito no interior da window será, então, MAPEADO na viewport.
Frequentemente os objetos geométricos são descritos (modelados) em um sistema próprio, denominado SISTEMA DE REFERENCIA DO OBJETO (SRO). Veja o esquema de mapeamento mostrado na figura 2.
O mapeamento window-to-viewport ocorre diretamente entre os SRU e o SRD, mas podemos usar as coordenadas lógicas como coordenadas intermediárias no mapeamento.
Outro sistema de referência utilizado na modelagem de objetos é o SISTEMA DE REFERÊNCIA NORMALIZADO (SRN). O SRN nada mais é do que o SRO limitado no intervalo [0, 1] ou [-1, 1] em cada uma de suas coordenadas.
Sejam, portanto, XRMIN e XRMAX os valores mínimos e máximos horizontais da janela no espaço cartesiano (window) e XPMIN e XPMAX os valores correspondentes em pixel (viewport). YRMIN, YRMAX, YPMIN e YPMAX serão os valores limites na vertical (c.f. figura 3). A transformação (XR,YR) ßà (YP,YP) é obtida por meio de um simples cálculo de PROPORCIONALIDADE (regra de três simples!). Para a coordenada horizontal (coordenada x) a transformação é:
Resolvendo XR em função de XP e XP em função de XR obtemos as relações:
onde SX é o fator de escala na dimensão horizontal
Expressões análogas são obtidas da mesma forma para a transformação da coordenada vertical (y)
Ao implementarmos essas expressões em alguma linguagem de programação devemos observar os tipos primitivos das variáveis (XR , YR) e (XP, YP). As primeira são de tipo real, ponto flutuante, e as outras são de tipo inteiro, o que implica em converter adequadamente os tipos.
EXERCÍCIOS RESOLVIDOS
R1. Seguindo o raciocínio desenvolvido nos últimos parágrafos do texto acima, obtenha as relações de YP em função de YR e de YR em função de YP. Considere que os limites da window e da viewport na vertical são, respectivamente (YRMIN, YRMAX) e (YPMIN, YPMAX).
RESP.:
E
Onde
é o fator de escala na direção vertical.
Construiremos a relação de proporcionalidade para as coordenadas verticais da window e viewport acompanhando a figura 3. Observe que, como a origem das coordenadas da viewport encontra-se no canto superior esquerdo, o valores máximos e mínimos da window e viewport para a coordenada vertical são trocados, com o mínimo da window correspondendo ao máximo da viewport e vice-versa, diferentemente da coordenada horizontal, onde isso não ocorre. Assim, aplicando uma regra de três simples obtemos:
Como no exemplo desenvolvido no texto, definimos um fator de escala como
Donde, resolvendo YP em função de YR obtemos:
e, resolvendo YR em função de YP, obtemos
R2. Considere o ponto P, pertencente ao SRU, cujas coordenadas (XR,YR) são P = (-1.45, 0.32). Sabendo que as coordenadas que definem a window são XRMIN = YRMIN = -2.0 e XRMAX = YRMAX = +2.0, qual o valor correspondente das coordenadas (XP,YP) do pixel em uma viewport de coordenadas XPMIN = YPMIN = 0, XPMAX = 1023 e YPMAX = 767 ?
RESP.: XP = 141; YP = 322
Para calcular as coordenadas do pixel no SRD substituímos os valores fornecidos no enunciado nas relações:
onde os fatores de escala são dados por:
Então:
Logo:
Como XP e YP são os valores inteiros (coluna e linha no SRD, respectivamente), devem ser convenientemente arredondados. Assim: XP = 141; YP = 322.
ATENÇÃO: Para que se entenda o mapeamento window-to-viewport perfeitamente, o resultado acima significa que, uma vez definidas a window e a viewport, o ponto (-1.45, 0.32) no SRU corresponderá ao pixel ( 141, 322) no SRD.