|
|
:: Julho de 2003 :: | |
![]() |
|
Projetos em Computação Gráfica - 3º Projeto |
|
IA725 - Computação Gráfica |
Prof.a Wu, Shin-Ting
DCA/FEEC/UNICAMP |
3º Projeto
|
|
1) Descrição do Programa O objetivo deste programa é apresentar uma aplicação utilizando recursos de textura e animação 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 (logot.cpp/logot.exe) lê um arquivo texto que contém todas as coordenadas x e y necessárias para desenhar o logotipo da UNICAMP, desenhando-o 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. Todos os procedimentos de leitura e carregamento das coordenadas foram retiradas do Projeto 1. Após definido o objeto, colocamos em prática o carregamento e aplicação da textura e animação sobre a imagem. Neste caso, utilizamos um objeto 1D criado pelo próprio programa para facilicar sua aplicação. 2) Executando o Programa Para iniciar o programa não é necessário passar parâmetro algum, basta digitar: C:\logo> logot Pode-se também utilizar a tecla End para sair do programa. ![]() Figura 1 - Logotipo da UNICAMP texturizado 3) Detalhes da Implementação Para inserirmos textura em um objeto 3D é necessário carregar os parâmetros correspondentes da textura para então aplicá-la na imagem. Um problema encontrado se deu pela aplicação de uma textura carregada por um arquivo em 2D, onde é necessário definir para cada vértice da imagem o limite da textura. No programa logot não foi possível delimitar esses vértices pois o programa implementa o polígono lendo as coordenadas através de um arquivo texto e sendo carregadas por uma rotina default. Utilizei então uma função para criação de textura automática, criada pelo próprio programa. Neste caso, não foi necessário especificar as coordenadas dos vértices, pois o polígono foi preenchido em sua totalidade com a textura gerada. Um exemplo de aplicação de textura 2D pode ser visto no programa Texture JPG. Nele, uma figura jpeg é carregada sobre um cubo, onde os vértices da textura são delimitados nos vértices do cubo. Veja maiores detalhes do programa (compilação e execução) na página http://www.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/Texturas/MapTextures.html. Figura
2- Exemplo de textura 2D Vejamos agora alguns recortes da imagem durante a animação:
Figura
3 - Efeitos de Zoom e Rotação durante a animação Um método simples de criação de uma textura automática pode ser visto no código abaixo: #define stripeImageWidth
16 void makeStripeImage(void) { Além desse procedimento é necessário também habilitar na inicialização do OpenGL algumas funções referentes à textura: makeStripeImage(); glDepthFunc(GL_LESS); Não devemos esquecer que para uma melhor visualização da textura podemos habilitar também fontes de iluminação sobre o objeto, como realizado neste projeto. Já para o processo de animação foi necessário acrescentarmos à procedure display as funções incrementais de rotação e escala, como mostrados abaixo: //declaração
de variáveis globais ... xRot+=3.0f; //controla o zoom if (aumentando==1) { atual+= zoom; if (atual > max_zoom) { aumentando = 0; atual = max_zoom; } } else { atual-= zoom; if (atual < min_zoom) { aumentando = 1; atual = min_zoom; } } xScl = yScl = zScl = atual; Maiores detalhes podem ser encontrados no código fonte do programa.
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.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/Texturas/MapTextures.html |
||
![]() |
![]() |