SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
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
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
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
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
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
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
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
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
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
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
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
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
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

Mais conteúdo relacionado

Semelhante a Daniel sousa

Algoritmos geometricos
Algoritmos geometricosAlgoritmos geometricos
Algoritmos geometricosLéia de Sousa
 
Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014
Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014
Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014Jose Augusto Sapienza Ramos
 
Excelente rect2004
Excelente rect2004Excelente rect2004
Excelente rect2004marnoonpv
 
Relações e funções
Relações e funçõesRelações e funções
Relações e funções48470490206
 
Relações e funções
Relações e funçõesRelações e funções
Relações e funçõesIvaneteseixas
 
Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...
Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...
Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...Ricardo Brasil
 
Sequência didática circunferência
Sequência didática circunferênciaSequência didática circunferência
Sequência didática circunferênciaeduardabotelho
 
Material nosso minicurso eprem
Material nosso   minicurso epremMaterial nosso   minicurso eprem
Material nosso minicurso epremFranbfk
 
MAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdfMAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdfGernciadeProduodeMat
 
Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01Romilda Dores Brito
 
Estudos de Sistemas Lineares de Três equações e Três Incógnitas
Estudos de Sistemas Lineares de Três equações e Três IncógnitasEstudos de Sistemas Lineares de Três equações e Três Incógnitas
Estudos de Sistemas Lineares de Três equações e Três Incógnitassiuffmat06
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...
Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...
Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...ZejucanaMatematica
 

Semelhante a Daniel sousa (20)

Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Algoritmos geometricos
Algoritmos geometricosAlgoritmos geometricos
Algoritmos geometricos
 
Um objeto matemático e o geogebra
Um objeto matemático e o geogebraUm objeto matemático e o geogebra
Um objeto matemático e o geogebra
 
Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014
Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014
Minicurso Banco de Dados Geográficos - MundoGEO Connect 2014
 
Excelente rect2004
Excelente rect2004Excelente rect2004
Excelente rect2004
 
Modelagem e elaboração de componentes
Modelagem e elaboração de componentesModelagem e elaboração de componentes
Modelagem e elaboração de componentes
 
Relações e funções
Relações e funçõesRelações e funções
Relações e funções
 
Relações e funções
Relações e funçõesRelações e funções
Relações e funções
 
Apostila funcoes
Apostila funcoesApostila funcoes
Apostila funcoes
 
Fundamentos de geoestatística
Fundamentos de geoestatísticaFundamentos de geoestatística
Fundamentos de geoestatística
 
