Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

107
Geração de Malhas – SME5827 Poligonização e Estruturas de Dados Afonso Paiva ICMC-USP 15 de outubro de 2013

Transcript of Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Page 1: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Geração de Malhas – SME5827

Poligonização e Estruturas de Dados

Afonso PaivaICMC-USP

15 de outubro de 2013

Page 2: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (célula)Dado um conjunto de pontos {v0, v1, . . . , vk} ⊂ Rn, a célula gerada porestes pontos é o conjunto (combinação convexa):

[v0, v1, . . . , vk ] =

{v =

k∑i=0

λivi ; λi ≥ 0 ;k∑

i=0

λi = 1

}

ExemploA célula gerada por [v0, v1, v2] pode ser um ponto, um segmento de retaou um triângulo, de acordo com a relação de dependência linear dos vetoresv1 − v0 e v2 − v0.

Page 3: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (célula)Dado um conjunto de pontos {v0, v1, . . . , vk} ⊂ Rn, a célula gerada porestes pontos é o conjunto (combinação convexa):

[v0, v1, . . . , vk ] =

{v =

k∑i=0

λivi ; λi ≥ 0 ;k∑

i=0

λi = 1

}

ExemploA célula gerada por [v0, v1, v2] pode ser um ponto, um segmento de retaou um triângulo, de acordo com a relação de dependência linear dos vetoresv1 − v0 e v2 − v0.

Page 4: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (posição geral)Dado um conjunto de pontos {v0, v1, . . . , vm} ⊂ Rn, dizemos que elesestão em posição geral, se para qualquer subconjunto {v0, v1, . . . , vk}, comk ≤ n, os vetores v1 − v0, v2 − v0, . . . , vk − v0 são LI.

P.G.

0v

P.G.

0v

1v

P.G.

0v

1v2v

Não P.G.

0v

1v

2v

Não P.G.0v

1v

3v2v

Page 5: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (posição geral)Dado um conjunto de pontos {v0, v1, . . . , vm} ⊂ Rn, dizemos que elesestão em posição geral, se para qualquer subconjunto {v0, v1, . . . , vk}, comk ≤ n, os vetores v1 − v0, v2 − v0, . . . , vk − v0 são LI.

P.G.

0v

P.G.

0v

1v

P.G.

0v

1v2v

Não P.G.

0v

1v

2v

Não P.G.0v

1v

3v2v

Page 6: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (k-simplexo)Quando {v0, v1, . . . , vk} ⊂ Rn estão em posição geral, a célula por elesgerada é chamada de simplexo de dimensão k ou k-simplexo. Denotaremostal simplexo por 〈v0, v1, . . . , vk〉.

0-simplexo 2-simplexo1-simplexo 3-simplexo

Dado um simplexo σ = 〈v0, v1, . . . , vk〉, cada ponto vi é chamado devértice. Os 1-simplexos gerados pelo par [vi , vj ], com i 6= j , são chamadosde arestas. Os 2-simplexos gerados por [vi , vj , vk ], com i 6= j 6= k , sãochamados de faces de σ.

Page 7: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (k-simplexo)Quando {v0, v1, . . . , vk} ⊂ Rn estão em posição geral, a célula por elesgerada é chamada de simplexo de dimensão k ou k-simplexo. Denotaremostal simplexo por 〈v0, v1, . . . , vk〉.

0-simplexo 2-simplexo1-simplexo 3-simplexo

Dado um simplexo σ = 〈v0, v1, . . . , vk〉, cada ponto vi é chamado devértice. Os 1-simplexos gerados pelo par [vi , vj ], com i 6= j , são chamadosde arestas. Os 2-simplexos gerados por [vi , vj , vk ], com i 6= j 6= k , sãochamados de faces de σ.

Page 8: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Células e Simplexos

Definição (k-simplexo)Quando {v0, v1, . . . , vk} ⊂ Rn estão em posição geral, a célula por elesgerada é chamada de simplexo de dimensão k ou k-simplexo. Denotaremostal simplexo por 〈v0, v1, . . . , vk〉.

0-simplexo 2-simplexo1-simplexo 3-simplexo

Dado um simplexo σ = 〈v0, v1, . . . , vk〉, cada ponto vi é chamado devértice. Os 1-simplexos gerados pelo par [vi , vj ], com i 6= j , são chamadosde arestas. Os 2-simplexos gerados por [vi , vj , vk ], com i 6= j 6= k , sãochamados de faces de σ.

