Construção de objeto e superfícies em OpenGL

Documentos relacionados
Curvas e Superfícies Paramétricas

Modelagem Geométrica

Introdução ao Processamento Gráfico

Iluminação e Sombreamento

LISTA DE ATIVIDADES Semestre Letivo 2018/1

Computação Gráfica II

Representação de Objectos. & Estruturas de Dados. ! Os modelos são cada vez mais complexos

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

Introdução Geral a Computação Gráfica. Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina de Computação Gráfica

Computação Gráfica - 09

Computação Gráfica - 09

COMPUTAÇÃO GRÁFICA - PROF. MSC. LEANDRO TONIETTO SELEÇÃO DE OBJETOS EM OPENGL - SELECT BUFFER

Computação Gráfica - 11

Computação Gráfica - 13

Computação Gráfica OpenGL 05 3D

LISTA DE ATIVIDADES Semestre Letivo 2018/1

Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...

Computação Gráfica - OpenGl 02

Curvas e Superfícies. 35M34 Sala 3E1 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227 DIM102

Lista de exercícios. 4) Defina o conceito de função de eficiência luminosa. (Victor)

Comentários e Exemplos sobre os Temas e seus Descritores da Matriz de Matemática de 4ª Série Fundamental

MODELAGEM GEOMÉTRICA

Computação Gráfica. Representação e Modelagem

Imagem e Gráficos. vetorial ou raster?

Curvas e Superfícies Paramétricas

Introdução a Programação de Jogos

Texturas. Aula 7. Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto. Paulo Gandra de Sousa

Introdução à Computação Gráfica Ray Tracing. Claudio Esperança Paulo Roma Cavalcanti

CIV2802 Sistemas Gráficos para Engenharia

Acadêmico: Denilson Domingos Professor Orientador: Paulo César Rodacki Gomes FURB - Universidade Regional de Blumenau

Plano de Ensino de Disciplina Ciência da Computação 2º / 2016

Tomás Antônio Costa Badan. Mapa de Textura: O Básico

Geometria Computacional

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

FUNDAMENTOS E APLICAÇÕES. Luis Valente

Curvas e Superfícies. Profª Soraia Raupp Musse

Introdução à Computação Gráfica

Triangulação Mapeamento em Viewport Modelação Geométrica

Computação Gráfica - 10

Pipeline de Visualização 3D

Noções de Geometria. Professora: Gianni Leal 6º B.

ÍNDICE. CorelDRAW X4 -3- CAPÍTULO 1 INICIANDO O CorelDRAW... 7

Introdução à Computação Gráfica Modelagem. Claudio Esperança Paulo Roma Cavalcanti

Computação Gráfica - 13

Computação Gráfica e Processamento de Imagens. - Sistemas 3D (conceitos básicos) Prof. Julio Arakaki

TÉCNICAS DE CAD PARA ENGENHARIA CIVIL AULA 12

Modelação de Sólidos. Sistemas Gráficos/ Computação Gráfica e Interfaces FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO

AULA 2 Planos Vistas e Temas

Histórico. Estado da Arte. Histórico. Modelagem de Objetos. Modelagem por arames (wireframes). Modelagem por superfícies (década de 60).

Resumo. Computação Gráfica: Uma Proposta de Plano Pedagógico. Áreas Correlatas. Definição. Uma Visão Integrada da C.G.

Desenho Auxiliado por Computador

Introdução à Computação Gráfica. Claudio Esperança Paulo Roma Cavalcanti

PROPOSTA DIDÁTICA. 3. Desenvolvimento da proposta didática (10 min) - Acomodação dos alunos, apresentação dos bolsistas e realização da chamada.

Características Principais. Introdução à Computação Gráfica Ray Tracing. Ray Casting. Contexto Histórico. Claudio Esperança Paulo Roma Cavalcanti

Aula 01 Introdução ao Projeto Auxiliado por Computador (CAD), Sistema 2D e Modelagem Sólida

SOLID EDGE ST6 TUTORIAL 3 MODELANDO UM PISTÃO

Índice Analítico. José Antelo Cancela Pág. 2

Sistemas de Cores. Leandro Tonietto Processamento Gráfico Jogos Digitais set-09

FORMAÇÃO SOBRE CONTEÚDOS DE MATEMATICA DOS 4º E 5º ANOS DO ENSINO FUNDAMENTAL FIGURAS PLANAS E ESPACIAIS

Imagem ou Desenhos e Gráficos vetorial ou raster?

Processamento de Malhas Poligonais

Prof. Fernando V. Paulovich 3 de agosto de SCC Computação Gráca

Fundamentos de Computação Gráfica. Texturas

