feedback Aula 8 Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa

Documentos relacionados
Seleção & feedback. Módulo 12. Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 333. Instituto Superior de Engenharia do Porto

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

CG com OpenGL. Paulo Gandra de Sousa Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto

Computação Gráfica - OpenGl 02

Iluminação. Aula 6. Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto. Paulo Gandra de Sousa

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

Primitivas do OpenGL. Tomás Antônio C. Badan

TÓPICOS AVANÇADOS DE COMPUTAÇÃO GRÁFICA

Matriz de transformação

Programação Gráfica Cap 2

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

modelos rquicos Aula 5 Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa

André Tavares da Silva

CG 2015/2016 Primeiro Teste LEIC Alameda/Taguspark. Primeiro Teste

António Costa. Paulo Roma Cavalcanti

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

Introdução Prática à Programação em OpenGL

Uma API para geração de gráficos

FUNDAMENTOS E APLICAÇÕES. Luis Valente

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

Introdução ao OpenGL e à Programação Baseada em Eventos

Cap. 4: Janelas, Visores & Recorte Gráfico

Computação Gráfica OpenGl 03

PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA

Entrada de Dados e Interacção (Cap 3)

OpenGL. Computação Gráfica ISEL/DEETC/SP Computação Gráfica

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

CIV2802 Sistemas Gráficos para Engenharia Luiz Fernando Martha André Pereira

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Taguspark / Alameda. Primeiro Teste 17 de Março de 2012

OpenGL 3.* INF Rendering em Tempo Real. Waldemar Celes Departamento de Informática, PUC-Rio

Computação Gráfica. Desempenho

Computação Gráfica. Desempenho

Computação Gráfica LEI / LCC Departamento de Informática Universidade do Minho. Desempenho. Display Lists e Vertex Bufer Objects

Conceitos importantes da Computação Gráfica [3]

OpenGL. Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Introdução. Introdução. Carlos Carreto

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

OpenGL. Introdução ao OpenGL. Sistemas de Coordenadas. OpenGL 29/04/2010. Profa. M. Cristina Profa. Rosane. Application Programming Interface (API)

n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?

Estrutura de um programa gráfico

Computação Gráfica OpenGl 01

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 6. Projeções

Transformações Geométricas

Transformações (Cap 4.3, 4.4 e 4.6 a 4.10)

Computação Gráfica OpenGL 05 3D

CRAb Grupo de Computação Gráfica Departamento de Computação UFC

Transformações Geométricas e Animação

Iluminação. Módulo 10. Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 186. Instituto Superior de Engenharia do Porto

Pedro Vasconcelos DCC/FCUP. Programação Funcional 11 a Aula Gráficos usando Gloss

Introdução a Prática em OpenGL

Desenvolvimento de jogos tridimensionais com OpenGL. Bruno Pereira Evangelista

INTRODUÇÃO A OPENGL. Computação Gráfica

Transformações Geométricas

1-Introdução ao OpenGL

OpenGL. Professora: Mercedes Gonzales Márquez

Projeções e Visualização

Transformações geométricas

Introdução à Programação em OpenGL. Prof. Márcio Bueno

Interactividade Básica com GLUT e Primitivas Geométricas

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. Instituto Superior de Engenharia do Porto

Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

Computação Gráfica OpenGL 05 3D

Algoritmos de Recorte em 2D

Prof. Dr. Leandro Alves Neves. Conceitos Fundamentais. Algoritmos de Conversão Matricial.

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio. OpenGL: o que é? Interface para programador de aplicação. Aplicação API abstrata

Enquadramento e Conceitos Fundamentais

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

Introdução à OpenGL. SCC0250/ Computação Gráfica

OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

OpenGL. 35T56 Sala 3E3 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227 DIM102

Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]

Aula Prática Laboratorial n.º 8, nº 9 e nº 10

Modelo Hierárquico & Transformações Geométricas

OpenGL. Licenciatura em Computação Computação Gráfica - Aula 2 (atualizada em 15/08/2018)

Modelos Hierárquicos. Módulo 9. Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 154. Instituto Superior de Engenharia do Porto

OpenGL Um tutorial. Luis Valente. Instituto de Computação - Universidade Federal Fluminense lvalente@ic.uff.br. Dezembro, 2004

Sumário. Introdução Câmera sintética Window-to-Viewport Exercício. 29-May-13 Leandro Tonietto!2

Entendendo a geometria

Dispositivos de Entrada. Dispositivos de Entrada. Data Glove. Data Glove. Profa. M. Cristina Profa. Rosane março 2006 março 2009

Computação Gráfica. GLSL - Introdução e Programação da Aplicação OpenGL

Introdução ao OpenGL

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