Page 9: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Decomposição Celular

DefiniçãoUma decomposição celular de um subconjunto D ⊂ Rn é um conjuntofinito de células C = {ci} que satisfazem às seguintes propriedades:

1. D = ∪ici e2. Se ci , cj ∈ C então ci ∩ cj ∈ C.

0v 1v

3v 2vDecomposição celular do quadrado unitário quepossui células de 0, 1 e 2 dimensões:

I dimensão 0: v0, v1, v2, v3

I dimensão 1: [v0, v1], [v1, v2], [v2, v3], [v3, v0]

I dimensão 2: [v0, v1, v2, v3]

Page 10: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Decomposição Celular

DefiniçãoUma decomposição celular de um subconjunto D ⊂ Rn é um conjuntofinito de células C = {ci} que satisfazem às seguintes propriedades:

1. D = ∪ici e2. Se ci , cj ∈ C então ci ∩ cj ∈ C.

0v 1v

3v 2vDecomposição celular do quadrado unitário quepossui células de 0, 1 e 2 dimensões:

I dimensão 0: v0, v1, v2, v3

I dimensão 1: [v0, v1], [v1, v2], [v2, v3], [v3, v0]

I dimensão 2: [v0, v1, v2, v3]

Page 11: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação

DefiniçãoQuando todos os elementos de uma decomposição celular de uma região Dsão simplexos dizemos que ela é uma triangulação de D e denotaremospor T (D).

região D duas triangulações de D

triangulação válida

trinagulação inválida

Page 12: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação

DefiniçãoQuando todos os elementos de uma decomposição celular de uma região Dsão simplexos dizemos que ela é uma triangulação de D e denotaremospor T (D).

região D duas triangulações de D

triangulação válida

trinagulação inválida

Page 13: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação de Coxeter-Freudenthal-Kuhn (CFK)

0v 1v

3v 2v

A triangulação de um quadrado é formada pelos simplexos:

I 0-simplexos: v0, v1, v2, v3

I 1-simplexos: 〈v0, v1〉, 〈v1, v2〉, 〈v2, v3〉, 〈v3, v0〉, 〈v0, v2〉I 2-simplexos: 〈v0, v1, v2〉, 〈v0, v2, v3〉

Page 14: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação de Coxeter-Freudenthal-Kuhn (CFK)

0v 1v

3v 2v

A triangulação de um quadrado é formada pelos simplexos:I 0-simplexos: v0, v1, v2, v3

I 1-simplexos: 〈v0, v1〉, 〈v1, v2〉, 〈v2, v3〉, 〈v3, v0〉, 〈v0, v2〉I 2-simplexos: 〈v0, v1, v2〉, 〈v0, v2, v3〉

Page 15: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação de Coxeter-Freudenthal-Kuhn (CFK)

0v 1v

3v 2v

A triangulação de um quadrado é formada pelos simplexos:I 0-simplexos: v0, v1, v2, v3

I 1-simplexos: 〈v0, v1〉, 〈v1, v2〉, 〈v2, v3〉, 〈v3, v0〉, 〈v0, v2〉

I 2-simplexos: 〈v0, v1, v2〉, 〈v0, v2, v3〉

Page 16: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação de Coxeter-Freudenthal-Kuhn (CFK)

0v 1v

3v 2v

A triangulação de um quadrado é formada pelos simplexos:I 0-simplexos: v0, v1, v2, v3

I 1-simplexos: 〈v0, v1〉, 〈v1, v2〉, 〈v2, v3〉, 〈v3, v0〉, 〈v0, v2〉I 2-simplexos: 〈v0, v1, v2〉, 〈v0, v2, v3〉

Page 17: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Triangulação de Coxeter-Freudenthal-Kuhn (CFK)

Usando a diagonal do cubo, podemos decompô-lo em 6 tetraedros(3-simplexos).

Page 18: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Poligonização

Objetivo: Queremos aproximar por polígonos (triângulos) uma superfícieimplícita S = f −1(0), onde f ∈ C 0 e 0 é valor regular de f .

Considerações:

Page 19: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Poligonização

Objetivo: Queremos aproximar por polígonos (triângulos) uma superfícieimplícita S = f −1(0), onde f ∈ C 0 e 0 é valor regular de f .

Considerações:

Page 20: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Poligonização

