Trabalho de Implementação 3
Autor: Eduarda | Publicado: 2011-06-21T17:51:00-07:00

Descrição    O terceiro trabalho de implementação da disciplina de Computação Gráfica tem como objetivo ampliar a biblioteca Close2GL, implementando os métodos  de rasterização. Para a execução dos testes, foram utilizadas as bibliotecas OpenGL e Close2GL.  Implementação    Durante o processo de desenvolvimento do pipeline, foram desenvolvidos alguns métodos auxiliares e outros foram modificados, como é apresentado a seguir. O método responsável por ler o arquivo de entrada foi modificado para que ele saiba diferenciar um objeto com e sem textura, podendo assim tratar cada caso individualmente.   Mapeamento de textura   A biblioteca OpenGL não possui nenhum método capaz de carregar imagens e, para isso, utilizou-se a biblioteca OpenCV. O OpenCV (Open Source Computer Vision Library) é uma biblioteca escrita na linguagem de programação C/C++ voltada ao desenvolvimento de aplicações de visão computacional e sistemas de tempo real.   O método loadImage, implementado utilizando o OpenCV, recebe via interface a imagem que será utilizada como textura. Depois de carregada, a imagem é armazenada na variável IplImage* image, podendo assim ser utilizada como textura.  IplImage é uma variável do OpenCV que armazena a imagem como uma matriz de pixels. O método loadImage é descrito a seguir:void loadImage(char *FileName){  image = cvLoadImage(FileName, CV_LOAD_IMAGE_COLOR );  }  Para realizar o mapeamento da textura no objeto, inicialmente é preciso passar os parâmetros para desenhar os objetos da forma correta, primeiro glTexCoord2f() e depois glVertex3f(). Na implementação do mapeamento de textura, foi utilizado o código que esta na descrição do trabalho. Os seguintes resultados foram obtidos.Iluminação Para implementar os métodos responsáveis pela iluminação dos objetos, foi utilizado como base os slides apresentados em aula. Foram implementados os métodos ambiente, difuso e especular. Cada método foi testando junto com uma coloração, Gourad ou Flat, como é apresentado a seguir.Ambiente Conforme é apresentado no slide, a luz ambiente é representada pela seguinte função: Os parâmetros I, intensidade da luz do ambiente, e K, intensidade do reflexo do objeto, foram passados por parâmetro. Os valores de N e L foram calculados, e depois normalizados, utilizando os vértices passados pelo arquivo de entrada.Luz ambiente com FlatLuz ambiente com GouradDifusa Conforme é apresentado no slide, a luz ambiente é representada pela seguinte função: Os parâmetros I, intensidade da luz do ambiente, e K, intensidade do reflexo do objeto, foram passados por parâmetro. Os valores de N e L foram calculados, e depois normalizados, utilizando os vértices passados pelo arquivo de entrada. As imagens produzidas utilizando Flat e Gourad foram iguais, conforme é apresentado a seguir.Especular Conforme é apresentado no slide, a luz ambiente é representada pela seguinte função: Os parâmetros I, intensidade da luz do ambiente, e K, intensidade do reflexo do objeto, foram passados por parâmetro. Os valores de N e L foram calculados, e depois normalizados, utilizando os vértices passados pelo arquivo de entrada.  O método calcV faz o cálculo do vetor entre a normal da superfície e o raio da luz. Ele recebe como parâmetro as coordenadas passadas pelo arquivo. Depois de calculado o vetor, então é realizado o restante dos parâmetros. As imagens produzidas utilizando Flat e Gourad foram iguais, conforme é apresentado a seguir.Conclusão O trabalho de implementar a textura no objeto foi o mais difícil. Testei diversas bibliotecas para carregar a imagem, entre elas GLAUX, SDL e JPEGLIB porém nenhuma não consegui carregar as imagens. A implementação dos métodos de iluminação exigiram bastante tempo e a iluminação Phong não foi implementada. As imagens utilizando Flag e Gourand, algumas vezes apresentaram o mesmo resultado, conforme pode ser visto nas imagens acima.