quinta-feira, 5 de maio de 2016

Pipeline Gráfico

Este trabalho tem como objetivo a implementação do Pipeline Gráfico aprendido durante as aulas de Introdução à Computação ministradas pelo professor Christian Azambuja Pagot . A rasterização do resultado final do objeto foi feito utilizando a implementação do trabalho anterior .

Pipeline Gráfico:
O Pipeline Gráfico, em computação gráfica, é uma sequência de passos que deve ser seguida para se criar uma representação 2D de uma cena 3D. 

O Pipeline Gráfico tem a seguinte estrutura: 

Espaço do Objeto -> Espaço do Universo
O espaço do objeto é um espaço tridimensional onde, geralmente, cada objeto tem seu próprio sistema de coordenadas, objetos os quais posteriormente, irão se juntar e passarem a dividir o espaço do universo. Aqui, poderemos aplicar qualquer transformação sobre o objeto: rotação, translação, shear e/ou escala. Após aplicado tais transformações, o objeto passará para o espaço do universo.

Matriz Model
A construção da Matriz Model é feita a partir de transformações dos pontos do espaço do objeto para o espaço do universo, então, precisamos considerar que, o espaço do objeto é composto pelos pontos e sistema de coordenadas do objeto, pontos estes que contém valores em cada uma de suas coordenadas x, y e z. Desta forma, para transportar pontos do espaço do objeto para o espaço do universo, nós precisamos utilizar transformações geométricas sobre cada ponto desta matriz.


Espaço do Universo -> Espaço da Câmera
O próximo passo é levar o objeto do espaço do universo para o espaço da câmera, para isso devemos definir de onde serão visualizados os objetos, ou seja, quais as coordenadas da câmera e para onde ela está olhando. Na verdade a câmera estará sempre localizada na origem olhando para o sentido negativo do eixo z, o que muda são as coordenadas dos vértices dos objetos, que passam por uma mudança de sistema de coordenadas. Quando este processo ocorre, dizemos levar os vértices do espaço do universo paro o “espaço da câmera”.


Para “mudar” a posição da câmera, basta definir o ponto no espaço em que ela deverá estar, e nesse ponto definir uma base ortonormal. Situação mostrada na imagem a seguir:



Em seguida, realiza-se sobre as coordenadas dos vértices o processo chamado de “mudança de base”, que irá levar os vértices para o sistema de coordenadas definido pela base da câmera.


Matriz View
O processo de levar os vértices do espaço do universo para o espaço da câmera, é montando a Matriz View. Com os nossos objetos reunidos no espaço do universo e com o seus respectivos sistemas de coordenadas agora tridimensionais, nós precisamos definir o posicionamento da nossa câmera, para através do produto dos nossos objetos pela Matriz View possamos chegar ao espaço de câmera. Dessa forma, as três informações importantes que precisamos definir a respeito da nossa câmera são: Posição da câmera, Direção da câmera e o vetor Up.

Matriz ModelView

Espaço da Câmera -> Espaço de Recorte -> Espaço Canônico
Neste momento, os vértices deverão ser multiplicados por uma matriz especial chamada Projeção, fazendo com que os vértices do espaço da câmera sejam levados para o espaço de recorte. A multiplicação por essa matriz irá definir o tipo de projeção, podendo ser ortogonal ou perspectiva.

Em sala, pudemos estudar dois tipos de projeção, sendo elas a projeção perspectiva que permite a sensação de profundidade dos objetos na tela e a projeção ortogonal que preserva o paralelismo das retas, como mostra a imagem:




Matriz Projection




Matriz ModelViewProjection
Os vértices do espaço projetivo são transformados para o espaço canônico, para isto divide-se as coordenadas dos vértices no espaço projetivo pela sua coordenada homogênea. Isto gera uma mudança na geometria da cena, os objetos próximos da câmera ficam maiores, e os mais afastados ficam menores.


Espaço Canônico -> Espaço de Tela
No espaço canônico é garantido que todos os vértices da cena visível possui os valores de suas coordenadas entre -1 e 1. Este espaço é obtido quando, após multiplicar os vértices pelas matrizes model, view e projection, dividi-se as coordenadas dos vétices por sua coordenada w (coordenada homogênea). 



Após os espaço canônico é preciso preparar os vértices para serem rasteirados na tela. Este processo e feito multiplicando os vértice por uma matriz chamada viewport. Essa matriz leva os vértices do espaço canônico para o “espaço da tela e é formada pela multiplicação da matrizes mostradas na figura abaixo:




Resultados Obtidos:

IMG 1 exemplo cedido pelo professor - IMG2 meu resultado



Referências:
Slides de aula
Exemplo feito no Octave