Objetivo: Queremos aproximar por polígonos (triângulos) uma superfícieimplícita S = f −1(0), onde f ∈ C 0 e 0 é valor regular de f .

Considerações:

Em várias simulações de escoamento de fluidos a superfície livre é definidaatravés de uma função implícita (level-set).

Page 21: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Poligonização

Objetivo: Queremos aproximar por polígonos (triângulos) uma superfícieimplícita S = f −1(0), onde f ∈ C 0 e 0 é valor regular de f .

Considerações:

f(x) < 0

f(x) > 0

S = f (0)-1

A função f define duas regiões no espaço.

Page 22: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Poligonização

Objetivo: Queremos aproximar por polígonos (triângulos) uma superfícieimplícita S = f −1(0), onde f ∈ C 0 e 0 é valor regular de f .

Considerações:

n

O vetor normal é dado por n = ∇f (x).

Page 23: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Algoritmo

Page 24: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Algoritmo

Passo 1: fazer uma decomposição simplicial no domínio de f , isto é, dividiro domínio em tetraedros.

Page 25: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Algoritmo

Passo 2: se f não for uma função discreta, então avalie f (x) em todos osvértices do grid.

Page 26: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Algoritmo

Passo 3: aproxime f (x) linearmente nos tetraedros onde f muda de sinal.

Page 27: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Tabela de Casos

I 2 casos (a menos de permutações) de configuração de sinal dafunção f em cada tetraedro.

-

++

+

-

+

+-

Page 28: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t. Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 29: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t. Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 30: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t. Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 31: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t.

Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 32: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t. Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 33: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t. Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 34: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Tetrahedra: Bloomenthal, 1998

Aproximação linear por partes

-

+

+

0v

1v

3v

rS

Seja r ∈ f −1(0) na aresta 〈v0, v1〉, logo:

r = (1− t) v0 + t v1

Basta determinar o valor de t. Fazendo,

0 = f (r) = f ((1− t) v0 + t v1)

≈ (1− t) f (v0) + t f (v1)

Portanto,

t =f (v0)

f (v0)− f (v1)

Page 35: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Cubes: Lorensen & Cline, 1987

I Faz uma decomposição celular do domínio de f , isto é, particiona odomínio em cubos.

Page 36: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Cubes: Lorensen & Cline, 1987

I 15 casos (a menos de permutações) de configuração de sinal dafunção f em cada cubo.

Page 37: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Cubes: Lorensen & Cline, 1987

Problemas:

I Problemas de ambiguidadeI Difícil de implementar

Page 38: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Marching Cubes: Lorensen & Cline, 1987

Problemas:

I Problemas de ambiguidadeI Difícil de implementar

Page 39: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:

I coordenadas 2D ou 3D;

I Atributos de vértice ou face:

I normal, cor, coordenada de textura;

I Topologia:

I relações de adjacência (conectividade).

Page 40: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:

I coordenadas 2D ou 3D;I Atributos de vértice ou face:

I normal, cor, coordenada de textura;

I Topologia:

I relações de adjacência (conectividade).

Page 41: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:I coordenadas 2D ou 3D;

I Atributos de vértice ou face:

I normal, cor, coordenada de textura;

I Topologia:

I relações de adjacência (conectividade).

Page 42: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:I coordenadas 2D ou 3D;

I Atributos de vértice ou face:

I normal, cor, coordenada de textura;I Topologia:

I relações de adjacência (conectividade).

Page 43: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:I coordenadas 2D ou 3D;

I Atributos de vértice ou face:I normal, cor, coordenada de textura;

I Topologia:

I relações de adjacência (conectividade).

Page 44: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:I coordenadas 2D ou 3D;

I Atributos de vértice ou face:I normal, cor, coordenada de textura;

I Topologia:

I relações de adjacência (conectividade).

Page 45: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que armazenar na ED?

I Geometria:I coordenadas 2D ou 3D;

I Atributos de vértice ou face:I normal, cor, coordenada de textura;

I Topologia:I relações de adjacência (conectividade).

Page 46: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

Page 47: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;

I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

Page 48: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

Page 49: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?

I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

Page 50: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?

I Quais são as faces adjacentes a face k?I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

vj

Page 51: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

vj

Page 52: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:

I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

vj

Page 53: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:I Remover ou adicionar um vértice/face;

I edge-flip, edge collapse, vertex split

vj

Page 54: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O que a ED deve suportar?

I Rendering;I Consultas geométricas:

