O objetivo deste projeto é implementar um algoritmo que gera superfícies suaves a partir de uma malha poliédrica com uma configuração qualquer. Este algoritmo é apresentado em um artigo publicado no periódico CAD, vol. 10 número 6, em novembro 1978, cuja cópia será distribuída em sala de aula.
A leitura e a interpretação do artigo faz parte do projeto.
Os algoritmos de subdivisão constituem uma classe de algoritmos que consegue tratar malhas poliédricas com facetas cujo número de lados seja diferente de 3 e 4. A idéia básica destes algoritmos consiste em "tornear" um objeto poliédrico eliminando sucessivamente os seus cantos e as suas pontas. E. Catmull e J. Clark apresentam no artigo Recursively generated B-Spline surfaces on arbitrary topological meshes um algoritmo que consegue obter este efeito através das subdivisões sucessivas das facetas de um objeto poliédrico. Pode-se mostrar que, com execeção dos denominados pontos extraordinários, as superfícies resultantes convergem para B-Splines biquadráticas ou bicúbicas.
Considerando uma malha poliédrica definida na estrutura de dados do TDM, implemente o algoritmo proposto por E. Catmull e J. Clark com uso da interface funcional do TDM. O protótipo desta rotina deve ser:
O programa subdivide.c demonstra o uso de todas as funcionalidades necessárias para implementação de subdivisões sucessivas. Ele triangulariza a (face) base do cone com número de arestas maior que 3 que foi apresentado no projeto 2. Observe que o programa main do arquivo display.c foi alterado para acomodar a chamada da rotina subdivide após a chamada da rotina cone(n,radius,height,&obj) definida no arquivo cone.c. Os arquivos Makefile e cone.h foram também devidamente atualizados.
Siga o mesmo procedimento apresentado no projeto 2 para gerar o executável destes arquivos.
Utilize os programas do projeto 2 para gerar os seguintes modelos iniciais em TDM e teste a sua rotina blend:
No relatório deve constar uma descrição do algoritmo implementado e uma cópia das superfícies geradas para os seguintes números de iterações: 1, 2, 3 e 10.