1) O documento discute o desenvolvimento de um plug-in para permitir a modelagem não-manifold no software 3Ds Max, superando sua limitação atual aos modelos manifold.
2) O plug-in será desenvolvido usando a linguagem C++ e implementará uma estrutura de dados do tipo Winged Edge para representar malhas poligonais não-manifold.
3) Isso permitirá representar objetos complexos no 3Ds Max com autointerseções e variações de orientação, ampliando significativamente as possibilidades de modelagem.
1. Universidade Presbiteriana Mackenzie
MODELAGEM TOPOLÓGICA NON-MANIFOLD PARA O AMBIENTE 3DMAX
Daniel Sousa Fest (IC) e Luciano Silva (Orientador)
Apoio: PIBIC CNPq
Resumo
Para todos os tipos de representação de modelos existentes, existem duas categorias: manifold e
non-manifold (GLASSNER,2005). Estes modelos são chamados de modelos topológicos, pois
utilizam noções de vizinhança típicas da área de Topologia Combinatória. Uma das ferramentas de
modelagem digital mais utilizadas na atualidade que implementa esta noção de topologia é o 3Ds
Max. Esta ferramenta utiliza-se de modelos topológicos para reconhecer vértices, arestas e faces dos
objetos através de suas numerações. O aplicativo oferece suporte apenas a objetos do tipo manifold
para criar uma relação lógica de dependência entre estes vértices, arestas e faces e para manter a
consistência topológica da estrutura de dados que ele utiliza internamente. Desta maneira, o 3Ds Max
impossibilita a criação de objetos do tipo non-Manifold, o que restringe muito a representação de
objetos mais complexos dentro de seu ambiente. O projeto tem como principais objetivos o estudo
das representações manifold e non-manifold e o desenvolvimento de uma solução na forma de um
plug-in que possibilite a representação de modelos non-Manifold no ambiente do 3Ds Max. Desta
maneira, este projeto espera trazer um significativo avanço em estudos para novas representações
de objetos de qualquer tipo não só para a ferramenta escolhida para o desenvolvimento, mas para
aplicativos de modelagem computacional em geral.
Palavras-chave: non-Manifold, plug-in 3Ds Max, vizinhança
Abstract
For 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 notions
from Combinatorial Topology. One of the latest digital modeling tools used today to implement this
notion of topology is the 3ds Max This tool is used to recognize topological models of vertices, edges
and faces of objects through their numbering. The application supports only objects of type manifold to
create a logical relationship of dependence between these vertices, edges and faces and to maintain
the topological consistency of the data structure it uses internally. Thus, the 3ds Max inhibiting the
creation of objects of type non-manifold, which restricts the representation of much more complex
objects within its environment. The aims of this project are the study of representations manifold and
non-manifold and the development of a solution in the form of a plug-in that allows the representation
of non-manifold models in 3ds Max environment. So, this project hopes to bring a significant
advance studies for new representations of objects of any kind not only for the chosen tool for
development, but application of computational modeling in general.
Key-words: non-Manifold, plug-in 3Ds Max, neighborhood
1
2. VII Jornada de Iniciação Científica - 2011
1.1 INTRODUÇÃO
Modelagem topológica é uma técnica de modelagem em Computação Gráfica, que trata da
construção de modelos computacionais que são controlados pela topologia (relações de
incidência e invariantes topológicos) (GOMES e VELHO, 1998). Existem duas categorias de
modelagem topológica: manifold e non-manifold.
Na modelagem manifold, utilizam-se as restrições topológicas que definem as variedades
discretas em Topologia Combinatória. Por exemplo, em modelos manifold não é possível de
modelar a noção de auto-intersecção. Já na modelagem non-manifold, estas restrições
topoló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 associadas
a cada ponto do objeto.
O ambiente de modelagem e renderização 3DMax (http://www.autodesk.com) representa
uma das ferramentas mais utilizadas para síntese de imagens em Computação Gráfica.
Apesar da grande complexidade desta ferramenta, ela suporta somente modelagem de
sólidos do tipo manifold. Esta restrição obriga, muitas vezes, um modelador a ter que dividir
um determinado objeto para contemplar construções que envolvam auto-intersecção ou com
orientação variável, por exemplo, para que as divisões possam atender aos critérios das
variedades discretas e orientáveis. Neste contexto, o desenvolvimento de um ambiente de
modelagem non-manifold para 3DMax representa um tema de grande interesse tanto
computacional quanto comercial.
O projeto vinculado a este artigo teve como objetivo o desenvolvimento e implementação de
um sistema de modelagem poligonal non-manifold para o ambiente 3DMax. O sistema será
desenvolvido na linguagem C++, devido aos requisitos de desempenho para grandes
modelos 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 outras
té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
3. 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ÓRICO
Um objeto sólido é um objeto que possui um volume finito no espaço, e que possui tanto
propriedades geométricas como superfície, volume e centro, como também propriedades
fí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étricas
como físicas de um objeto sólido. Existem diversas técnicas para se representar um objeto
só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
terminais
operaçõ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
parcialmente
informaçõ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
4. VII Jornada de Iniciação Científica - 2011
Esta representação CSG pode ser modificada de forma que o objeto sólido pode ser
representado 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 é verdadeira
pertence ao interior do objeto sólido. Na equação, todos os meio-espaços que indicam a
espaços
localização de um plano no sistema coordenado especificado são dados geométricos, e
todas 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-rep
são conhecidos e confiáveis.
O esquema B-rep (MOLLER,2000) representa um sólido segmentando o seu contorno num
número finito de subconjuntos interligados normalmente chamados faces (ou “patches”), e
interligados
representando cada face por suas arestas (que compõem um contorno) e vértices. A Figura
compõem
2 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 às
coordenadas dos pontos na árvore B
das B-rep.
4
5. 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 rep
Para 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. As
variedades (no caso de sólidos 3D) são deformações no plano R². Assim, para man
. manter a
propriedade de variedade (manifold), cada vizinhança de um ponto do sólido tem ser muito
parecido com um plano.
5
6. VII Jornada de Iniciação Científica - 2011
Na modelagem topológica, quando um objeto ou forma é criado, cada vértice, aresta e face
recebe uma numeração. Esses números são usados, internamente, para saber quais
vértices/aresta/faces serão alterados em qualquer tipo de operação. A essa estrutura de
vé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órias
discretas, 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, por
exemplo:
• 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 malhas
poligonais. Esta representação é a mais usada ultimamente por vários softwares de
modelagem 3D digital.
A ferramenta 3Ds Max, abordada neste projeto, possui limitações quanto a utilização de
modelos non-manifold. A ferramenta utiliza-se da topologia para reconhecer faces, vértices e
arestas 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 quais
vértices, arestas e faces sofrerão efeitos com a aplicação do recurso. Dependendo das
6
7. Universidade Presbiteriana Mackenzie
modificaçõ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ência
entre vértices, arestas e faces para ser representado no 3Ds Max. Na representação de
objetos do tipo non-Manifold, essa dependência entre vértices, arestas e faces entre si e
entre seus vizinhos inexiste, ou seja, não é necessário que um vértice faça parte de uma
aresta, ou de uma face, e qualquer modificação aplicada apenas a um deles não
necessariamente afetará a sua vizinhança. Além destes pontos, O 3Ds Max exige que o
modelo seja manifold para manter a consistência topológica da estrutura de dados que ele
utiliza internamente.
Através de estudos sobre o problema, dada a restrição do 3Ds Max quanto a sua estrutura
de 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 fossem
capazes de manter a consistência topológica, independente do tipo do modelo, e que fosse
reconhecível por ele.
Uma maneira de se representar uma malha poligonal, muito eficiente em alguns casos, se
dá através de listas compartilhadas de vértices e uma lista de faces contendo ponteiros para
seus respectivos vértices (MCGUIRE, 2000). Algumas estruturas foram pesquisadas como a
Winged 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 seus
polígonos adjacentes (GLASSNER, 1991). A estrutura é composta de três listas duplamente
ligadas contendo faces, arestas e vértices. Uma aresta é uma conexão direcionada entre
dois vértices, além disso, ela separa duas faces sendo uma a sua esquerda e outra a sua
direita. Cada aresta possui quatro arestas ligadas a ela sendo elas as primeiras que
estiverem 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 forma
de 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
8. VII Jornada de Iniciação Científica - 2011
face b, basta atravessar a aresta no sentido horário, e para visitar a aresta próxima ao
vértice b, basta atravessar a aresta no sentido anti-horário, o mesmo método é aplicado
também a face a e suas respectivas arestas.
A propriedade mais atraente em utilizar estruturas deste tipo é a possibilidade de modelar
objetos que possuam buracos em sua superfície.
Outra estrutura vista foi a TopEdge, uma extensão da estrutura do tipo HalfEdge e que
suporta operadores topológicos além dos tradicionais operadores geométricos. Como o
projeto 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 é uma
variação da Winged Edge, porém, por possuir a limitante de ser usada apenas por modelos
manifold, o estudo não foi aprofundado. Essencialmente, uma estrutura do tipo HalfEdge
mantém informações de incidência de vértices, arestas e faces em superfícies (CGAL
Manual, 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 da
estrutura HalfEdge pode omitir algumas dessas incidências. Ela recebe este nome por que a
estrutura 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 que
sejam 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 onde
os pontos laranja são os vértices da malha, as barras azuis são as HalfEdges e as setas
representam 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 usada
alé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
9. Universidade Presbiteriana Mackenzie
tempo O(1) trazendo um ótimo desempenho caso seja necessária a alteração de alguma
HalfEdge na estrutura.
1.3 MÉTODO
Para que o plug-in para 3Ds Max fosse desenvolvido, foi utilizada a biblioteca
CGAL(www.cgal.org) para C++ que contém a estrutura de dados do tipo HalfEdge
necessários para o desenvolvimento do projeto.Primeiramente foi necessário um estudo
aprofundado da biblioteca sobre os recursos disponíveis. A primeira coisa a ser estudada foi
a superfície poliédrica Polyhedron_3 composta por vértices, arestas e faces e um
relacionamento de incidência entre eles. Logo após, adquiriu-se um conhecimento
aprofundado da classe auxiliar Polyhedron_incremental_builder_3 que dá suporta a
construçã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óprios
recursos da linguagem C++, foi feito o estudo sobre codificação de recursos visuais utilizado
pela WIN API32 e manipulação de arquivos.
Abaixo, vemos detalhes sobre a codificação utilizada na construção do plug-in. Para o
reconhecimento do objeto é necessária a manipulação de arquivos através das bibliotecas
padrões do C++ (fstream). Foi criada uma variável para a manipulação do arquivo (in) e uma
variável char contendo o caminho do objeto (path).Na área do código designada para o
controle da parte visual do projeto, foi aplicada o seguinte código no evento de pressionar o
botã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ão
quanto no reconhecimento das informações do objeto pela estrutura.
9
10. VII Jornada de Iniciação Científica - 2011
Pelo código vemos que um objeto só poderá ser reconhecido se o caminho digitado estiver
correto, caso contrário, a mensagem de erro é exibida e a variável do arquivo é limpa para
receber 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 as
informações do objeto coletadas do arquivo e retorna o Polyhedron atualizado com as novas
informações.
Segue abaixo o código utilizado no armazenamento na estrutura das informações do objeto
baseada 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 armazenamento
de informações em um Polyhedron baseada em triângulos, ou seja, as informações do
10
11. Universidade Presbiteriana Mackenzie
objeto 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 correto
reconhecimento por parte do plug-in.
1.4 RESULTADOS E DISCUSSÕES
Até o presente momento, o projeto esta na fase de reconhecimento dos vértices dos objetos
pelo desenvolvimento do plug-in com a biblioteca CGAL. O plug-in possibilita que o usuário
entre 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 de
vértices e logo abaixo, uma linha para cada vértice possuindo suas três respectivas
coordenadas 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.2843
Dessa maneira o código, como mostrado anteriormente, insere na estrutura estas
informações lendo as coordenadas de três em três, já que a malha do objeto deve ser
triangular.
Após a entrada do usuário com o caminho do objeto, basta pressionar o botão de
carregamento. Uma superfície do tipo Polyhedron é criada e o código de reconhecimento do
objeto é iniciado, caso contrário, uma mensagem de erro é exibida se o objeto não for
encontrado ou não exista.
A DLL do plug-in pode ser introduzida manualmente na pasta plug-ins do 3Ds Max ou pode
ser carregada através do Plug-in Manager. Sua utilização se dá por meio da aba Utilities
localizada a esquerda do ambiente.
11
12. VII Jornada de Iniciação Científica - 2011
A Figura 7 traz o visual do plug-in dentro do ambiente 3Ds Max.
Figura 7: Interface visual do plug-in no ambiente 3Ds Max
O desenvolvimento esta no estágio de reconhecimento dos vértices da topologia de modelos
non-Manifold utilizando a estrutura do tipo HalfEdge disponibilizada pela biblioteca CGAL.
Esta estrutura oferece o armazenamento das informações do objeto por estruturas de lista
duplamente ligada além de permitir que se mantenha tanto a restrição de modelos manifold
quanto também a liberdade de modelos non-manifold. O desenvolvimento deste plug-in para
o 3Ds Max possibilitará uma gama muito maior de representações de objetos pelos seus
usuários já que as restrições de modelos manifold por parte da ferramenta será contornada.
1.5 CONCLUSÃO
Com 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-nos
a 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 nos
dê, 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 o
plug-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 seja
possível a aplicação das transformações realizadas na ferramenta 3Ds Max no
reconhecimento das novas coordenadas do objeto pela estrutura HalfEdge.
12
13. Universidade Presbiteriana Mackenzie
Abaixo segue um exemplo da função (transforma) que reconhece a matriz de transformação
que será aplicada aos vértices do modelo e retorna o novo Polyhedron com suas
coordenadas 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ÊNCIAS
AUTODESK, 3Ds Max Help . v.2011, CGAL Online Manual. Disponível em: <www.cgal.org>
deBERG, M., van KREVELD, M., OVERMARS, M., SCHWARZKOPF, O. Computational
Geometry: 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: Morgan
Kauffmann, 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. 2010
MCGUIRE, M. The Half-Edge Data Structure, 2000. Disponível em:
<http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml>. Acesso em: 15
out. 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