Computação Gráfica Abel J. P. Gomes. Engenharia Informática (5385) - 2º ano, 2º semestre Matemática (5828) - 2º ano, 2º semestre

AGRUPAMENTO de ESCOLAS de PEDRÓGÃO GRANDE CONSELHO de DOCENTES Planificação Trimestral - 1.º Ano /2016 Matemática 2.º Período 52 dias letivos

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

Aplicação de Tags em Objetos de Sistemas de Visualização em Tempo Real

Planificação de Matemática 9º ano. Ano letivo: 2014/15

António Costa. Paulo Roma Cavalcanti

Código da Disciplina CCE0985. Aula 3.

CLASSIFICAÇÃO DOS POLIEDROS

Computação Gráfica. Prof. André Yoshimi Kusumoto

Modelagem Geométrica: Boundary Representation

Introdução à Computação Gráfica

O Problema de Visibilidade. Computação Gráfica Recorte. Onde Acontece? O que é Recorte? Renato Ferreira

A terceira dimensão. A terceira dimensão. Modelagem tridimensional. A terceira dimensão Wilson de Pádua Paula Filho

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda/Taguspark. 1º Exame 29 Junho de 2010

Transcrição:

Sumário Construção de objeto e superfícies em OpenGL Leandro Tonietto Computação Gráfica Jogos Digitais ltonietto@unisinos.br http://www.inf.unisinos.br/~ltonietto/jed/cgr/constopengl.pdf out-08 Introdução Modelagem com formas quádricas Curvas e superfícies em OpenGL Evaluators Curvas e superfícies Bézier Trimming 8/10/2008 Leandro Tonietto 2 Em OpenGL é possível modelar combinando objetos pré-definidos. Formas quádricas. Introdução Contudo, objetos complexos requerem maior complexidade matemática. OpenGL dá suporte a geração de curvas e superfícies Bézier e. Diversos objetos podem ser modelados apenas com o uso de formas quádricas. Para tanto, basta combiná-las para compor objetos mais complexos: Visualização de moléculas em 3D (combinando esferas e cilindros) Diversos objetos utilizados em jogos, como por exemplos, armas, veículos, projéteis, edificações e etc. 8/10/2008 Leandro Tonietto 3 8/10/2008 Leandro Tonietto 4 Exemplo simples em [1]: Modelando com quádricas no OpenGL: Seguem modelo OO, mantendo um estado do objeto quádrico na memória: 1. Criar um objeto que representa o estado da quádrica deve ser mantido para definir propriedades das quádricas. 2. Definir propriedades para o objeto 3. Desenhar a forma específica GLUquadricObj *pobj; pobj = glunewquadric(); //... Definições de estados gludeletequadric(pobj); 8/10/2008 Leandro Tonietto 5 8/10/2008 Leandro Tonietto 6 1

Funções para definição de estados: Estilo de desenho: gluquadricdrawstyle(gluquadricobj *obj, GLenum drawstyle) GLU_FILL, GLU_LINE, GLU_POINT e GLU_SILHOUETTE Normais da superfície: gluquadricnormals(gluquadricobj *obj, GLenum normals) GLU_NONE, GLU_FLAT (normais dos vértices perpendiculares as faces) e GLU_SMOOTH (pondera normais com as das faces adjacentes) Funções para definição de estados: Orientação das normais: gluquadricorietantion(gluquadricobj *obj, GLenum orientation) GLU_OUTSIDE e GLU_INSIDE Considerar texturização ou não: gluquadrictexture(gluquadricobj *obj, GLenum texture) GL_TRUE (considera mapeamento de texturas) e GLU_FALSE (não considera o mapeamento de textura). 8/10/2008 Leandro Tonietto 7 8/10/2008 Leandro Tonietto 8 Desenhando quadricas: Esferas: glusphere(gluquadricobj *obj, GLdouble radius, GLint slices, GLint stacks) Slices == gomos. Stacks == rodelas Desenhando quadricas: Cilindros: glucylinder(gluquadricobj *obj, GLdouble baseradius, GLdouble topradius, GLdouble height, GLint slices, GLint stacks) topradius == zero, permite criar cone. 8/10/2008 Leandro Tonietto 9 8/10/2008 Leandro Tonietto 10 Desenhando quadricas: Discos: gludisk(gluquadricobj *obj, GLdouble innerradius, GLdouble outerradius, GLint slices, GLint loops) innerradius!= zero, permite criar discos com furos. Vantagens: Facilidade de modelagem (criação, propriedades, composição e desenho) Desvantagens: Limitação de interação com o usuário Pode-se tornar difícil a criação de um cenário grande. Limitação de formas matemáticas 8/10/2008 Leandro Tonietto 11 8/10/2008 Leandro Tonietto 12 2

