Daniel sousa
Upcoming SlideShare
Loading in...5
×
 

Daniel sousa

on

  • 1,209 views

Em parceria com a Professora Helena Abascal, publicamos os relatórios das pesquisas realizados por alunos da fau-Mackenzie, bolsistas PIBIC e PIVIC. O Projeto ARQUITETURA TAMBÉM É CIÊNCIA difunde ...

Em parceria com a Professora Helena Abascal, publicamos os relatórios das pesquisas realizados por alunos da fau-Mackenzie, bolsistas PIBIC e PIVIC. O Projeto ARQUITETURA TAMBÉM É CIÊNCIA difunde trabalhos e os modos de produção científica no Mackenzie, visando fortalecer a cultura da pesquisa acadêmica. Assim é justo parabenizar os professores e colegas envolvidos e permitir que mais alunos vejam o que já se produziu e as muitas portas que ainda estão adiante no mundo da ciência, para os alunos da Arquitetura - mostrando que ARQUITETURA TAMBÉM É CIÊNCIA.

Statistics

Views

Total Views
1,209
Views on SlideShare
1,209
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Daniel sousa Daniel sousa Document Transcript

  • Universidade Presbiteriana MackenzieMODELAGEM TOPOLÓGICA NON-MANIFOLD PARA O AMBIENTE 3DMAXDaniel Sousa Fest (IC) e Luciano Silva (Orientador)Apoio: PIBIC CNPqResumoPara todos os tipos de representação de modelos existentes, existem duas categorias: manifold enon-manifold (GLASSNER,2005). Estes modelos são chamados de modelos topológicos, poisutilizam noções de vizinhança típicas da área de Topologia Combinatória. Uma das ferramentas demodelagem digital mais utilizadas na atualidade que implementa esta noção de topologia é o 3DsMax. Esta ferramenta utiliza-se de modelos topológicos para reconhecer vértices, arestas e faces dosobjetos através de suas numerações. O aplicativo oferece suporte apenas a objetos do tipo manifoldpara criar uma relação lógica de dependência entre estes vértices, arestas e faces e para manter aconsistência topológica da estrutura de dados que ele utiliza internamente. Desta maneira, o 3Ds Maximpossibilita a criação de objetos do tipo non-Manifold, o que restringe muito a representação deobjetos mais complexos dentro de seu ambiente. O projeto tem como principais objetivos o estudodas representações manifold e non-manifold e o desenvolvimento de uma solução na forma de umplug-in que possibilite a representação de modelos non-Manifold no ambiente do 3Ds Max. Destamaneira, este projeto espera trazer um significativo avanço em estudos para novas representaçõesde objetos de qualquer tipo não só para a ferramenta escolhida para o desenvolvimento, mas paraaplicativos de modelagem computacional em geral.Palavras-chave: non-Manifold, plug-in 3Ds Max, vizinhançaAbstractFor all types of representation of existing models, there are two categories: non-manifold and manifold(GLASSNER, 2005). These models are called topological models because they use typical notionsfrom Combinatorial Topology. One of the latest digital modeling tools used today to implement thisnotion of topology is the 3ds Max This tool is used to recognize topological models of vertices, edgesand faces of objects through their numbering. The application supports only objects of type manifold tocreate a logical relationship of dependence between these vertices, edges and faces and to maintainthe topological consistency of the data structure it uses internally. Thus, the 3ds Max inhibiting thecreation of objects of type non-manifold, which restricts the representation of much more complexobjects within its environment. The aims of this project are the study of representations manifold andnon-manifold and the development of a solution in the form of a plug-in that allows the representationof non-manifold models in 3ds Max environment. So, this project hopes to bring a significantadvance studies for new representations of objects of any kind not only for the chosen tool fordevelopment, but application of computational modeling in general.Key-words: non-Manifold, plug-in 3Ds Max, neighborhood 1
  • VII Jornada de Iniciação Científica - 20111.1 INTRODUÇÃOModelagem topológica é uma técnica de modelagem em Computação Gráfica, que trata daconstrução de modelos computacionais que são controlados pela topologia (relações deincidência e invariantes topológicos) (GOMES e VELHO, 1998). Existem duas categorias demodelagem topológica: manifold e non-manifold.Na modelagem manifold, utilizam-se as restrições topológicas que definem as variedadesdiscretas em Topologia Combinatória. Por exemplo, em modelos manifold não é possível demodelar a noção de auto-intersecção. Já na modelagem non-manifold, estas restriçõestopológicas já não são exigidas. Neste contexto, é possível se construir modelos com auto-intersecção ou que possuam alteração de orientação nas cartas locais discretas associadasa cada ponto do objeto.O ambiente de modelagem e renderização 3DMax (http://www.autodesk.com) representauma das ferramentas mais utilizadas para síntese de imagens em Computação Gráfica.Apesar da grande complexidade desta ferramenta, ela suporta somente modelagem desólidos do tipo manifold. Esta restrição obriga, muitas vezes, um modelador a ter que dividirum determinado objeto para contemplar construções que envolvam auto-intersecção ou comorientação variável, por exemplo, para que as divisões possam atender aos critérios dasvariedades discretas e orientáveis. Neste contexto, o desenvolvimento de um ambiente demodelagem non-manifold para 3DMax representa um tema de grande interesse tantocomputacional quanto comercial.O projeto vinculado a este artigo teve como objetivo o desenvolvimento e implementação deum sistema de modelagem poligonal non-manifold para o ambiente 3DMax. O sistema serádesenvolvido na linguagem C++, devido aos requisitos de desempenho para grandesmodelos gráficos, e integrado como um plug-in dentro do ambiente. Este plug-in tem,adicionalmente, o propósito de iniciar uma linha de plug-ins non-manifold para outrastécnicas de modelagem como NURBS ou superfícies de subdivisão.Este artigo está organizado da seguinte forma: • A Seção 1.2 apresenta o referencial teórico que traz detalhes do desenvolvimento do projeto. • A Seção 1.3 demonstra o método utilizado para a implementação da solução para a problemática tratada pelo projeto. • A Seção 1.4 mostra os resultados e discussões sobre o projeto bem como a presente fase do projeto e suas principais contribuições. 2
  • Universidade Presbiteriana Mackenzie • Finalmente, a Seção 1.5 traz as conclusões obtidas no decorrer do desenvolvimento do projeto em questão.1.2 REFERENCIAL TEÓRICOUm objeto sólido é um objeto que possui um volume finito no espaço, e que possui tantopropriedades geométricas como superfície, volume e centro, como também propriedadesfísicas como massa, centro de gravidade e inércia (GOMES e VELHO, 1998) Um sistema 1998).de modelagem de sólidos pode normalmente representar tanto propriedades geométricascomo físicas de um objeto sólido. Existem diversas técnicas para se representar um objetosólido em Computação Gráfica:A representação CSG (WATT,1993) é uma árvore binária ilustrada na Figura 1 1: Figura 1: Representação CSG.Os nós não-terminais representam operadores, que podem ser movimentos rígidos ou terminaisoperações boleanas (união, interseção e diferença). Os nós terminais podem ser primitivas(sólidos) ou movimentos rígidos. sólidos)Basicamente, CSG é uma representação explícita parcialmente geométrica com parcialmenteinformações topológicas implícitas. Por exemplo, na Figura 1, o objeto sólido pode ser ,representado em CSG como: bloco(10,10,10) - bloco(5,20,5). 3
  • VII Jornada de Iniciação Científica - 2011Esta representação CSG pode ser modificada de forma que o objeto sólido pode serrepresentado como uma expressão boleana como descrito abaixo: entado (H1 ∩ H2 ∩ H3 ∩ H4 ∩ H5 ∩ H6) ∩ (H7 ∪ H8 ∪ H9 ∪ H10 ∪ H11 ∪ H12)Qualquer ponto no espaço do modelo para o qual esta expressão boleana é verdadeirapertence ao interior do objeto sólido. Na equação, todos os meio-espaços que indicam a espaçoslocalização de um plano no sistema coordenado especificado são dados geométricos, etodas as relações topológicas são inferidas a partir do operador boleano.As vantagens da representação CSG são as seguintes: é concisa, garante,automaticamente, que os objetos são válidos e os algoritmos para converter CSG em B nte, B-repsão conhecidos e confiáveis.O esquema B-rep (MOLLER,2000) representa um sólido segmentando o seu contorno numnúmero finito de subconjuntos interligados normalmente chamados faces (ou “patches”), e interligadosrepresentando cada face por suas arestas (que compõem um contorno) e vértices. A Figura compõem2 mostra um exemplo de B B-rep: Figura 2: Representação B-rep.Basicamente, B-rep é uma representação explícita da topologia. A árvore B rep B-rep é umaárvore de relação topológica. Para as peças A e B na Figura 3, as relações topológicas entre ,vértices, arestas e faces são completamente idênticas. A diferença corresponde àscoordenadas dos pontos na árvore B das B-rep. 4
  • Universidade Presbiteriana Mackenzie Imagem 3: Representação B rep mostrando dois objetos diferentes com a mesma topologia B-rep topologia.As vantagens da representação B B-rep são as seguintes: • as informações são completas, e esta representação tem uma longa his história na comunidade de CAD, e portanto existem muitos softwares disponíveis para a manipulação dos seus dados geométricos; • as aplicações e algoritmos baseados em B rep são competitivos com aqueles B-rep baseados em CSG; • a tecnologia disponível para superfícies “ “sculptured” baseia- -se em superfícies, e portanto é mais fácil incorporá em sistemas B-rep dos que em sistemas CSG. incorporá-la repPara todos estes esquemas de representação, existem duas categorias de modelos:manifold e non-manifold (GLASSNER,2005) Estes modelos são chamados de modelos (GLASSNER,2005).topológicos, pois utilizam noções de vizinhança típicas da área de Topologia Combinatória.Todo objeto 3D pode ser visto como um grafo. Se analisarmos um dado ponto de um grafo,e os seus vizinhos, e houver a possibilidade deste grafo ser representado em um plano(grafo planar), este modelo satisfaz a propriedade geral para que seja manifold. Asvariedades (no caso de sólidos 3D) são deformações no plano R². Assim, para man . manter apropriedade de variedade (manifold), cada vizinhança de um ponto do sólido tem ser muitoparecido com um plano. 5
  • VII Jornada de Iniciação Científica - 2011Na modelagem topológica, quando um objeto ou forma é criado, cada vértice, aresta e facerecebe uma numeração. Esses números são usados, internamente, para saber quaisvértices/aresta/faces serão alterados em qualquer tipo de operação. A essa estrutura devértices, aretas, faces e suas devidas numerações é dado o nome de topologia do modelo.A Figura 4 ilustra um objeto poligonal simples (esquerda) e as informações de sua topologia(direita): Figura 4: Um modelo poligonal simples (cubo) e sua topologia.Se a representação da topologia satisfaz aos critérios das variedades combinatóriasdiscretas, o modelo é chamado de manifold. Caso contrário, o modelo é chamado non-manifold.Modelos non-manifold permitem a construção de objetos complexos que envolvem, porexemplo:• auto-intersecção;• alteração de orientação local da fronteira do sólido;• operadores geométricos e topológicos mais complexos;Além destes fatores, estes modelos possibilitam a representação de superfícies não finitas.Quando isto acontece, usa-se uma aproximação discreta digital conhecida como malhaspoligonais. Esta representação é a mais usada ultimamente por vários softwares demodelagem 3D digital.A ferramenta 3Ds Max, abordada neste projeto, possui limitações quanto a utilização demodelos non-manifold. A ferramenta utiliza-se da topologia para reconhecer faces, vértices earestas dos objetos através de suas numerações. Dessa forma, quando um deles éselecionado e manipulado, através de um modificador, por exemplo, ele reconhece quaisvértices, arestas e faces sofrerão efeitos com a aplicação do recurso. Dependendo das 6
  • Universidade Presbiteriana Mackenziemodificações feitas no modelo, é possível até mesmo alterar sua topologia. (AUTODESK, s.d.). Sendo assim, um objeto necessariamente se utilizará da relação lógica de dependênciaentre vértices, arestas e faces para ser representado no 3Ds Max. Na representação deobjetos do tipo non-Manifold, essa dependência entre vértices, arestas e faces entre si eentre seus vizinhos inexiste, ou seja, não é necessário que um vértice faça parte de umaaresta, ou de uma face, e qualquer modificação aplicada apenas a um deles nãonecessariamente afetará a sua vizinhança. Além destes pontos, O 3Ds Max exige que omodelo seja manifold para manter a consistência topológica da estrutura de dados que eleutiliza internamente.Através de estudos sobre o problema, dada a restrição do 3Ds Max quanto a sua estruturade dados interna, constatou-se que uma das formas para que a utilização de objetos non-Manifold pela ferramenta fosse possível seria utilizar estruturas de dados que fossemcapazes de manter a consistência topológica, independente do tipo do modelo, e que fossereconhecível por ele.Uma maneira de se representar uma malha poligonal, muito eficiente em alguns casos, sedá através de listas compartilhadas de vértices e uma lista de faces contendo ponteiros paraseus respectivos vértices (MCGUIRE, 2000). Algumas estruturas foram pesquisadas como aWinged Edge, a TopEdge, a Quad-Edge e a HalfEdge.A idéia básica de uma estrutura do tipo Winged Edge é baseada em uma aresta e em seuspolígonos adjacentes (GLASSNER, 1991). A estrutura é composta de três listas duplamenteligadas contendo faces, arestas e vértices. Uma aresta é uma conexão direcionada entredois vértices, além disso, ela separa duas faces sendo uma a sua esquerda e outra a suadireita. Cada aresta possui quatro arestas ligadas a ela sendo elas as primeiras queestiverem em volta do vértice encontrado na direção especificada.A figura 5 demonstra um exemplo da representação Winged Edge: Figura 5: Análise de uma aresta (Instância da estrutura WEdgeData). Fonte: (GLASSNER, 1991).Esta figura representa a aresta, suas arestas adjacentes e as faces ligadas a ela. A formade análise das arestas mais próximas à analisada se dá no sentido horário ou anti-horário,logo, se queremos visitar a aresta mais próxima ao vértice a e que também faça parte da 7
  • VII Jornada de Iniciação Científica - 2011face b, basta atravessar a aresta no sentido horário, e para visitar a aresta próxima aovértice b, basta atravessar a aresta no sentido anti-horário, o mesmo método é aplicadotambém a face a e suas respectivas arestas.A propriedade mais atraente em utilizar estruturas deste tipo é a possibilidade de modelarobjetos que possuam buracos em sua superfície.Outra estrutura vista foi a TopEdge, uma extensão da estrutura do tipo HalfEdge e quesuporta operadores topológicos além dos tradicionais operadores geométricos. Como oprojeto não possui foco nos operadores topológicos, o uso da estrutura foi descartado.Mais uma conhecida estrutura para representação poliédrica é a estrutura do tipo Quad-Edge. Ela é limitada poliedros do tipo manifold (HECKBER, 2001). A estrutura é umavariação da Winged Edge, porém, por possuir a limitante de ser usada apenas por modelosmanifold, o estudo não foi aprofundado. Essencialmente, uma estrutura do tipo HalfEdgemantém informações de incidência de vértices, arestas e faces em superfícies (CGALManual, s. d.). Cada HalfEdge armazena referencias para uma face e um vértice incidente.Para cada face e vértice incidente, uma HalfEdge é armazenada. Variantes reduzidas daestrutura HalfEdge pode omitir algumas dessas incidências. Ela recebe este nome por que aestrutura armazena informações de “meia aresta” e não da aresta inteira (MCGUIRE, 2000).Em uma HalfEdge as arestas são dirigidas, sendo assim, o armazenamento requer quesejam guardadas as informações da aresta em suas duas direções.A Figura 6 traz a representação de uma malha poligonal triangular e suas HalfEdges ondeos pontos laranja são os vértices da malha, as barras azuis são as HalfEdges e as setasrepresentam os ponteiros entre elas. (MCGUIRE, 2000). Figura 6: Representação de uma malha triangular e suas respectivas HalfEdges. Fonte: (MCGUIRE, 2000)A estrutura de dados escolhida foi a HalfEdge por ser uma estrutura simples de ser usadaalém de ser bem rápida. Outro detalhe bastante interessante para a escolha desta estruturaé a de que qualquer alteração que seja feita na orientação de uma HalfEdge é feita em 8
  • Universidade Presbiteriana Mackenzietempo O(1) trazendo um ótimo desempenho caso seja necessária a alteração de algumaHalfEdge na estrutura.1.3 MÉTODOPara que o plug-in para 3Ds Max fosse desenvolvido, foi utilizada a bibliotecaCGAL(www.cgal.org) para C++ que contém a estrutura de dados do tipo HalfEdgenecessários para o desenvolvimento do projeto.Primeiramente foi necessário um estudoaprofundado da biblioteca sobre os recursos disponíveis. A primeira coisa a ser estudada foia superfície poliédrica Polyhedron_3 composta por vértices, arestas e faces e umrelacionamento de incidência entre eles. Logo após, adquiriu-se um conhecimentoaprofundado da classe auxiliar Polyhedron_incremental_builder_3 que dá suporta aconstrução de superfícies poliédricas utilizando a estrutura de dados HalfEdge.Por fim, utilizando o Wizard do 3Ds Max SDK para o Visual Studio 2008 e os própriosrecursos da linguagem C++, foi feito o estudo sobre codificação de recursos visuais utilizadopela WIN API32 e manipulação de arquivos.Abaixo, vemos detalhes sobre a codificação utilizada na construção do plug-in. Para oreconhecimento do objeto é necessária a manipulação de arquivos através das bibliotecaspadrões do C++ (fstream). Foi criada uma variável para a manipulação do arquivo (in) e umavariável char contendo o caminho do objeto (path).Na área do código designada para ocontrole da parte visual do projeto, foi aplicada o seguinte código no evento de pressionar obotão de carregamento:GetDlgItem(hWnd,IDC_EDIT);GetDlgItemText(hWnd,IDC_EDIT,path,100);in.open(path); if(!in) { MessageBox(hWnd,"Object Not Found!" , "Non-Manifold Object Exporter Error!", MB_OK); in.clear(); return 0; } else{ Polyhedron P; P=leitura(P); MessageBox(hWnd,"Object Loaded Successfully!" , "Non-Manifold Object Exporter Sucessfull!", MB_OK); return 0;}A variável de manipulação do arquivo é global, pois é utilizada tanto na ação do botãoquanto no reconhecimento das informações do objeto pela estrutura. 9
  • VII Jornada de Iniciação Científica - 2011Pelo código vemos que um objeto só poderá ser reconhecido se o caminho digitado estivercorreto, caso contrário, a mensagem de erro é exibida e a variável do arquivo é limpa parareceber um novo caminho.Confirmada a existência do arquivo do objeto, um Polyhedron é criado e a função leitura échamada. A função de leitura simplesmente recebe um Polyhedron criado e delega a ele asinformações do objeto coletadas do arquivo e retorna o Polyhedron atualizado com as novasinformações.Segue abaixo o código utilizado no armazenamento na estrutura das informações do objetobaseada na leitura do arquivo:template <class HDS>class Build_triangle : public CGAL::Modifier_base<HDS> {public: Build_triangle() {} void operator()( HDS& hds) { CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true); typedef typename HDS::Vertex Vertex; typedef typename Vertex::Point Point; int q, numv=-1; float x, y, z; in >> q; B.begin_surface( q, q/3, 2*q); for(int i=0;i<q/3;i++){ numv++; in>>x>>y>>z; B.add_vertex( Point( x, y, z)); numv++; in>>x>>y>>z; B.add_vertex( Point( x, y, z)); numv++; in>>x>>y>>z; B.add_vertex( Point( x, y, z)); B.begin_facet(); B.add_vertex_to_facet(numv-2); B.add_vertex_to_facet(numv-1); B.add_vertex_to_facet(numv); B.end_facet(); } B.end_surface(); in.close(); in.clear(); }};O operador Build_Triangle disponibilizado pela biblioteca CGAL, possibilita armazenamentode informações em um Polyhedron baseada em triângulos, ou seja, as informações do 10
  • Universidade Presbiteriana Mackenzieobjeto serão armazenadas como três coordenadas de vértices formando um triângulo, logo,o objeto essencialmente deve ter uma malha do tipo triângulo para que seja feita o corretoreconhecimento por parte do plug-in.1.4 RESULTADOS E DISCUSSÕESAté o presente momento, o projeto esta na fase de reconhecimento dos vértices dos objetospelo desenvolvimento do plug-in com a biblioteca CGAL. O plug-in possibilita que o usuárioentre com o caminho do objeto 3D que possui suas informações.Os arquivos lidos pela DLL são da extensão .obj. O arquivo é iniciado com a quantidade devértices e logo abaixo, uma linha para cada vértice possuindo suas três respectivascoordenadas separadas por espaço.Segue abaixo um exemplo de arquivo .obj reconhecível pelo plug-in: 6 -58.2843 0.0000 68.2843 -58.2843 0.0000 11.7157 -1.7157 0.0000 11.7157 -1.7157 0.0000 68.2843 -58.2843 56.5685 68.2843 -1.7157 56.5685 68.2843Dessa maneira o código, como mostrado anteriormente, insere na estrutura estasinformações lendo as coordenadas de três em três, já que a malha do objeto deve sertriangular.Após a entrada do usuário com o caminho do objeto, basta pressionar o botão decarregamento. Uma superfície do tipo Polyhedron é criada e o código de reconhecimento doobjeto é iniciado, caso contrário, uma mensagem de erro é exibida se o objeto não forencontrado ou não exista.A DLL do plug-in pode ser introduzida manualmente na pasta plug-ins do 3Ds Max ou podeser carregada através do Plug-in Manager. Sua utilização se dá por meio da aba Utilitieslocalizada a esquerda do ambiente. 11
  • VII Jornada de Iniciação Científica - 2011A Figura 7 traz o visual do plug-in dentro do ambiente 3Ds Max. Figura 7: Interface visual do plug-in no ambiente 3Ds MaxO desenvolvimento esta no estágio de reconhecimento dos vértices da topologia de modelosnon-Manifold utilizando a estrutura do tipo HalfEdge disponibilizada pela biblioteca CGAL.Esta estrutura oferece o armazenamento das informações do objeto por estruturas de listaduplamente ligada além de permitir que se mantenha tanto a restrição de modelos manifoldquanto também a liberdade de modelos non-manifold. O desenvolvimento deste plug-in parao 3Ds Max possibilitará uma gama muito maior de representações de objetos pelos seususuários já que as restrições de modelos manifold por parte da ferramenta será contornada.1.5 CONCLUSÃOCom o desenvolvimento deste projeto foi possível concluir que a representação non-Manifold de objetos contém bem menos restrições que a representação Manifold, dando-nosa liberdade de construções de sólidos muito mais complexos. Através do projeto deste plug-in para 3Ds Max, é possível que o ambiente reconheça objetos do tipo non-Manifold e nosdê, também, a possibilidade de manipulá-los, propriedade que ele não possui nativamente.No momento, o plug-in possibilita o reconhecimento dos vértices da topologia dos objetos.Como trabalho futuro é recomendável à continuação deste desenvolvimento para que oplug-in possa reconhecer não só os vértices do objeto, mas também suas arestas e faces,além de possibilitar a utilização de outras técnicas de modelagem a este tipo de objeto.Outro objetivo a ser alcançado seria a continuação do desenvolvimento para que sejapossível a aplicação das transformações realizadas na ferramenta 3Ds Max noreconhecimento das novas coordenadas do objeto pela estrutura HalfEdge. 12
  • Universidade Presbiteriana MackenzieAbaixo segue um exemplo da função (transforma) que reconhece a matriz de transformaçãoque será aplicada aos vértices do modelo e retorna o novo Polyhedron com suascoordenadas atualizadas.Polyhedron transforma(Polyhedron poly, double m[4][4]){CGAL::Aff_transformation_3<Kernel> t(m[0][0], m[0][1], m[0][2], m[0][3],m[1][0], m[1][1], m[1][2], m[1][3], m[2][0], m[2][1], m[2][2], m[2][3],m[3][3]= RT(1));CGAL::Polyhedron_3<Kernel>::Vertex_iterator iter;for(iter = poly.vertices_begin(); iter!=poly.vertices_end(); ++iter){ iter->point()=t.transform(iter->point());} return poly;}REFERÊNCIASAUTODESK, 3Ds Max Help . v.2011, CGAL Online Manual. Disponível em: <www.cgal.org>deBERG, M., van KREVELD, M., OVERMARS, M., SCHWARZKOPF, O. ComputationalGeometry: Algorithms and Applications. 2.ed. New York: Springer, 2000.GOMES, Jonas de Miranda, VELHO, Luiz Carlos. Computação Gráfica. Rio de Janeiro :SBM/IMPA, 1998. v. 1. (Série de Computação e Matemática).GLASSNER, A. Principles of Digital Image Synthesis. V.1 e 2. New York: MorganKauffmann, 2005.GLASSNER, A. Maintaining Winged-Edge Models, Graphics Gems II (James Arvo, ed.).Academic Press, 1991 p. 192.HECKBER, P. Quad-Edge Data Structure and Library, 2001. Disponível em:<http://www.cs.cmu.edu/afs/andrew/scs/cs/15-463/2001/pub/src/a2/quadedge.html#quadedge>.Acesso em 13 set. 2010MCGUIRE, M. The Half-Edge Data Structure, 2000. Disponível em:<http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml>. Acesso em: 15out. 2010.MOLLER, T. Real-Time Rendering. New York: A.K. Peters, 2002.WATT, Allan. Fundamentals of three-dimensional computer graphics. Reading: Addison-Wesley, 1993.Contato: fest.daniel@gmail.com e luciano.silva@gmail.com 13