|
|
:: Julho de 2003 :: | |
![]() |
|
Projetos em Computação Gráfica - 1º Projeto |
|
IA725 - Computação Gráfica |
Prof.a Wu, Shin-Ting
DCA/FEEC/UNICAMP |
1º 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).
Figura
2 - Modos de visualização da imagem 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 Vejamos agora alguns recortes da imagem durante a aplicação dos recursos (zoom, rotação e iluminação):
Figura
4 - Efeito de Zoom
Figura
5 - Rotação no eixo X
Figura
6 - Rotação no eixo Y
Figura
7 - Rotação no eixo Z
Figura
8 - Rotação nos eixos X, Y e Z 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 http://www.unicamp.br/unicamp/a_unicamp/a_unicamp_logotipo_ologotipo.html |
||||||||||||||
![]() |
![]() |
![]() |