Graphmatica
GraphmaticaGraphmatica
Graphmatica
 
Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...
Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...
Simulação da evolução da classe de ocupação e uso do solo - urbano (contínuo ...
 
Sequência didática circunferência
Sequência didática circunferênciaSequência didática circunferência
Sequência didática circunferência
 
Material nosso minicurso eprem
Material nosso   minicurso epremMaterial nosso   minicurso eprem
Material nosso minicurso eprem
 
MAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdfMAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdf
 
Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01
 
Estudos de Sistemas Lineares de Três equações e Três Incógnitas
Estudos de Sistemas Lineares de Três equações e Três IncógnitasEstudos de Sistemas Lineares de Três equações e Três Incógnitas
Estudos de Sistemas Lineares de Três equações e Três Incógnitas
 
iii dia de geogebra iberoamericano puc sp
iii dia de geogebra iberoamericano   puc spiii dia de geogebra iberoamericano   puc sp
iii dia de geogebra iberoamericano puc sp
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...
Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...
Apostila de Função e Função do 1º Grau (25 páginas, 118 questões, com g...
 

Mais de Carlos Elson Cunha

Wittgenstein, ludwig. tractatus logico philosophicus (1968)
Wittgenstein, ludwig. tractatus logico philosophicus (1968)Wittgenstein, ludwig. tractatus logico philosophicus (1968)
Wittgenstein, ludwig. tractatus logico philosophicus (1968)Carlos Elson Cunha
 
Westlund, olle. s(t)imulating a social psychology mead and the reality of t...
Westlund, olle. s(t)imulating a social psychology   mead and the reality of t...Westlund, olle. s(t)imulating a social psychology   mead and the reality of t...
Westlund, olle. s(t)imulating a social psychology mead and the reality of t...Carlos Elson Cunha
 
Atitude mental correta para falar em público
Atitude mental correta para falar em públicoAtitude mental correta para falar em público
Atitude mental correta para falar em públicoCarlos Elson Cunha
 
Introduções para falar em público
Introduções para falar em públicoIntroduções para falar em público
Introduções para falar em públicoCarlos Elson Cunha
 
Xadrez é fácil com o aluno eterno
Xadrez é fácil   com o aluno eternoXadrez é fácil   com o aluno eterno
Xadrez é fácil com o aluno eternoCarlos Elson Cunha
 
Canvas do Carlão - Exemplo do modelo Canvas
Canvas do Carlão - Exemplo do modelo Canvas Canvas do Carlão - Exemplo do modelo Canvas
Canvas do Carlão - Exemplo do modelo Canvas Carlos Elson Cunha
 
Guindaste de palitos de picolé
Guindaste de palitos de picoléGuindaste de palitos de picolé
Guindaste de palitos de picoléCarlos Elson Cunha
 
Todas as árvores do largo da concórdia
Todas as árvores do largo da concórdiaTodas as árvores do largo da concórdia
Todas as árvores do largo da concórdiaCarlos Elson Cunha
 
Levantamento fotográfico v oprr bras
Levantamento fotográfico v oprr brasLevantamento fotográfico v oprr bras
Levantamento fotográfico v oprr brasCarlos Elson Cunha
 
Lançamento de livros enanparq
Lançamento de livros enanparqLançamento de livros enanparq
Lançamento de livros enanparqCarlos Elson Cunha
 
Cdhu principais programas e tipologias
Cdhu principais programas e tipologiasCdhu principais programas e tipologias
Cdhu principais programas e tipologiasCarlos Elson Cunha
 
Largo da Concórida - Visão seriada
Largo da Concórida - Visão seriadaLargo da Concórida - Visão seriada
Largo da Concórida - Visão seriadaCarlos Elson Cunha
 

Mais de Carlos Elson Cunha (20)

Wittgenstein, ludwig. tractatus logico philosophicus (1968)
Wittgenstein, ludwig. tractatus logico philosophicus (1968)Wittgenstein, ludwig. tractatus logico philosophicus (1968)
Wittgenstein, ludwig. tractatus logico philosophicus (1968)
 
Westlund, olle. s(t)imulating a social psychology mead and the reality of t...
Westlund, olle. s(t)imulating a social psychology   mead and the reality of t...Westlund, olle. s(t)imulating a social psychology   mead and the reality of t...
Westlund, olle. s(t)imulating a social psychology mead and the reality of t...
 
Shopping das artes
Shopping das artesShopping das artes
Shopping das artes
 
Atitude mental correta para falar em público
Atitude mental correta para falar em públicoAtitude mental correta para falar em público
Atitude mental correta para falar em público
 
Introduções para falar em público
Introduções para falar em públicoIntroduções para falar em público
Introduções para falar em público
 
O temor de falar em público
O temor de falar em públicoO temor de falar em público
O temor de falar em público
 
Mec solo ms
Mec solo msMec solo ms
Mec solo ms
 
Xadrez é fácil com o aluno eterno
Xadrez é fácil   com o aluno eternoXadrez é fácil   com o aluno eterno
Xadrez é fácil com o aluno eterno
 
Canvas do Carlão - Exemplo do modelo Canvas
Canvas do Carlão - Exemplo do modelo Canvas Canvas do Carlão - Exemplo do modelo Canvas
Canvas do Carlão - Exemplo do modelo Canvas
 
B n
B nB n
B n
 
Guindaste de palitos de picolé
Guindaste de palitos de picoléGuindaste de palitos de picolé
Guindaste de palitos de picolé
 
Atribuições arquiteto
Atribuições arquitetoAtribuições arquiteto
Atribuições arquiteto
 
Todas as árvores do largo da concórdia
Todas as árvores do largo da concórdiaTodas as árvores do largo da concórdia
Todas as árvores do largo da concórdia
 
R caetano pinto
R caetano pintoR caetano pinto
R caetano pinto
 
Levantamento fotográfico v oprr bras
Levantamento fotográfico v oprr brasLevantamento fotográfico v oprr bras
Levantamento fotográfico v oprr bras
 
Lançamento de livros enanparq
Lançamento de livros enanparqLançamento de livros enanparq
Lançamento de livros enanparq
 
Drenagem urbana.2007
Drenagem urbana.2007Drenagem urbana.2007
Drenagem urbana.2007
 
Domótica em bibliotecas
Domótica em bibliotecasDomótica em bibliotecas
Domótica em bibliotecas
 
Cdhu principais programas e tipologias
Cdhu principais programas e tipologiasCdhu principais programas e tipologias
Cdhu principais programas e tipologias
 
Largo da Concórida - Visão seriada
Largo da Concórida - Visão seriadaLargo da Concórida - Visão seriada
Largo da Concórida - Visão seriada
 

Daniel sousa

  • 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