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.
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.
Para facilitar a visualização, foram implementadas as seguintes funcionalidades com os respectivos atalhos:
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 |