modelagem geom trica -...

45
02-Mar-11 Leandro Tonietto Modelagem Geométrica Leandro Tonietto Computação Gráfica Desenvolvimento Jogos e Entretenimento Digital [email protected] http://professor.unisinos.br/ltonietto/jed/cgr/modelGeom.pdf ago-11 quarta-feira, 8 de agosto de 12

Upload: vokien

Post on 11-Feb-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

02-Mar-11 Leandro Tonietto

Modelagem Geométrica

Leandro ToniettoComputação GráficaDesenvolvimento Jogos e Entretenimento [email protected]://professor.unisinos.br/ltonietto/jed/cgr/modelGeom.pdfago-11

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 2

Sumário

IntroduçãoModelagemRepresentaçãoPolígonosExercício

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 3

Introdução

Modelagem:Descrição de objetos do mundo real

Representação de objetos através de modelos:Descreve propriedades e implementa regras que representam um objeto real.Por exemplo, podemos descrever objetos com atributos, como: altura, volume, largura, tipo de superfície, ... ou com pontos que dão a sua forma.

Faz uso de métodos matemáticos para descrição e representação.Objetos não reais também podem ser modelados. A realidade do modelo pode ser fictícia.Modelar = descrever

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

Como devo modelar? Descrever um objeto com todas propriedades e detalhes mínimos? Ou usar uma representação mais simples e funcional?

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 4

Introdução

Objeto pode ser descrito de diversas formas.

Como devo modelar? Descrever um objeto com todas propriedades e detalhes mínimos? Ou usar uma representação mais simples e funcional?

O que e como depende de cada situação.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 5

Introdução

Aspectos a serem considerados quando da escolha da descrição de um modelo:

Facilidade: para transformar a forma em polígonos. Não se pode descrever matematicamente qualquer forma como uma primitiva, mas podemos simplificá-la para um conjunto de polígonos bem “comportados”.

Tamanho: o bastante para reproduzir o modelo.Complexidade: gerado manualmente ou proceduralmenteInteração: permitir alterações e animaçãoMatemática: representação e uso de ferramentas matemáticasPrecisão: o quão preciso um modelo deve ser.

Lembre-se: o ótimo é inimigo do bom!!

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 6

Introdução

Aplicações X nível de detalhe:CAD: precisão matemáticaJogos: precisão visualRepresentação em níveis de detalhamento.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 7

Introdução

Neverwinter Nights

Medal Of HonorgCAD3D

Modelo do Fiat 500

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 8

Introdução

Superfícies X volumeInteressa apenas a superfícies dos objetos

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 9

Introdução

Superfícies X volumeInformações sobre o interior dos objetos

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 10

Modelagem

Como se modela:Representação poligonalCurvas e superfíciesSólidos

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 11

Curvas

Pontos de controle e comprimento

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 12

Superfícies

ÁreaApenas uma casca,ocasAbertas ou fechadas

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 13

Sólidos

Além das propriedades da casca, o interior também interessa

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 14

Representação

Formas de representação de objetos:Funções paramétricas

Pode gerar todos os pontos de um objeto(sin Ø cos Θ, sin Θ sin Ø, cos Ø)

Definição implícitaDetermina se um ponto pertence ou não a um objetox2 + y2 + z2 - 1 = 0

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 15

Representação

É possível ter mais de um tipo de representação para um objeto:

Exemplo: círculo centrado na origem com raio=1x2 + y2 = 1 (implícita)

x(Θ)=cos(Θ) e y(Θ)=sin(Θ)(paramétrica)

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 16

Representação

Outra forma de representação dos objetos é através de pontos (vértices) e faces (um arranjo de vértices).Não precisão matemática das representações paramétrica e implícita, mas tem a facilidade da modelagem “manual”.Apenas uma aproximação do modelo real.Consome mais memória, mas exige menos processamento para renderização de objetos.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 17

Polígonos

Uso de polígonos para modelar objetos do mundo real:

Tudo pode ser transformado num polígono (ou quase tudo)Podemos renderizar polígonos rapidamenteVárias operações são fáceis de fazer em polígonosMemória e disco são relativamente baratos

Polígonos são simplesUma malha de polígonos representa a superfície de um objeto.

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 18

Polígonos

Desvantagens ou problemasSão apenas aproximações das superfícies

