:: Julho de 2003 ::
 

Projetos em Computação Gráfica - 1º Projeto

IA725 - Computação Gráfica
1º Semestre de 2003

Prof.a Wu, Shin-Ting
DCA/FEEC/UNICAMP
   

 

Projetos

1º Projeto

2º Projeto

3º Projeto

 

 

1) Descrição do Programa

O objetivo deste programa é apresentar uma aplicação utilizando recursos de iluminação, transformações geométricas e projetivas, aplicadas na imagem do logotipo da UNICAMP.

O algoritmo foi desenvolvido na linguagem de programação Borland C++ 5.02 com o uso das funções do OpenGL 95, sob o sistema operacional Windows 98.

O programa logo (logo.cpp/logo.exe) lê um arquivo texto que contém todas as coordenadas x e y necessárias para desenhar o logotipo da UNICAMP (de acordo com as especificações encontradas na página do logotipo) e o desenha então na tela. Para isso, utilizamos o arquivo logo.txt, que foi criado a partir das coordenadas encontradas no arquivo preto.dxf, compatível com AutoCad e outros softwares vetoriais similares. Neste arquivo, temos presentes as coordenadas x, y, z e os headers para montagem de cada polígono da imagem. O arquivo deve manter a mesma estrutura (sem espaços entre linhas e obedecendo a posição dos headers e valores das coordenadas) para que o programa leia corretamente os dados.

O logotipo foi desenhado utilizando linhas, mesmo nas área com curvas. Porém, isso causa uma dificuldade encontrada no próprio OpenGL quando tratamos de polígonos sólidos. O logotipo em modo sólido foi renderizado utilizando GL_POLYGON e o parâmetro GL_FILL do glPoligonMode(). Quando desenhamos as linhas para formar uma curva, algumas partes da imagem (no caso das letras que formam o texto UNICAMP) perderam sua forma original. Isso se deve ao modo como o OpenGL trata o preenchimento de polígonos côncavos. Para resolver este problema, criei diversos polígonos que formaram cada letra, não sendo perceptível na imagem final.

Num primeiro momento, as coordenadas são lidas e gravadas em um vetor de registros chamado poligono (armazenamento da figura) e letra (armazenamento do texto). O que diferencia que tipo de coordenadas estão sendo lidas são as letras dos headers, onde P é polígono e T é texto. Nesta leitura também é verificado o modo de renderização da imagem (linha, wireframe ou sólido), pois as letras em modo sólido e wireframe possuem coordenadas diferentes das encontradas no modo linha. Isso pode ser visto no header (L para texto modo linha e P para texto modo polígono).

Após as coordenadas serem lidas, o programa carrega o polígono e o texto nas faces frontal e traseira e nas laterais (que dão a impressão de uma imagem 3D).

Assim que a imagem do logotipo é mostrada em tela é possível testar os recursos de transformações, como rotação e escala. A iluminação pode ser percebida pelo posicionamento da luz quando realizamos a rotação do polígono, ela acompanha o objeto durante o movimento.

Vejamos agora alguns conceitos importantes para a compreensão do programa.

2) Modelo para Aplicações de Computação Gráfica

Para visualizarmos uma imagem final devemos passar por diversas etapas. Em primeiro lugar, temos que construir o modelo geométrico desejado. Então, aplicamos as transformações geométricas necessárias (translação, rotação, escala, cisalhamento, espelhamento), assim como as transformações projetivas (paralelas ou perspectivas) dando corpo à cena. Com as transformações aplicadas, podemos então inserir uma ou mais fontes de iluminação sobre a cena. Temos então uma imagem pronta para ser exibida.

Figura 1 - Modelo para aplicações de Computação Gráfica

3) Executando o Programa

Para iniciar o programa, devemos passar os parâmetros para escolha dos algoritmos, como mostrado abaixo:

C:\logo> logo 0

C:\logo> logo 1

C:\logo> logo 2

Onde 0, 1 e 2 são os modos de visualização do logotipo (0 para linear 2D 1/2, 1 para wireframe 2D 1/2 e 2 para sólido 2D 1/2).

  • Setas para movimentar a imagem no eixo X;
  • Setas para movimentar a imagem no eixo Y;
  • PageUP e PageDown para movimentar a imagem no eixo Z;
  • F1 para aumentar o zoom;
  • F2 para diminuir o zoom;
  • Home para voltar a imagem ao estado original;
  • End para sair do programa.

Figura 2 - Modos de visualização da imagem
a) linear b) wireframe c) sólido

Podemos ver estas informações em tela digitando "logo" no prompt de comando.

4) Detalhes da Implementação

Para modelar o logotipo, foi necessário desmembrar os polígonos da imagem em várias partes, assim como modelar manualmente a extrusão para dar a idéia de ser uma imagem 3D (chamada aqui de 2D 1/2 devido à simulação de uma modelagem 3D a partir da extrusão de uma imagem plana).

A face frontal do logotipo foi modelada sobre a coordenada 0 (zero) do eixo Z. Já a parte traseira, ficou sobre a coordenada 0.1 do mesmo eixo. Faltava então preencher o extrude. Para isso, foram ligados os pontos dos polígonos frontal e traseiro entre 0 e 0.1. Utilizei como recurso o GL_TRIANGLE_STRIP que preenche os pontos dos triângulos formados pelas coordenadas na modelagem do polígono.

Figura 3 - Extrude do polígono
a) wireframe b) sólido

Vejamos agora alguns recortes da imagem durante a aplicação dos recursos (zoom, rotação e iluminação):

Figura 4 - Efeito de Zoom
a) maior b) menor

Figura 5 - Rotação no eixo X
a) decréscimo de 4 graus b) acréscimo de 4 graus

Figura 6 - Rotação no eixo Y
a) decréscimo de 4 graus b) acréscimo de 4 graus

Figura 7 - Rotação no eixo Z
a) decréscimo de 4 graus b) acréscimo de 4 graus

Figura 8 - Rotação nos eixos X, Y e Z
a) decréscimo de 4 graus b) acréscimo de 4 graus

Figura 9 - Visualização das fontes de iluminação

 

Referências Bibliográficas

FOLEY, J.; HUGHES, J.et al. Computer Graphics: Principles and Practice in C, 2nd edition, Addison-Wesley Publishing Company, 1996.

OpenGL® Programming Guide: The Official Guide to Learning OpenGL
Mason Woo, Jackie Neider, Tom Davis, Dave Shreiner
Addison-Wesley Publishing Company, 1999
ISBN: 0-201-60458-2

http://www.unicamp.br/unicamp/a_unicamp/a_unicamp_logotipo_ologotipo.html