Conceitos Iniciais
O que é um pipeline gráfico?
Um pipeline gráfico é a sequência de passos que leva uma cena ou objeto 3D para ser rasterizado em um espaço 2D. O pipeline gráfico a ser implementado é um pipeline gráfico semelhante ao utilizado pela OpenGL. No pipeline gráfico existe um fluxo de transformações e espaços pelo qual o objeto 3D deve passar até que seja rasterizado na tela do computador 2D.
A figura 1 mostra o pipeline gráfico dado em sala de aula.
![]() | |
| Figura 1: Estrutura do pipeline gráfico |
![]() | ||
| Figura 2: Pipeline de transformação de coordenadas |
Coordenadas Homogêneas
Coordenadas homogêneas são um sistema de coordenadas que possui a vantagem que coordenadas de pontos, incluindo pontos no infinito, podem ser representados usando coordenadas finitas. Entretanto, a maior vantagem de utilizar coordenadas homogêneas em computação gráfica é que elas permitem que transformações afins, como a translação, e transformações projetivas de serem representadas por uma matriz.
Dessa forma utilizamos coordenadas homogêneas com o objetivo de permitir que qualquer transformação seja representada em matriz e assim ser possível combinar todas as transformações em uma única matriz.
Agora que já sabemos a importância de utilizar coordenadas homogêneas, vamos aprender a como converter uma coordenada cartesiana (euclidiana). Como mostrado na figura 3, para transformar uma coordenada euclidiana para uma coordenada homogênea basta acrescentar uma nova coordenada com valor w e multiplicar todas as outras coordenadas pelo o valor w. Em geral, para facilitar os cálculos adota que a coordenada homogênea w = 1.
![]() |
| Figura 3: Coordenada euclidiana e coordenada homogênea |
Escala
A escala é uma transformação para modificar o tamanho do objeto em cada um dos seus eixos. A operação de escala em coordenadas homogêneas é mostrada na figura 4.![]() |
| Figura 4: Escala |
Rotação
A rotação no espaço 3D é executada ao redor de um dos eixos do sistema de coordenadas. Assim, escolhemos qual eixo queremos rotacionar e quantos graus serão utilizados. A rotação em coordenadas homogêneas é mostrada na figura 5.![]() |
| Figura 5: Rotação |
Translação
A translação é uma transformação que descola o objeto de posição. A translação só pode ser representada em matriz em coordenadas homogêneas. A translação em coordenadas homogêneas é mostrada na figura 6.![]() |
| Figura 6: Translação |
Pipeline Gráfico
Espaço do objeto
É nesse espaço em que ocorre a modelagem do objeto. Cada objeto é modelado de maneira individual e possui suas próprias coordenadas. O espaço do objeto é um espaço 3D que não tem limites de extensão, assim o objeto pode ter qualquer dimensão ao longo dos três eixos.Em geral, cada objeto possui o seu sistema de coordenadas e depois vão se juntar para dividir o espaço do universo. Vale ressaltar que o espaço do objeto só define suas dimensões e não é responsável por definir a posição do objeto na cena. Essa tarefa é responsabilidade do espaço do universo.
Espaço do Universo
O espaço do universo é onde todos os objetos ficam reunidos, portanto dividem o mesmo sistema de coordenadas. É no espaço do universo que toma a cena é formada. Agora com a cena formada devemos registrar a cena através de uma câmera, dessa forma somos levas ao espaço da câmera.Transformação: Espaço do Objeto → Espaço do Universo
Para transformar os vértices do espaço do objeto para o espaço do universo utilizamos a matriz Model. A matriz Model é composta por uma série de escalas, rotações e translações e cisalhamentos.Espaço da câmera
Quando colocamos a câmera na cena temos que transformar todos os pontos do espaço do universo para um novo sistema de coordenadas, o sistema da câmera. Para criar esse novo sistema de coordenadas precisamos informar a posição da câmera (EYE) no espaço do universo, o vetor direção (AT), para onde a câmera aponta, e o vetor (UP), que é o vetor que aponta para parte superior da câmera. Com esse parâmetros podemos criar o sistema de coordenadas do espaço da câmera.Transformação: Espaço do Universo → Espaço da Câmera
A matriz View é a responsável por transformar os vértices do espaço do universo para o espaço da câmera. Essa matriz é composta por mais duas operações, uma rotação e uma translação. Multiplicando as duas operações transferimos o centro da cena para a posição da câmera.
A partir dos parâmetros EYE, AT e UP conseguimos determinar o sistema de coordenada da câmera (xc, yc, zc). O eixo e oposto a AT, isto é, fazemos a diferença entre EYE - AT. A direção xc é obtida pelo produto vetorial de AT por UP e yc pelo produto vetorial xc e zc.
Note que UP não é necessáriamente ortogonal a AT .
.
Espaço de Recorte
Como já possuímos os pontos no espaço da câmera precisamos projetar a cena restante um plano de projeção (view plane) e descartar pontos que não são vistos pelo câmera. Assim, devemos escolher como se as primitivas serão projetadas em perspectiva ou ortogonal.Projeção Ortogonal
Na projeção ortogonal tanta a forma quanto o tamanho do objeto são mantidos após projetadas no view plane. A projeção ortogonal é uma transformação de um objeto 3D em um objeto bidimensional. Para isso basta que a coordenada Z seja desconsiderada.
Projeção Perspectiva
Na projeção perspectiva, o tamanho e a forma de um objeto são modificados de acordo com a posição no espaço do universo, dando a mesma sensação de distância que temos nos nossos olhos.Quando realizamos a projeção perspectiva as coordenadas homogêneas podem assumir valores diferente de 1.
![]() |
| Figura 7: Projeção Paralela e Perspectiva |
Transformação: Espaço da Câmera → Espaço Projetivo ou de Recorte
Essa transformação é realizada pela matriz Projection. Essa matriz transforma os vértices do espaço da câmera para o espaço de recorte. A matriz Projection é dada no seguinte formato mostrado na figura 7 e só depende da distância até o view plane.![]() |
| Figura 8: Matriz projection |
Espaço Canônico
Agora devemos homogenizar todas as coordenadas, esse procedimento é feito dividindo todas as coordenadas pelo novo valor da coordenada w. Com esse procedimento ocorre uma distorção na imagem, comprimindo toda a cena e obtemos o espaço canônico. Assim os vértices sofrem uma distorção. Os objetos mais próximos do view plane câmera ficam maiores enquanto os que estão mais longe ficam menores.Espaço de Tela
O último procedimento é levar os objetos do espaço canônico para o espaço de tela. Isto é feito multiplicando todos os vértices do espaço canônico pela matriz view port. A matriz view port tem as seguintes operações:- Escala de -1 no eixo y;
- Escala de w/2 e h/2 nos eixos x e y (w é número de pixels horizontais e h número de pixels verticais);
- Translação de (w-1)/2 em x e (h-1)/2 em y;
![]() |
| Figura 9: Mudança do espaço canônico para espaço de tela |
Transformação: Espaço “Canônico” → Espaço de Tela
Na figura 6 é mostrado a cada operação implementada pela matriz ViewPort.![]() | ||
| Figura 10: Matriz ViewPort |
Resultado
No vídeo abaixo é apresentado o resultado de todo o pipeline implementado durante o trabalho.A figura 10 faz a comparação do resultado do pipeline fornecido pelo professor e o implementado.
![]() |
| Figura 11: Resultado do pipeline do professor |
![]() | ||
| Figura 12: Resultado do pipeline implementado |
Dificuldades Encontradas
As maiores dificuldades encontradas foram a implementação do pipeline de modo que não ocorresse perda de fluxo de informações.Possíveis Melhorias
As possíveis melhorias que podiam ser implementadas seriam o preenchimento completo dos triângulos e otimização de código.Conclusão
O trabalho proposto foi bem interessante pois proporciona o entendimento do que é um pipeline e o funcionamento do pipeline gráfico implementado pela OpenGL.Referências Bibliográficas
Notas de aula do Prof. Christian Pagothttps://en.wikipedia.org/wiki/Homogeneous_coordinates
https://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html
https://en.wikipedia.org/wiki/Graphics_pipeline





