Programação: Variável de classe: Exemplo Snowman GLUquadriObj *obj; No init: obj = glunewquadric(); No RenderScene (ou display): gluquadricnormals(obj, GLU_SMOOTH); gltranslatef(x,y,z); glusphere(obj, 5, 5, 5); No final da execução do main: gludeletequadric (obj); 8/10/2008 Leandro Tonietto 13 Tarefa para ser feita em aula Utilizando quádricas e formas primitivas modele os seguintes objetos: Não é necessário modelar todos os detalhes, apenas os objetos que dão a forma básica do objeto 8/10/2008 Leandro Tonietto 14 Curvas e Superfícies Paramétricas Alguns objetos são muito complexos para serem modelados com combinações de primitivas matemáticas e com geometria descritiva. Supondo que momento não há meios ou não se tem uma ferramenta de modelagem disponível para criação de uma malha poligonal. Uma solução seria o uso de curvas, porém também não há como memorizar todas as curvas possíveis necessárias para formar objetos mais complexos. As vezes é necessário algum tipo de suporte ou controle para permitir interação com usuário, no sentido de modificar completamente a forma geométrica aproximada. Solução: superfícies paramétricas. Curvas e Superfícies Paramétricas OpenGL dá suporte a curvas paramétricas. Conceitos: Para uma curva o parâmetro paramétrico é u. Para uma superfície são u e v. As curvas são representadas por pontos de controle e são avaliadas a cada instante u de tempo. Ordem da curva é dada pelo número de pontos; por exemplo, 2 pontos é uma de 2ª ordem, de 3 é de 3ª ordem,... O grau é determinado por: ordem da curva-1. Por exemplo: uma de 4ª ordem é uma de grau 3 (cúbica). Curvas cúbicas são de longe as mais utilizadas, pois as de maior ordem podem produzir oscilações indesejadas ou até incontroláveis (muita variação com mudanças mínimas). 8/10/2008 Leandro Tonietto 15 8/10/2008 Leandro Tonietto 16 Curvas e Superfícies Paramétricas Continuidade: Problemas: Curvas com grau maior que três podem produzir comportamento inesperado para a modelagem. Entretanto, uma curva cúbica não é suficiente para representar uma curva interessante. Solução: conectar curvas. Mesma tangente na conexão Tipos ou graus de conexão (continuidade): Mesma tangente e mesma taxa de variação da tangente 8/10/2008 Leandro Tonietto 17 Curvas em OpenGL Desenho de curvas em OpenGL é feito com Evaluators (avaliadores) Uma função avaliadora (evaluator function) é executada sobre os pontos de controle da curva para cada instante u. Elas avaliam pontos da curva dado um instante u da curva. Desenham curvas e superfícies Bézier. Processo é simples: 1. Definir pontos de controle 2. Criar uma matriz de cálculo (função para a curva): glmap1f(). 3. Habilitar evaluator e avaliar (desenhar) pontos da curva a cada instante u. Comandos: glenable(gl_map1_vertex_3) e glevalcoord(u); Ver código da páginas 391 393 do livro OpenGL Superbible [1]. 8/10/2008 Leandro Tonietto 18 3

Curvas em OpenGL Alternativa para desenhar uma curva: Criar uma grade e avaliar // 100 pontos de 0.0 a 100.0 glmapgrid1d(100, 0.0, 100.0); // desenha linhas na grade glevalmesh1(gl_line, 0, 100); Abordagem mais simples, do que avaliar a curva ponto-a-ponto. Evaluator X grid: glmapgrid1d(100,0.0,100.0); glevalmesh1(gl_line,0,100); Equivale a: glbegin(gl_line_strip); for(i = 0; i <= 100; i++) { glevalcoord1f((glfloat) i); } glend(); Curvas em OpenGL 8/10/2008 Leandro Tonietto 19 8/10/2008 Leandro Tonietto 20 Superfícies em OpenGL Superfícies em OpenGL Uma superfície é uma mistura ou combinação de curvas. OpenGL fornece suporte a superfícies Bézier. Desenho é feito com uma grade bidimensional e com um evaluator para cada curva. Processo: 1. Definir pontos de controle das curvas 2. Criar uma matriz de cálculo (função para as curva): glmap2f(). 3. Habilitar evaluator e criar grade para as curvas. Comandos: glenable(gl_map2_vertex_3), glmapgrid2() e glevalmesh2(); 4.glEvalMesh2(GL_LINE) desenha superfícies com linhas e glevalmesh2(gl_fill) desenha preenchida. 5.glEnable(GL_AUTO_NORMAL) computa normais automaticamente. Ver código da páginas 397 399 do livro OpenGL Superbible [1]. 8/10/2008 Leandro Tonietto 21 8/10/2008 Leandro Tonietto 22 Problema: desenhar curvas e superfícies Bézier e garantir continuidade C2 é complexo. Solução: utilizar Suporte a é feito pela GLU Conceito: Knots Seqüência de valores que influenciam os pontos de controle manter uma suavidade da continuidade. 2 knots por ponto de controle, devem estar no mesmo domínio que u e v e devem estar em ordem crescente. Criação de : Segue lógica de orientação a objetos: 1. Criar objeto GLUnurbsObj *pnurb = NULL; 2. Inicializar objeto pnurb = glunewnurbsrenderer(); 3. Definir propriedades, pontos de controle e knots // próximos slides! 4. Eliminar memória alocada. gludeletenurbsrenderer(pnurb); 8/10/2008 Leandro Tonietto 23 8/10/2008 Leandro Tonietto 24 4

