TAREFA 3

Este é o relatório da terceira tarefa da disciplina IA841 - Introdução à Modelagem de Sólidos. Esta atividade consiste em implementar superfícies de Bezier triangular.


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 quatro classes: R3, Mesh, BezierTriSurf e GLUTViewer. Nos arquivos R3.{h, cc} está a classe R3, que define operadores para vetores em 3D. Nos arquivos Mesh.{h, cc}, é definida a classe que contém a lista de vértices e de triângulos a serem visualizados.
Os arquivos BezierTriSurf.{h, cc} contêm a implementação das superfícies de Bezier triangulares. Para isso é fornecido ao construtor desta classe um arquivo texto contendo a ordem d da superfície desejada e a lista dos (d+1)*(d+2)/2 pontos de controle. A ordenação destes pontos está definida conforme indicado na figura a seguir:

Para amostrar pontos nesta superfície basta indicar as coodernadas (u,v,w) do ponto de interesse. Esta classe também é capaz de criar uma malha da superfície especificando em quantos pedaços o intervalo [0,1] deve ser dividido. Assim, para o parâmetro n são amostrados (n+1)*(n+2)/2 pontos e os triângulos criados seguem o mesmo padrão dos triângulos da malha de controle.
Já os arquivos glutviewer.{h, cc} contêm a classe GLUTViewer que implementa a visualização da superfície de Bezier e de sua malha de controle. 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.
O programa foi desenvolvido na plataforma UNIX. Para executá-lo, compile-o com o comando "make" e depois uso o comando "./bezier file.txt", onde file.txt contém a malha de controle. Um exemplo de malha de controle se encontra no arquivo example.txt.


Funcionalidades

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


Exemplos

A seguir, temos figuras ilustrando deste trabalho, sendo n o número de pedaços para dividir o intervalo [0,1].

Malha de Controle n=1
n=3 n=5
n=7 n=9
Fernando Ferrari de Goes