I Quais são os vértices da face i?I Qual são os vértices do 1-anel do vértice j?I Quais são as faces adjacentes a face k?

I Modificações:I Remover ou adicionar um vértice/face;I edge-flip, edge collapse, vertex split

vj

edge-�ip

edge collapse

vertex split

Page 55: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O quão eficiente é a ED?

I Tempo de construção(pré-processamento);

I Tempo de resposta de uma consulta;I Tempo para realizar uma operação;I Consumo de memória RAM.

Page 56: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O quão eficiente é a ED?

I Tempo de construção(pré-processamento);

I Tempo de resposta de uma consulta;I Tempo para realizar uma operação;I Consumo de memória RAM.

Page 57: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O quão eficiente é a ED?

I Tempo de construção(pré-processamento);

I Tempo de resposta de uma consulta;

I Tempo para realizar uma operação;I Consumo de memória RAM.

Page 58: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O quão eficiente é a ED?

I Tempo de construção(pré-processamento);

I Tempo de resposta de uma consulta;I Tempo para realizar uma operação;

I Consumo de memória RAM.

Page 59: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Estruturas de Dados (ED)

O quão eficiente é a ED?

I Tempo de construção(pré-processamento);

I Tempo de resposta de uma consulta;I Tempo para realizar uma operação;I Consumo de memória RAM.

Page 60: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Face Set

I Face: 3 posições;I Não possui conectividade;I Arquivos do formato STL;I Simples e redundante.

Triângulos(x1

1 , y11 , z

11 ) (x1

2 , y12 , z

12 ) (x1

3 , y13 , z

13 )

(x21 , y

21 , z

21 ) (x2

2 , y22 , z

22 ) (x2

3 , y23 , z

23 )

(x31 , y

31 , z

31 ) (x3

2 , y32 , z

32 ) (x3

3 , y33 , z

33 )

......

...(x f1 , y

f1 , z

f1 ) (x f2 , y

f2 , z

f2 ) (x f3 , y

f3 , z

f3 )

Page 61: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

I Vértice: posição;I Face: índices dos vértices;I Não possui informação de vizinhança;I Arquivos dos formatos OBJ, OFF e PLY;

Vérticesx1 y1 z1

x2 y2 z2

x3 y3 z3

......

...xv y v zv

Triângulosv11 v1

2 v13

v21 v2

2 v23

v31 v3

2 v33

......

...vf1 vf2 vf3

Page 62: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Exemplo: arquivo OBJ

Tetraedro

# OBJ file format with ext .objv 1.0 0.0 0.0v 0.0 1.0 0.0v 0.0 0.0 1.0v 0.0 0.0 0.0f 2 4 3f 4 2 1f 3 1 2f 1 3 4

Page 63: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

I Quem são os vértices da face f1?;

I O(1) – basta consultar a lista de faces;I Quem são os vértices do 1-anel do vértice v3?;

I busca completa em todos os vértices;

I Os vértices v2 e v6 são adjacentes?;

I busca completa em todas as faces.

Page 64: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

I Quem são os vértices da face f1?;I O(1) – basta consultar a lista de faces;

I Quem são os vértices do 1-anel do vértice v3?;

I busca completa em todos os vértices;

I Os vértices v2 e v6 são adjacentes?;

I busca completa em todas as faces.

Page 65: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

I Quem são os vértices da face f1?;I O(1) – basta consultar a lista de faces;

I Quem são os vértices do 1-anel do vértice v3?;

I busca completa em todos os vértices;I Os vértices v2 e v6 são adjacentes?;

I busca completa em todas as faces.

Page 66: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

I Quem são os vértices da face f1?;I O(1) – basta consultar a lista de faces;

I Quem são os vértices do 1-anel do vértice v3?;I busca completa em todos os vértices;

I Os vértices v2 e v6 são adjacentes?;

I busca completa em todas as faces.

Page 67: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

I Quem são os vértices da face f1?;I O(1) – basta consultar a lista de faces;

I Quem são os vértices do 1-anel do vértice v3?;I busca completa em todos os vértices;

I Os vértices v2 e v6 são adjacentes?;

I busca completa em todas as faces.

Page 68: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Shared Vertex

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

I Quem são os vértices da face f1?;I O(1) – basta consultar a lista de faces;

I Quem são os vértices do 1-anel do vértice v3?;I busca completa em todos os vértices;

