Pipeline gráfico na computação gráfica é a sequência de passos que deve ser seguida para criar uma representação 2D de uma cena 3D, ou seja, uma vez que um modelo 3D foi criado, o pipeline gráfico é o processo de transformar esse modelo 3D no que o computador exibe.
A matriz model é composta pelas transformações de translação, rotação e escala, onde sua matriz é a multiplicação das matrizes dessas transformações geométricas.
Principais Dificuldades:
Uma dificuldade foi carregar o objeto no windows utilizando o codeblocks ou devc++, então tive que usar o linux. Também tive dificuldade no entendimento do pipeline.
Referencias Bibliográficas:
Espaço objeto para o Espaço universo (Model)
Esta etapa é responsável pela transição do sistema de coordenadas do objeto para o sistemas de coordenadas 3D e contem todos os objetos para formar a cena, para posicionar o modelo no universo é necessário que ocorram transformações geométricas e para que isso ocorra será utilizada uma matriz model.
Esta etapa é responsável pela transição do sistema de coordenadas do objeto para o sistemas de coordenadas 3D e contem todos os objetos para formar a cena, para posicionar o modelo no universo é necessário que ocorram transformações geométricas e para que isso ocorra será utilizada uma matriz model.
A matriz model é composta pelas transformações de translação, rotação e escala, onde sua matriz é a multiplicação das matrizes dessas transformações geométricas.
Espaço universo para o Espaço câmera ( View)
Essa etapa é responsável por modificar e carregar os objetos para atender as configurações da câmera. Para isso utilizaremos a matriz view que é responsável pela posição da câmera e para onde ela aponta, para isso devemos armazenar algumas informações da câmera:
Posição da Câmera (Camera Position): está é a posição da câmera ainda no espaço do Universo, pois lembre-se que ela sempre está na origem no espaço da Câmera. Este posicionamento, será composto por valores dos eixos coordenados x, y e z.
LookAt=(Dx,Dy,Dz)
VetorUp: ele informa qual é a parte de cima da cena, ou seja o up, então geralmente esse vetor terá valor (0, 1, 0).
Com os vértices no espaço da câmera, será utilizada uma matriz projeção para trazer os pontos para o espaço recorte. Sabemos que a câmera aponta para um ponto especifico da cena, então, teremos duas opções de visualização, uma ortogonal(paralela) e uma perceptiva. A câmera também tem um ângulo de visão, chamado de abertura da câmera, que significa que posicionamos uma câmera, ela registrará um volume da cena.Então o que queremos é trazer seu sistema de coordenadas para o espaço recorte e para isso utilizamos a matriz projeção que faz com que os vértices do espaço da câmera sejam projetados em um plano de projeção, o View Plane. Aqui a coordenada homogênea é alterada.
Espaço da Recorte para o Espaço canônico (divisão por w)
Depois que é realizado a projeção perspectiva será necessário dividir todos pela coordenada homogênea w, isso faz com que toda cena tema uma distorção perspectiva, onde os objetos mais proximo da câmra ficam maiores, e os mais afastados ficam menores.
Espaço canônico para o Espaço de tela
Pos=(Px,Py,Pz)
Direção da Visão (View Direction): vai ser para informar para qual lugar a visão da camera está direcionada, assim, como na posiçã oda camera, considramos que a câmera ainda esteja no espaço universo. Desta forma, caso o objeto a ser visualizado esteja na origem, a direção de visualização da câmera será (0, 0, 0).
VetorUp: ele informa qual é a parte de cima da cena, ou seja o up, então geralmente esse vetor terá valor (0, 1, 0).
Com os vértices no espaço da câmera, será utilizada uma matriz projeção para trazer os pontos para o espaço recorte. Sabemos que a câmera aponta para um ponto especifico da cena, então, teremos duas opções de visualização, uma ortogonal(paralela) e uma perceptiva. A câmera também tem um ângulo de visão, chamado de abertura da câmera, que significa que posicionamos uma câmera, ela registrará um volume da cena.Então o que queremos é trazer seu sistema de coordenadas para o espaço recorte e para isso utilizamos a matriz projeção que faz com que os vértices do espaço da câmera sejam projetados em um plano de projeção, o View Plane. Aqui a coordenada homogênea é alterada.
Espaço da Recorte para o Espaço canônico (divisão por w)
Depois que é realizado a projeção perspectiva será necessário dividir todos pela coordenada homogênea w, isso faz com que toda cena tema uma distorção perspectiva, onde os objetos mais proximo da câmra ficam maiores, e os mais afastados ficam menores.
Espaço canônico para o Espaço de tela
Para passar os objetos para o espaço de tela temos que fazer alguma transformações, é necessário fazer primeiramente um espelhamento na cena para que a cena não fique invertida.
Depois temos que escalar a cena de modo que ela ocupe toda tela, então, iremos utilizar os coeficientes de escala com o valores de W(largura de tela)/2 e H(altura de tela)/2.
Após isso, já teremos a posição correta do objeto e ocupando a tela em um espaço considerável, mas não tratamos daqueles vértices que são menores que 0 e se eles não se tornarem positivos não vão ser rasterizados na tela, por isso temos que transladar os vértices ate que todos fiquem maiores que 0.
Comparação do meu resultado com o do professor:
Principais Dificuldades:
Uma dificuldade foi carregar o objeto no windows utilizando o codeblocks ou devc++, então tive que usar o linux. Também tive dificuldade no entendimento do pipeline.
Referencias Bibliográficas:
<https://en.wikipedia.org/wiki/Graphics_pipeline> Acesso em dia 02 de maio.
PAGOT, Christian Azambuja. Material de aula.
PAGOT, Christian Azambuja. Material de aula.