Definição do trabalho:
Para este trabalho, deveríamos implementar todos os passos do pipeline gráfico usando um objeto importado, no caso, o macaco do Blender. Para isso, nos foi passado um exemplo sobre qual deveria ser o resultado final.
Resultado do programa fornecido pelo professor para ser usado como base |
O programa para importar o objeto também foi fornecido pelo professor.
O Pipeline:
O pipeline gráfico é o processo pelo qual transformamos imagens para serem exibidas na tela.
Esquema do Pipeline gráfico retirado daqui. |
O Pipeline gráfico consiste de etapas que podem ser descritas pela mudança de espaços. O primeiro é o espaço do objeto, que define apenas as coordenadas do objeto com relação a origem de uma base xyz genérica. O segundo, é o espaço do universo, que define o comportamento do objeto no espaço da cena. O terceiro é o espaço da câmera, onde são definidos os parâmetros de visualização da cena. O quarto é o espaço de recorte, onde é definido o que será visto, então, temos o espaço canônico responsável pela projeção e, por fim, o espaço de tela, onde os objetos tridimensionais são transformados para bidimensionais para poderem ser exibidos na tela.
Implementação:
Espaço do objeto - universo:
O primeiro passo, era transformar o objeto para o espaço do universo e definir o seu comportamento, como o objeto foi colocado na origem, a matriz transformação era composta apenas pela matriz identidade, porém, como foi aplicada uma rotação, essa matriz identidade foi multiplicada por uma matriz rotação do modelo
Matrizes de rotação retiradas daqui. |
Como a rotação foi ao redor de y, usamos a segunda matriz (Ry), para manter a rotação constante com efeito de animação, criamos uma variável que era incrementada a cada quadro e usamos as funções da biblioteca math para calcular senos e cosenos.
Espaço do universo - câmera:
Para transformar o objeto do espaço do universo para o espaço da câmera, era necessário fazer uma rotação e uma translação, mas, primeiramente, deveríamos definir as configurações da câmera. Seguindo o modelo do programa auxiliar, coloquei a minha câmera também na posição (0, 0, 4) olhando para o ponto (0, 0, 0) e com o vetor "up" em y. Tendo as configurações da minha câmera no espaço do universo, eu precisava gerar o espaço da câmera. Pelo posicionamento da minha câmera, eu não precisei aplicar uma rotação, pois os vetores do espaço do universo e os vetores do espaço da câmera tinham a mesma direção. A translação foi contrária a da câmera, ou seja, -4 em z.
Modelo de matriz de rotação para o espaço da câmera retirado dos slides de aula do professor Christian Pagot. |
Modelo de matriz de translação para o espaço da câmera retirado dos slides de aula do professor Christian Pagot. |
No modelo das matrizes acima, as coordenadas x, y e z da matriz de rotação são dos vetores do espaço da câmera e, na matriz de translação, as coordenadas p são da posição da câmera. Para esse caso, a matriz de rotação era a matriz identidade e a matriz de translação possuia apenas pz diferente de 0.
Espaço da câmera - recorte:
A próxima etapa era calcular a distorção de projeção na visualização do objeto, para isso, usamos uma matriz do tipo
Modelo de matriz de projeção para o espaço da câmera retirado dos slides de aula do professor Christian Pagot. |
Para esse caso, assumimos d=1.
Espaço de recorte - canônico:
Esta transformação consiste em dividir as coordenadas dos vértices pela sua coordenada homogênea, causando uma distorção na cena.
Espaço canônico - tela:
Para essa transformação, usaremos matrizes desse molde:
Matrizes retiradas do script auxiliar do octave feito pelo professor Christian Pagot. |
Resultados:
Print do objeto exibido pelo programa criado nesse trabalho. |
Objeto gerado pelo programa criado nesse trabalho.
Problemas apresentados:
Possíveis melhorias:
Seria interessante poder carregar outros objetos, mesmo os que não são compostos apenas por triângulos. Achei alguns modelos interessantes, mas possuiam faces com mais vértices e eu não consegui editar a biblioteca para poder usá-los.
Diferentes modelos:
Também achei alguns modelos interessantes que eu consegui carregar.
Um anão do filme Branca de Neve |
Referências:
https://en.wikipedia.org/wiki/Graphics_pipeline
https://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html
http://goanna.cs.rmit.edu.au/~gl/teaching/rtr&3dgp/notes/pipeline.html
Notas de Aula e Material complementar do professor Christian Pagot.
http://www.turbosquid.com/FullPreview/Index.cfm/ID/671354 (Modelo do anão)
http://www.turbosquid.com (Mais modelos em 3D)
http://blender.stackexchange.com/questions/8322/understanding-3d-transforms-and-rotations
Nenhum comentário:
Postar um comentário