Mas podem ser tão detalhados quanto necessárioNormais são apenas aproximadas dentro da face.Ao transformarmos em polígonos perdemos informação e não há meios de reconstruir a informações original depois amostrados os polígonos.A maioria das superfícies reais são curvas (especialmente estruturas naturais), o que torna a representação aproximada mais difícil e dispendiciosa.

Falta de estruturaçãoAlguns cálculos geométricos podem ser altamente complexos. Exemplo: cálculo de intersecção.

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 19

Polígonos

Malha Convexa/CôncavaSe convexo, várias operações são mais simples: Clipping, preenchimento, intersecção, detecção de colisão, rendering, cálculo do volume, etc.

Fechada/AbertaMalhas fechadas são chamadas de “watertight”

SimplesFaces se encontram apenas nas arestas e vérticesLados se encontram apenas nos vértices

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 20

Polígonos

Estrutura de dados:Três componentes

VérticesConectividade – quais vértices fazem quais facesDados associados: normais, texturas, equação do plano, etc.

Associados ou ao vértice ou à face, podemos ter informações nos dois níveis inclusive.Normalmente, a informação a nível de face é um valor médio dos seus vértices.

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 21

Polígonos

Vários modelos são apenas lista de polígonos

Slide da apresentação do prof. Christian Hofsetz

struct Vertex { float coords[3];}struct Triangle { struct Vertex verts[3];}struct Triangle mesh[n];glBegin(GL_TRIANGLES)for ( i = 0 ; i < n ; i++ ){ glVertex3fv(mesh[i].verts[0]); glVertex3fv(mesh[i].verts[1]); glVertex3fv(mesh[i].verts[2]);}glEnd();

Atenção: Em OpenGL a ordemdos vértices é importante. Odefault é na direção contráriaaos ponteiros do relógio. No quê isto pode impactar?

Triângulos são compostos por 3 vértices e malha é composta por n triângulos. Acesso direto aos vértices dentro do triângulo.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 22

Polígonos

Lista de polígonos:Vantagens:

Simples de ler, gravar, transmitir, desenhar e etc.Saída comum dos CADsFormato similar ao desenho na OpenGL

Desvantagens (informação):Não faz referência aos vizinhosNão indica se o objeto é aberto/fechadoSem informações sobre polígono degenerados.Custo de memória, devido a duplicação de vértices e informações relativas a estes.

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 23

Polígonos

Acesso indireto:Não gerar vértices novos para cada polígono, porque:

Wastes memory - each vertex repeated many timesDifícil de encontrar polígonos vizinhosDifícil de verificar se os polígonos se interseccionam

Solução: acesso indiretoColocar todos os vértices em uma listaCada face armazena os índices dos seus vértices

Slide da apresentação do prof. Christian Hofsetz

v0

v4

v3v2

v1 vértices v0 v1 v2 v3 v4

0 2 1 0 1 4 1 2 3 1 3 4faces

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 24

Polígonos

Vantagem:Fácil de obter informação de conectividade da superfícieEconomiza em armazenamento

O índice pode ter apenas 4 bytes; um vértice 3D tem, em geral, 12 bytes.Cada vértice é usado pelo menos 3 vezes (e, em média 4-6 vezes), mas é armazenado apenas uma vez

Normais, coordenadas de textura, cores, etc., podem ser armazenados da mesma forma

Desvantagens:Conectividade não é explícitaAcesso ao cache não é otimizado

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 25

Polígonos

OpenGL e Acesso indireto:

Slide da apresentação do prof. Christian Hofsetz

struct Vertex { float coords[3];}struct Triangle { GLuint verts[3];}struct Mesh { struct Vertex vertices[m]; struct Triangle triangles[n];}

Triângulos são compostos por 3 ponteiros para vértices e malha é composta por m vértices e n triângulos. Acesso indireto aos vértices dentro do triângulo.

glBegin(GL_TRIANGLES) for para todos os triangulos for para todos os vertices int vi = mesh.triangles[i].verts[j] glVertex3v(mesh.vertecies[vi]);glEnd();

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 26

Polígonos

OpenGL e acesso indireto (v1):

Slide da apresentação do prof. Christian Hofsetz

glEnableClientState(GL_VERTEX_ARRAY)glVertexPointer(3, GL_FLOAT, sizeof(struct Vertex), mesh.vertices);glBegin(GL_TRIANGLES) for (int i = 0 ; i < n ; i++ ) { glArrayElement(mesh.triangles[i].verts[0]); glArrayElement(mesh.triangles[i].verts[1]); glArrayElement(mesh.triangles[i].verts[2]); }glEnd();

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 27