Computação Gráfica II

LAB. 1. Introdução à OpenGL

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

Sistemas Gráficos e Modelos Cap 1

Introdução ao OpenGL. Professora: Maria Cristina Ferreira de Oliveira. Erick Gómez Nieto Agosto, 2011 Introdução ao OpenGL

- INF Remoção de faces ocultas Aula 21

Visualização 2D: - Transformação window to viewport - Clipping

Professor: Rodrigo Caetano Filgueira

OpenGL. Introdução ao OpenGL. OpenGL. OpenGL. OpenGL. OpenGL. Profa. M. Cristina Profa. Rosane

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

OPENGL. Matheus Fuhrmann Stigger [1] e Bruna Cavallero Martins

Introdução a OpenGL. Renato Rodrigues Oliveira da Silva Danilo Medeiros Eler

Programa de Aprimoramento Discente em Modelagem Geométrica Computacional. Curso Básico de OpenGL

OpenGL. Alberto B. Raposo

IntMu.Lab5. Importe os ficheiros disponibilizados em

Enquadramento e Conceitos Fundamentais

OpenGL. Licenciatura em Computação Computação Gráfica - Aula 2 (atualizada em 03 ago. 2017)

Engenharia Elétrica Computação Gráfica - Aula 2 (atualizada em 22/04/2018)

Transcrição:

Selecção & feedback Aula 8 Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

Conteúdo Modos do opengl Selecção Picking feedback 60

Modos do OpenGL glrendermode(mode) GL_RENDER Modo normal de funcionamento: desenho das primitivas no ecrã GL_SELECTION Modo de selecção: não desenha no ecrã mas devolve informação (nome simbólico) sobre os objectos que seriam desenhados Modo picking: idêntico mas com base na posição de dispositivo de input GL_FEEDBACK Modo feedback: não desenha no ecrã mas devolve informação sobre os elementos gráficos que seriam desenhados no ecrã (vértices, cores,...) 61

Selecção Passos a seguir: 1. Inicializar buffer de retorno 2. Entrar modo de selecção 3. Inicializar stack de nomes simbolicos 4. Definir volume de visualização 5. Desenhar a cena contendo o nome simbolico dos objectos 6. Sair do modo selecção e processar os registos do buffer de retorno 62

Exemplo selecção 63

Exemplo selecção void display(void) { glclearcolor (0.0, 0.0, 0.0, 0.0); glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); // desenhar cena normal drawscene(); // desenhar cena em modo selecção selectobjects(); } glflush(); 64

Exemplo selecção void selectobjects(void) { GLuint selectbuf[bufsize]; glselectbuffer(bufsize, selectbuf); glrendermode(gl_select); glinitnames(); glpushname(0); //colocar nome inicial na stack - 0 // definir projecção, visualização e desenhar glpushmatrix (); glmatrixmode (GL_PROJECTION); glloadidentity (); glortho (0.0, 5.0, 0.0, 5.0, 0.0, 10.0); glmatrixmode (GL_MODELVIEW); glloadidentity (); drawtriangles(); glpopmatrix (); glflush (); 65 } GLint hits = glrendermode(gl_render); processhits (hits, selectbuf);

Exemplo selecção void drawtriangles(void) { /*green triangle*/ glcolor3f (0.0, 1.0, 0.0); glloadname(1); drawtriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0); /*red triangle*/ glcolor3f (1.0, 0.0, 0.0); glloadname(2); drawtriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0); 66 /*yellow triangles*/ glcolor3f (1.0, 1.0, 0.0); glloadname(3); drawtriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0); drawtriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0); }

Instruções glselectbuffer Definir antes de entrar no modo selecção glinitnames Invocar antes de desenhar os objectos glpushname Inserir um nome simbólico glloadname Definir o nome simbólico do(s) proximo(s) objecto(s) 67

Processar resultados Ao sair do modo selecção (invocando glrendermode) recebe-se informação sobre selecção Array de tamanho variável com registos de tamanho variável Hit record = #names, z1, z2, ( name )* 68

Exemplo selecção void processhits(glint hits, GLuint buffer[]) { int i, j, names; GLuint *ptr; } printf ("hits = %d\n", hits); ptr = (GLuint *) buffer; for (i = 0; i < hits; i++) { /* for each hit */ names = (int) *ptr; printf (" number of names for hit = %d\n", names); ptr++; printf(" z1 is %g;", (float) *ptr/0x7fffffff); ptr++; printf(" z2 is %g\n", (float) *ptr/0x7fffffff); ptr++; printf (" the name is "); for (j = 0; j < names; j++) { /* for each name */ printf ("%d ", *ptr); ptr++; } printf ("\n"); } 69