I Os vértices v2 e v6 são adjacentes?;I busca completa em todas as faces.

Page 69: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Half-Edge (HE)

I Vértice:I posiçãoI 1 HE que sai do vértice

I Half-Edge:I orientação consistenteI 1 índice do vértice de origemI 1 índice da face incidenteI 1, 2, ou 3 índices de HEs

(próxima, anterior e oposta)I Face:

I 1 índice da HE adjacente

Page 70: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Half-Edge (HE)

I Vértice:I posiçãoI 1 HE que sai do vértice

I Half-Edge:I orientação consistenteI 1 índice do vértice de origemI 1 índice da face incidenteI 1, 2, ou 3 índices de HEs

(próxima, anterior e oposta)

I Face:I 1 índice da HE adjacente

Page 71: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Half-Edge (HE)

I Vértice:I posiçãoI 1 HE que sai do vértice

I Half-Edge:I orientação consistenteI 1 índice do vértice de origemI 1 índice da face incidenteI 1, 2, ou 3 índices de HEs

(próxima, anterior e oposta)I Face:

I 1 índice da HE adjacente

Page 72: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

1-Anel com Half-Edge

1. Comece em um vértice

2. HE que sai do vértice3. HE oposta4. Próxima HE5. HE oposta6. Próxima HE7. · · ·

Page 73: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

1-Anel com Half-Edge

1. Comece em um vértice2. HE que sai do vértice

3. HE oposta4. Próxima HE5. HE oposta6. Próxima HE7. · · ·

Page 74: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

1-Anel com Half-Edge

1. Comece em um vértice2. HE que sai do vértice3. HE oposta

4. Próxima HE5. HE oposta6. Próxima HE7. · · ·

Page 75: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

1-Anel com Half-Edge

1. Comece em um vértice2. HE que sai do vértice3. HE oposta4. Próxima HE

5. HE oposta6. Próxima HE7. · · ·

Page 76: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

1-Anel com Half-Edge

1. Comece em um vértice2. HE que sai do vértice3. HE oposta4. Próxima HE5. HE oposta

6. Próxima HE7. · · ·

Page 77: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

1-Anel com Half-Edge

1. Comece em um vértice2. HE que sai do vértice3. HE oposta4. Próxima HE5. HE oposta6. Próxima HE7. · · ·

Page 78: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Conectividade baseada em Face

I Vértice:I posição

I Aresta:I nenhuma informação (explícita)

I Face:I 3 índices de vérticesI 3 índices de faces vizinhas

Page 79: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Conectividade baseada em Face

I Vértice:I posição

I Aresta:I nenhuma informação (explícita)

I Face:I 3 índices de vérticesI 3 índices de faces vizinhas

Page 80: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Conectividade baseada em Face

I Vértice:I posição

I Aresta:I nenhuma informação (explícita)

I Face:I 3 índices de vérticesI 3 índices de faces vizinhas

Page 81: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Conectividade baseada em Aresta

I Vértice:I posiçãoI 1 índice da aresta incidente

I Aresta:I nenhuma informação de orientaçãoI 2 índices de vérticesI 2 índices de faces vizinhasI 4 arestas

I Face:I 1 índice de aresta

Page 82: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Conectividade baseada em Aresta

I Vértice:I posiçãoI 1 índice da aresta incidente

I Aresta:I nenhuma informação de orientaçãoI 2 índices de vérticesI 2 índices de faces vizinhasI 4 arestas

I Face:I 1 índice de aresta

Page 83: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Conectividade baseada em Aresta

I Vértice:I posiçãoI 1 índice da aresta incidente

I Aresta:I nenhuma informação de orientaçãoI 2 índices de vérticesI 2 índices de faces vizinhasI 4 arestas

I Face:I 1 índice de aresta

Page 84: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Matriz de Adjacência

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

v1 v2 v3 v4 v5 v6

v1 0 1 1 0 0 0v2 1 0 1 1 0 0v3 1 1 0 1 0 1v4 0 1 1 0 1 1v5 0 0 0 1 0 1v6 0 0 1 1 1 0

aij =

