Atividade 2 - Pipeline gráfico: implementação de transformações entre espaços de coordenadas.
Atividade Individual II da disciplina Computação Gráfica do Programa de Pós Graduação em Informática da Universidade Federal da Paraíba - Período 2014.1, ministrada pelo Prof. Christian Azambuja Pagot.
O que é Pipeline Gráfico?
Pipeline Gráfico pode ser entendido como um conjunto de passos que o computador – a placa de vídeo, no caso – executa, a fim de pegar as coordenadas dos vértices de um objeto previamente modelado e mostrá-lo na tela do computador. Ou seja, uma sequência de etapas necessárias para transformar uma descrição matemática de uma cena em uma imagem discretizada na tela. Cada estágio desse Pipeline pode ser entendido como a transformação de um Espaço (sistema de coordenadas) para outro.A Figura 1 abaixo mostra o Pipeline Gráfico em uma de suas representações.
Pipeline Gráfico pode ser entendido como um conjunto de passos que o computador – a placa de vídeo, no caso – executa, a fim de pegar as coordenadas dos vértices de um objeto previamente modelado e mostrá-lo na tela do computador. Ou seja, uma sequência de etapas necessárias para transformar uma descrição matemática de uma cena em uma imagem discretizada na tela. Cada estágio desse Pipeline pode ser entendido como a transformação de um Espaço (sistema de coordenadas) para outro.A Figura 1 abaixo mostra o Pipeline Gráfico em uma de suas representações.
Figura 1 - Esquema de todo o pipeline
Neste estágio da "Atividade II" iremos implementar módulos responsáveis por transformar primitivas descritas no espaço canônico para o espaço de tela. Em conjunto com o que foi desenvolvido no "Atividade I", este trabalho, ao seu final, receberá a descrição de objetos no espaço canônico e gerará sua rasterização no espaço de tela.
A composição de todas as matrizes do pipeline em uma só matriz é mostrada abaixo. Nesse trabalho serão desenvolvidos as estruturas e funções para levar um ponto do espaço canônico [ -1.0, 1.0 ] x [ -1.0, 1.0 ] para o espaço da tela [ 0, 0 ] x [ 511, 511 ]. Conforme orientação, não levaremos em conta a coordenada z.
Figura 2: Implementação das estruturas para matrizes e vetores, e da função de multiplicação de matrizes.
Logo abaixo, a Figura 3 mostra o resultado do teste da estrutura das matrizes e a função de multiplicação de duas matrizes.
Figura 3: Teste da estrutura das matrizes e a função de multiplicação de duas matrizes.
Figura 3: Teste da estrutura das matrizes e a função de multiplicação de duas matrizes.
Após o teste da Figura 3, o próximo passo será a implementação da função de multiplicação de uma matriz por um vetor, segundo a dica da definição da "Atividade II", a saber: "Crie uma função para multiplicação de matrizes (gera uma nova matriz como resultado).", na Figura 4.
Figura 4: função de multiplicação de uma matriz por um vetor.
O próximo passo. Figura 5, mostra o resultado do módulo que transforma o ponto no espaço canônico de coordenadas x = -0.7 e y = 0.7, convertendo-o para o ponto no espaço da tela correspondente, que é o ponto com coordenadas x = 0 e y = 1.
Figura 5: resultado e função de conversão de ponto do espaço para tela.
Os módulos prontos, ao compara o desenho de um ponto, uma reta, e um triângulo com as funções da OpenGL, com o desenho do mesmo ponto, reta e triângulo com as funções desenvolvidas no Trabalho 1 e a função de conversão desenvolvida desse segundo trabalho teremos os seguintes códigos e resultados (Figura 6 e Figura 7).
Código da OpenGL:
Figura 6: resultado usando a OpenGL
Código da MyOpenGL:
Figura 7: resultado usando a MYOpenGL
Por fim, observando a Figura 8, ao ampliarmos, foi feita a comparação entre a geração de ponto, linha e triângulos utilizando os dois sistemas. O triângulo no OpenGL foi desenhado ligando os três vértices por linhas, da mesma maneira da aplicação desenvolvida.
Figura 8: Comparando os resultados usando a OpenGL e MYOpenGL
Possíveis melhoras
Não vejo uma possível melhora com a implementação do que foi proposto na "Atividade 2", porem tem muita coisa a ser feita e melhorada em relação a Classe MyOpenGL que ainda não está completa e não possui um tratamento de exceção adequado.
Dificuldades encontradas
Não tive problemas com a implementação do trabalho em si. A principal dificuldade encontrada foi com minha adaptação e aprendizado com o C++ devido algumas dificuldade com a linguagem em si.
Referências
Hearn, D.; Baker, M.P. Computer Graphics: C Version. Second edition. Prentice Hall, 1997.
Foley, J. D., et al. Computer Graphics: Principles and Practice. New York: Addison Wesley, 1990.
Azevedo, E.; Conci, A. Computação Gráfica: Teoria e prática. Editora Campus, 2003.
O código fonte do trabalho encontra-se no endereço: https://www.dropbox.com/s/a7kyemnihhibm07/MyProjetc-Ex2%20-%20Vers%201.3.zip
Foley, J. D., et al. Computer Graphics: Principles and Practice. New York: Addison Wesley, 1990.
Azevedo, E.; Conci, A. Computação Gráfica: Teoria e prática. Editora Campus, 2003.
O código fonte do trabalho encontra-se no endereço: https://www.dropbox.com/s/a7kyemnihhibm07/MyProjetc-Ex2%20-%20Vers%201.3.zip












Comentários