O pipeline gráfico é, em Computação Gráfica, a sequência de passos para a rasterização de uma representação em 2D a partir de um cenário em 3D. O pipeline conta com os seguinte passos:
![]() |
Passos do Pipeline Gráfico |
Espaço do Objeto para o Espaço do Universo: Transforma os vértices de um objeto para o espaço do Universo, ou espaço do Mundo, por meio da multiplicação de cada vértice pela a matriz Model, cada objeto tem sua própria matriz Model separada. É nesse espaço que ocorre as transformações geométricas, sendo elas a rotação, shear, translação e escala.
Espaço do Universo para o Espaço da Câmera: Essa mudança é equivalente a sobrepor o espaço de referência da câmera sobre o sistema de referência do Universo, isso ocorre pela multiplicação da matriz Model pela matriz View. Para a construção da matriz View é necessário saber a posição da câmera, o look at, que seria para onde a câmera está olhando, e o vetor up, que indica o lado para cima da cena.
Com essa informação é possível criar a base da câmera. A matriz View é equivalente a transposta de B multiplicada por T, onde T seria a matriz de translação responsável por transladar a origem do sistema de coordenadas do universo para a origem do sistema de coordenadas da câmera e B é a rotação para alinhar os eixos da câmera com os eixos do universo.
Espaço da Câmera para o Espaço de Recorte: A cena sai do espaço da Câmera para o espaço de Recorte por meio da multiplicação pela matriz de Projeção. A matriz de Projeção simula a distorção perspectiva, onde os objetos mais perto da câmera ficam maiores enquanto os objetos mais longe da câmera ficam menores. No OpenGL, toda a imagem fica contida num espaço chamado de View Frustum. Na implementação deste trabalho é impossível determinar se a cena fica contida ou não, pois a matriz de projeção utilizada não contem alguns parâmetros presentes na matriz de projeção do OpenGL.
Espaço de Recorte para o Espaço Canônico: A mudança do Espaço de Recorte para o espaço canônico se dá pela homogenização dos vértices (a divisão das coordenadas dos vértices por w). No OpenGL, toda imagem fica contida em um cubo que vai de (1, 1, 1) à (-1, -1, -1).
Espaço Canônico para o Espaço da Tela: A imagem contida no espaço canônico é mapeada para o espaço da tela através de escalas e translações.
Implementação do Pipeline Gráfico
![]() |
Suzanne após a passagem pelo pipeline gráfico |
Transformações/Matrizes utilizadas ao longo do Pipeline gráfico foram os seguintes:
Operações antes de entrar no Pipeline Gráfico: As faces, ou triângulos, que formam a imagem são salvas em uma lista encadeada, cada nó contem 4 variáveis, que são 3 vetores no tipo glm::vec3, tipo primitivo pertencente a biblioteca GLM, e um ponteiro para o próximo nó.
Operações no Espaço do Objeto: A matriz Model é igual a matriz identidade, ou seja, os vértices do objeto não sofre alteração quando sai do espaço do Objeto para o espaço do Universo. No vídeo abaixo, a Suzanne é rotacionada 0.005 graus a mais que a rotação anterior em torno do eixo Y a cada chamada da função MyGlDraw.
Operações no Espaço do Universo: Para a construção da câmera foi utilizado as seguintes parâmetros: a câmera se encontra na posição (0, 0, 2), a câmera está olhando para a origem do sistema de coordenadas e o vetor up é paralelo ao eixo y.
posição = (0, 0, 2) , look at = (0, 0, 0) , vetor up = (0, 1, 0)
Operações no Espaço da Câmera: Nesse espaço aplicamos a matriz de projeção que foi ministrada em sala de aula, onde temos apenas como parâmetro a distância do plano de projeção e o centro de projeção da câmera.
d = 1
Operações no Espaço de Recorte: Apenas dividimos cada coordenada do vértice por w.
Operações no Espaço Canônico: Neste espaço realizamos três tipos de transformações, primeiro invertemos o eixo y com a multiplicação por uma matriz de escala. Depois transladamos a imagem em w, no espaço canônico w é equivalente a 1, para as coordenadas x e y. E por último, escalamos os vértices de acordo com a largura e a altura da tela. As escala e a translação foi realizada de acordo com a matriz ministrada em sala.
![]() |
Comparação com a Suzanne gerada pelo OpenGL |
Melhorias: Pode notar que o resultado obtido comparado com o OpenGL não ficou muito parecido, alguns ajustes nos parâmetros da câmera poderia solucionar este problema.