Propriedades para objeto : Sempre deve ser passado sobre qual objeto será definida a propriedade. Espessura da superfície: glunurbsproperty(pnurb, GLU_SAMPLING_TOLERANCE, 25.0f); Preenchimento glunurbsproperty(pnurb, GLU_DISPLAY_MODE, (GLfloat)GLU_FILL); // pode ser usado também GLU_OUTLINE_POLYGON Definindo a superfície: glubeginsurface(pnurb); glunurbssurface(pnurb, 8, knots, // knots para u 8, knots, // knots para v 12, // distância entre pontos u 3, // distância entre pontos v &crtl[0][0][0], // pontos de controle 4, 4, // ordem da superfície em u e v GL_MAP2_VERTEX_3); // tipo de superfície gluendsurface(pnurb); // Pontos de controle: // x,y,z para u e v em quatro pontos GLfloat ctrl[4][4][3]; //2 knots por ponto de controle GLfloat knots[8]; 8/10/2008 Leandro Tonietto 25 8/10/2008 Leandro Tonietto 26 Exemplo: páginas 404 405 do livro [1] Trimming Aparar ou tirar excessos de uma superfícies. Comum para aparar bordas da superfície. Também pode-se fazer buracos na superfície. Definir uma seqüência de pontos no domínio u e v no sentido horário (superfícies são desenhadas em sentido anti-horário) // valores entre 0 e 1 para u e v GLfloat points[][]; Colocar dentro do desenho da : glbegintrim(pnurb); glupwlcurve(pnurb,4,&points[0][0],2,glu_map1_trim_2); glendtrim(pnurb); Objeto Num. pontos pontos pontos dimensão Ver código da páginas 407 408 do livro OpenGL Superbible [1]. 8/10/2008 Leandro Tonietto 27 8/10/2008 Leandro Tonietto 28 Por questões de complexidade performance, OpenGL garante apenas o tratamento de polígonos convexos. Os côncavos e complexos (com cruzamento de arestas ou com buracos), não são manipulados no OpenGL. Porém, as vezes é necessário... Solução trivial: quebrar em triângulos. Tarefa pode se tornar complexa de se fazer manualmente. GLU fornece o processo tessellation. Um tessellator é um objeto que subdivide um polígono complexo em vários triângulos. 8/10/2008 Leandro Tonietto 29 8/10/2008 Leandro Tonietto 30 5

Assim como, deve-se criar um objeto Tessellator: GLUtesselator *ptess; ptess = glunewtess();... // Do some tessellation... gludeletetess(ptess); Assim como, deve-se criar um objeto Tessellator: 1. Criação do objeto Tessellator 2. Definir propriedades. 3. Iniciar polígono 4. Iniciar contorno 5. Seta vértices tessellator para o contorno 6. Fim contorno 7. Retorna ao passo 4 para mais contornos 8. Fim do polígono Ver código da páginas 414 418 do livro OpenGL Superbible [1]. 8/10/2008 Leandro Tonietto 31 8/10/2008 Leandro Tonietto 32 Exercícios cios Criar uma superfície Bézier e permitir edição de pontos. Criar uma superfície e permitir a edição dos pontos de controle e dos knots. Fazer a figura do mapa do RS habilitando 3 possibilidades de desenho: outline, preenchido e usando tesselation. Referências bibliográficas 1. WRIGHT Jr., Richard S; LIPCHAK, Benjamin; HAEMEL, Nicholas. OpenGL Superbible: Comprehenive Tutorial and Reference. 4 ed. Addison-Wesley, 2007. 8/10/2008 Leandro Tonietto 33 8/10/2008 Leandro Tonietto 34 6