Polígonos

OpenGL e acesso indireto (v2):

Menos chamadas de funçõesEm geral é mais rápidoAnother variant restricts the range of indices that can be used – even faster because vertices may be cachedCan even interleave arrays to pack more data in a smaller space

Slide da apresentação do prof. Christian Hofsetz

glEnableClientState(GL_VERTEX_ARRAY)glVertexPointer(3, GL_FLOAT, sizeof(struct Vertex), mesh.vertices);for (int i = 0 ; i < n ; i++ ) glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, mesh.triangles[i].verts);

Porém, exige correspondência entre vértices, normais e mapeamento de texturas.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 28

Conectividade

Informação de polígonos vizinhos é importante para vários algoritmos

Cada face armazena ponteiros para seus vizinhosOu pode-se gerar uma lista de conectividades, mapeando cada aresta com os seus polígonos.

Conectividade ajuda em:Detecção de ColisãoSimplificação de malhasSubdivisão de superfíciesRecortar e extrair partes do modeloEtc.

A informação pode ser extraída e armazenada para futuro uso

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 29

Normais

Normais indicam o formato da superfícieNormais por face:

Uma normal por face“Flat shading”, toda a face tem a mesma cor de preenchimento, portanto, sem considerar as variações de iluminação por região da face.

Normais por vértice:Uma normal por vértice“smooth shading”, pontos intermediários são interpolados pelos pontos dos vértices.Podemos armazenar vetores de normais (similar a vetores de vértices)Índices de vértices e normais podem ser armazenados separadamente.

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 30

Exemplo de objeto – Cubo

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 31

Calculando os Vetores Normais

Vários modelos não tem normaisEx.: laser scan

Normais por face são fáceis de calcular:Produto vetorial de dois vetores normalizados posicionados nas arestas

Normais por vértice:Calcular normais das facesCalcular a médias das faces que cada vértice compõe (um exemplo de uso da informação de conectividade)

Podemos calcular uma média ponderada considerando a área dos polígonosPodemos definir ângulo máximo para considerar a face na média – evitando suavizar cantosNão considerar a normal da face na média se o ângulo entre duas faces é maior do que um ângulo pré-definido (threshold).

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 32

Definindo a estrutura de dados

Cores, coordenadas de texturas, weights, etc., podem ser tratados como vértices ou normaisCoeficientes de iluminação podem ser definidos por face ou por objeto (raramente por vértice)A Idéia é definir subestruturas:

Faces são partes de grupos/objetosVértices são parte de faces...

Slide da apresentação do prof. Christian Hofsetz

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 33

Definindo a estrutura de dados

Diagrama:

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 34

Exercício prático

Implementar as classes do modelo conforme especificado no slide anterior.Implementar um programa que renderize objetos a partir de sua malha poligonal. Esta malha foi preenchida (vértices, grupos e faces) manualmente, portanto, o aluno deve especificar dentro do programa a composição da malha. Não deve carregar de arquivo.Exemplos de objetos para serem modelados e desenhados:

ParalelepípedoEsferaToróidePirâmideOu qualquer objeto aproximado por polígonos.

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 35

Tarefa de programação

Implementar um leitor de arquivo no formato OBJ (que tem a descrição de objetos como uma malha poligonal com vértices, normais, textura e faces).

Copiar arquivos OBJ de exemplo com o professor.

Armazenar as informações lidas em estruturas de dados conforme vimos durante a aula.Plotar polígonos no OpenGL

quarta-feira, 8 de agosto de 12

02-Mar-11 Leandro Tonietto 36

Referências bibliográficas

AGOSTON, Max K. Computer Graphics and Geometric Modeling: Implementation and Algorithms. Springer. 2005.WRIGHT Jr., Richard S.; LIPCHAK, Benjamin; HAEMEL, Nicholas. OpenGL Superbible: Comprehensive Tutorial and Reference. 4ed.: Addison-Wesley. 2007.Stephen Chenney: http://www.cs.wisc.edu/~schenney/courses/cs559-s2002/Slides sobre CG dos professores: Christian Hofsetz, Cristiano Franco, Marcelo Walter e Soraia Musse.Especificação do formato Wavefront OBJ: http://www.martinreddy.net/gfx/3d/OBJ.spec

quarta-feira, 8 de agosto de 12