{1 se os vértices vi e vj formam uma aresta0 caso contrário

I Nenhuma informação de conectividade entre umvértice e suas faces adjacentes;

I Esparsa e simétrica (grafos simples não orientados);I Pode representar malhas non-manifold.

Page 85: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Matriz de Adjacência

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

v1 v2 v3 v4 v5 v6

v1 0 1 1 0 0 0v2 1 0 1 1 0 0v3 1 1 0 1 0 1v4 0 1 1 0 1 1v5 0 0 0 1 0 1v6 0 0 1 1 1 0

aij =

{1 se os vértices vi e vj formam uma aresta0 caso contrário

I Nenhuma informação de conectividade entre umvértice e suas faces adjacentes;

I Esparsa e simétrica (grafos simples não orientados);I Pode representar malhas non-manifold.

Page 86: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Matriz de Adjacência

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

v1 v2 v3 v4 v5 v6

v1 0 1 1 0 0 0v2 1 0 1 1 0 0v3 1 1 0 1 0 1v4 0 1 1 0 1 1v5 0 0 0 1 0 1v6 0 0 1 1 1 0

aij =

{1 se os vértices vi e vj formam uma aresta0 caso contrário

I Nenhuma informação de conectividade entre umvértice e suas faces adjacentes;

I Esparsa e simétrica (grafos simples não orientados);

I Pode representar malhas non-manifold.

Page 87: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Matriz de Adjacência

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3f 4

v1 v2 v3 v4 v5 v6

v1 0 1 1 0 0 0v2 1 0 1 1 0 0v3 1 1 0 1 0 1v4 0 1 1 0 1 1v5 0 0 0 1 0 1v6 0 0 1 1 1 0

aij =

{1 se os vértices vi e vj formam uma aresta0 caso contrário

I Nenhuma informação de conectividade entre umvértice e suas faces adjacentes;

I Esparsa e simétrica (grafos simples não orientados);I Pode representar malhas non-manifold.

Page 88: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – c

I Triângulo – c.tI Vértice – c.vI Corner próximo em c.t – c.n

(sentido anti-horário)I Corner anterior em c.t – c.p (≡ c.n.n)I Corner oposto – c.oI Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 89: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – cI Triângulo – c.t

I Vértice – c.vI Corner próximo em c.t – c.n

(sentido anti-horário)I Corner anterior em c.t – c.p (≡ c.n.n)I Corner oposto – c.oI Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 90: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – cI Triângulo – c.tI Vértice – c.v

I Corner próximo em c.t – c.n(sentido anti-horário)

I Corner anterior em c.t – c.p (≡ c.n.n)I Corner oposto – c.oI Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 91: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – cI Triângulo – c.tI Vértice – c.vI Corner próximo em c.t – c.n

(sentido anti-horário)

I Corner anterior em c.t – c.p (≡ c.n.n)I Corner oposto – c.oI Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 92: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – cI Triângulo – c.tI Vértice – c.vI Corner próximo em c.t – c.n

(sentido anti-horário)I Corner anterior em c.t – c.p (≡ c.n.n)

I Corner oposto – c.oI Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 93: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – cI Triângulo – c.tI Vértice – c.vI Corner próximo em c.t – c.n

(sentido anti-horário)I Corner anterior em c.t – c.p (≡ c.n.n)I Corner oposto – c.o

I Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 94: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Corner é um vértice com um dos seus triângulos incidentes

I Corner – cI Triângulo – c.tI Vértice – c.vI Corner próximo em c.t – c.n

(sentido anti-horário)I Corner anterior em c.t – c.p (≡ c.n.n)I Corner oposto – c.oI Corner direito – c.r (≡ c.n.o)I Corner esquerdo – c.l (≡ c.p.o)

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

Page 95: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Armazenamento

I para cada vértice uma lista de todos os seus corners

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

corner c.v c.t c.n c.p c.o c.l c.rc1 v1 f1 c2 c3 c6 ∅ ∅c2 v2 f1 c3 c1 ∅ ∅ c6

c3 v3 f1 c1 c2 ∅ c6 ∅c4 v3 f2 c5 c6 ∅ c7 c1

c5 v2 f2 c6 c4 c7 c1 ∅c6 v4 f2 c4 c5 c1 ∅ c7...

......

......

......

...

Dada uma face j os corners são enumerados da forma: 3j , 3j − 1 e 3j − 2

Page 96: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Armazenamento

I para cada vértice uma lista de todos os seus corners

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

corner c.v c.t c.n c.p c.o c.l c.rc1 v1 f1 c2 c3 c6 ∅ ∅c2 v2 f1 c3 c1 ∅ ∅ c6

c3 v3 f1 c1 c2 ∅ c6 ∅c4 v3 f2 c5 c6 ∅ c7 c1

c5 v2 f2 c6 c4 c7 c1 ∅c6 v4 f2 c4 c5 c1 ∅ c7...

......

......

......

...

Dada uma face j os corners são enumerados da forma: 3j , 3j − 1 e 3j − 2

Page 97: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

Armazenamento

I para cada vértice uma lista de todos os seus corners

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

corner c.v c.t c.n c.p c.o c.l c.rc1 v1 f1 c2 c3 c6 ∅ ∅c2 v2 f1 c3 c1 ∅ ∅ c6

c3 v3 f1 c1 c2 ∅ c6 ∅c4 v3 f2 c5 c6 ∅ c7 c1

c5 v2 f2 c6 c4 c7 c1 ∅c6 v4 f2 c4 c5 c1 ∅ c7...

......

......

......

...

Dada uma face j os corners são enumerados da forma: 3j , 3j − 1 e 3j − 2

Page 98: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

I Quais são os vértices da face f3?

I os c.v de corners 9, 8 e 7I Os vértices v2 e v6 são adjacentes?

I passe pelos corners de v2, testando se c.p.v ou c.n.n são v6

I Quais são as faces adjacentes a v3?

I verefique c.t de todos os corners de vértice v3

Page 99: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

I Quais são os vértices da face f3?I os c.v de corners 9, 8 e 7

I Os vértices v2 e v6 são adjacentes?

I passe pelos corners de v2, testando se c.p.v ou c.n.n são v6

I Quais são as faces adjacentes a v3?

I verefique c.t de todos os corners de vértice v3

Page 100: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

I Quais são os vértices da face f3?I os c.v de corners 9, 8 e 7

I Os vértices v2 e v6 são adjacentes?

I passe pelos corners de v2, testando se c.p.v ou c.n.n são v6

I Quais são as faces adjacentes a v3?

I verefique c.t de todos os corners de vértice v3

Page 101: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

I Quais são os vértices da face f3?I os c.v de corners 9, 8 e 7

I Os vértices v2 e v6 são adjacentes?I passe pelos corners de v2, testando se c.p.v ou c.n.n são v6

I Quais são as faces adjacentes a v3?

I verefique c.t de todos os corners de vértice v3

Page 102: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

I Quais são os vértices da face f3?I os c.v de corners 9, 8 e 7

I Os vértices v2 e v6 são adjacentes?I passe pelos corners de v2, testando se c.p.v ou c.n.n são v6

I Quais são as faces adjacentes a v3?

I verefique c.t de todos os corners de vértice v3

Page 103: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Corner Table

v2

v1

v3

v4

v6

v5

f 1 f 2

f 3

f 4c1

c2 c5

c6

c3 c4c8

c9

c7

c11

c12

c10

I Quais são os vértices da face f3?I os c.v de corners 9, 8 e 7

I Os vértices v2 e v6 são adjacentes?I passe pelos corners de v2, testando se c.p.v ou c.n.n são v6

I Quais são as faces adjacentes a v3?I verefique c.t de todos os corners de vértice v3

Page 104: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Processamento Geométrico

Suavização de Vértice (Botsch & Kobbelt, 2004)I Melhora a qualidade dos triângulosI Move um vértice v para o baricentro bv de seu 1-anel

Page 105: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Processamento Geométrico

Suavização de Vértice (Botsch & Kobbelt, 2004)I Melhora a qualidade dos triângulosI Move um vértice v para o baricentro bv de seu 1-anel

v

b v

Page 106: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Processamento Geométrico

Suavização de Vértice (Botsch & Kobbelt, 2004)I Melhora a qualidade dos triângulosI Move um vértice v para o baricentro bv de seu 1-anel

v

b v

v = v + α [dv − (dv · nv)nv] e dv = bv − v ,

onde nv é a normal do vértice v e α ∈ [0, 1] é um fator de relaxação.

Page 107: Geração de Malhas – SME5827 Poligonização e Estruturas de Dados

Qualidade da Malha

Razão de Aspecto dos Triângulos

r =4√3A4

a2 + b2 + c2

onde a, b e c são os comprimentos dos lados do triângulo e A4 é a área dotriângulo que pode ser calculada pela fórmula de Heron:

A4 =√

s(s − a)(s − b)(s − c) com s =a+ b + c

2

Valores perto de 1 indicam que os 4s se aproximam de um 4 equilátero.