TAREFA 2

Este é o relatório da segunda tarefa da disciplina IA841 - Introdução à Modelagem de Sólidos. Esta atividade consiste em implementar a técnica de subdivisão Catmull-Clark e aplicá-la nos sólidos platônicos Tetraedro e Cubo.


Implementação

O programa foi feito em ANSI C++ e foi utilizada as API OpenGL e GLUT para visualização.
A implementação consiste em seis classes: R3, Vertex, Edge, Face, Mesh e GLUTViewer.
Nos arquivos R3.{h, cc} está a classe R3, que define operadores para vetores em 3D. Nos arquivos Mesh.{h, cc} estão as classes Vertex, Edge, Face e Mesh para a manipulação dos sólidos a serem subdivididos. Os arquivos glutviewer.{h, cc} contêm a classe GLUTViewer que implementa a visualização desses sólidos. Por último, o arquivo main.cc contém as funcionalidades de display, reshape e tratamento de eventos necessárias pela API GLUT, além da função principal.
A estrutura de dados utilizada consiste em uma lista de vértices, uma lista de arestas e uma outra de faces. Assim, o processo de subdivisão corresponde a percorrer estas listas criando um novo objeto da classe Mesh com os novos vértices, arestas e faces, conforme indicado no artigo original de Catmull-Clark.
Para construir os modelos originais dos sólidos platônicos (no caso desta tarefa, somente o cubo e o tetraedro), foi implementado funções que já contêm as descrições destes objetos, seguindo os resultados da primeira tarefa da disciplina.
O programa foi desenvolvido na plataforma UNIX. Para executá-lo, compile-o com o comando "make" e depois uso o comando "./catmull <0 ou 1>", onde 0 visualiza o tetraedro e 1, o cubo.


Funcionalidades

Para facilitar a visualização, foram implementadas as seguintes funcionalidades com os respectivos atalhos:

Um outro detalhe do programa é que podem ser realizadas quantas subdivisões forem desejadas.


Exemplos

A seguir, temos figuras ilustrando o resultado de quatro subdivisões do tetraedro e do cubo (cada linha indica uma subdivisão).

Tetraedro Cubo
Fernando Ferrari de Goes