Demo - select 70

Picking Passos a seguir: 1. Inicializar buffer de retorno 2. Entrar modo de selecção 3. Inicializar stack de nomes simbólicos 4. Definir matriz de sensibilidade baseada na posição do dispositivo de input 5. Definir volume de visualização 6. Desenhar a cena contendo o nome simbólico dos objectos 7. Sair do modo selecção e processar os registos do buffer de retorno 71

Exemplo picking Entrar no modo selecção através de evento do rato glutpassivemotionfunc glutmousefunc Definir a matriz de sensibilidade GL_PROJECTION GLint viewport[4]; glgetintegerv(gl_viewport, viewport); //create 5x5 pixel picking region near cursor location glupickmatrix((gldouble)x, (GLdouble)(viewport[3]-y), 5.0, 5.0, viewport); // definir matriz de projecção... 72

Demo - highlight 73

Demo - pickdepth 74

Múltiplos níveis n de nomes Para permitir trabalhar com objectos hierárquicos é possível definir uma stack de nomes e não apenas um nome para o objecto 75 Se utilizador selecciona-se o objecto mão D, o hit record seria:

Exemplo 76 void drawrobot() { glloadname(5); drawtronco(); // braço D glpushmatrix(); glpushname(3); drawbraco(); glpushname(1); drawmao(); glpopname(); glpopname(); glpopmatrix(); // cabeça glpushmatrix(); glpushname(j); drawcabeca(); glpopname(); glpopmatrix(); // braço E... }

Exemplo 77 void drawsquares(glenum mode) { GLuint i, j; for (i = 0; i < 3; i++) { if (mode == GL_SELECT) glloadname(i); for(j = 0; j < 3; j ++) { if (mode == GL_SELECT) glpushname(100+j); glcolor3f(i/3.0, j/3.0, board[i][j]/3.0); glrecti(i, j, i+1, j+1); if (mode == GL_SELECT) glpopname(); } } }

Demo - picksquare 78

feedback O que faz? Saber o que seria desenhado Informação vectorial Para que serve? Gerar comandos de impressora Gravar em ficheiro num formato vectorial, ex., DXF, windows metafile 79

feedback Passos a executar: 1. Definir buffer de retorno 2. Entrar no modo de feedback 3. Desenhar os objectos 4. Sair do modo de feedback 5. Processar informação de retorno 80

Exemplo void display(void) { glmatrixmode (GL_PROJECTION); glloadidentity (); glortho (0.0, 100.0, 0.0, 100.0, 0.0, 1.0); glclearcolor (0.0, 0.0, 0.0, 0.0); glclear(gl_color_buffer_bit); drawgeometry(gl_render); GLfloat feedbuffer[1024]; glfeedbackbuffer (1024, GL_3D_COLOR, feedbuffer); glrendermode(gl_feedback); drawgeometry(gl_feedback); 81 } GLint size = glrendermode (GL_RENDER); printbuffer (size, feedbuffer);

Exemplo 82 void drawgeometry(glenum mode) { glbegin (GL_LINE_STRIP); glnormal3f (0.0, 0.0, 1.0); glvertex3f (30.0, 30.0, 0.0); glvertex3f (50.0, 60.0, 0.0); glvertex3f (70.0, 40.0, 0.0); glend (); if (mode == GL_FEEDBACK) glpassthrough (1.0); glbegin (GL_POINTS); glvertex3f (-100.0, -100.0, -100.0); /* will be clipped */ glend (); if (mode == GL_FEEDBACK) glpassthrough (2.0); glbegin (GL_POINTS); glnormal3f (0.0, 0.0, 1.0); glvertex3f (50.0, 50.0, 0.0); glend (); }

Informação de retorno glfeedbackbuffer(size, type, buffer) Type := GL_2D GL_3D GL_3D_COLOR GL_3D_COLOR_TEXTURE 83

Informação de retorno O buffer de retorno é preenchido com informação de tamanho variável Código da primitiva, dados Vértices são coordenadas de janela Primitive Type Code Associated Data Point GL_POINT_TOKEN vertex Line GL_LINE_TOKEN or GL_LINE_RESET_TOKEN vertex vertex Polygon GL_POLYGON_TOKEN n vertex vertex... vertex Bitmap GL_BITMAP_TOKEN vertex Pixel Rectangle GL_DRAW_PIXEL_TOKEN or vertex GL_COPY_PIXEL_TOKEN 84 Pass-through GL_PASS_THROUGH_TOKEN a floating-point number

Demo 85

Exportar para PS e WMF Podem ver exemplos em: http://www.codeproject.com/opengl/glexport.asp http://www.geuz.org/gl2ps/ 86