modelagem geom trica -...
Post on 11-Feb-2019
214 Views
Preview:
TRANSCRIPT
02-Mar-11 Leandro Tonietto
Modelagem Geométrica
Leandro ToniettoComputação GráficaDesenvolvimento Jogos e Entretenimento Digitalltonietto@unisinos.brhttp://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
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
top related