interação (opengl)

13
Introdução à Computação Gráfica Aula Interação com OpenGL Herbet Ferreira [email protected] 13/05/2010 1

Upload: herbet-ferreira

Post on 11-May-2015

3.712 views

Category:

Education


0 download

DESCRIPTION

Aula sobre Interação (mouse e teclado) com OpenGL para a disciplina de Introdução à Computação Gráfica do curso de Ciência da Computação da UFPB no período 2010.1

TRANSCRIPT

Page 1: Interação (OpenGL)

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

Aula – Interação com OpenGL

Herbet [email protected]

13/05/2010 1

Page 2: Interação (OpenGL)

Introdução

• Interação

– Ações do usuário capturadas pelo sistema para atualizar a cena gráfica;

• A GLUT contém funções e palavras reservadas para gerenciar eventos de Mouse e Teclado;

• A chamada de glutPostRedisplay(); no final da função é necessária para forçar o re-desenho da cena gráfica;

13/05/2010 2

Page 3: Interação (OpenGL)

Interação com Teclado

• Comandos do Teclado:– glutKeyboardFunc(Key); // Funções do teclado

– glutSpecialFunc(Special); // Teclas especiais

• Key função que determinará a ação de cada tecla (valor alfanumérico)

• Special função que reconhece teclas especiais do teclado (não alfanuméricos)

– Associado pela GLUT um valor inteiro

13/05/2010 3

Page 4: Interação (OpenGL)

Interação com Teclado

• void Key(unsigned char key,int x,int y);

– unsigned char key valor ASCII da tecla;

– int x, int y posição do mouse quando a tecla foi pressionada;

• void Special(int key,int x,int y)

– int key constante que identifica a tecla;

– int x, int y posição do mouse quando a tecla foi pressionada;

13/05/2010 4

Page 5: Interação (OpenGL)

Interação com Teclado Special

• GLUT_KEY_DOWN

• GLUT_KEY_UP

• GLUT_KEY_LEFT

• GLUT_KEY_RIGHT

• GLUT_KEY_PAGE_UP

• GLUT_KEY_PAGE_DOWN

• GLUT_KEY_HOME

• GLUT_KEY_END

• GLUT_KEY_INSERT

• GLUT_KEY_F1 ... GLUT_KEY_F12

13/05/2010 5

Page 6: Interação (OpenGL)

Aplicação Básica

• Tamanho da Tela: 500 x 500• Inicialização

– Fundo Preto– Projeção Perspectiva

• Angle = 300• Aspect = 1• Near = 0.5• Far = 400

• Display– Translação Z = -10– glutSolidCube(1); Cor Verde

– glutSolidCube(1); Cor Vermelho

13/05/2010 6

Page 7: Interação (OpenGL)

Exercício

1. Construa um programa em OpenGL+glut quefaça interação com o teclado usando a função de callback do teclado. Crieinterações para rotação com as teclas z, c, x e s e translação com teclas especiais do tipoGLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP e GLUT_KEY_DOWN.

13/05/2010 7

Page 8: Interação (OpenGL)

Interação com Mouse

• Comandos do Mouse:– void Motion(int x, int y);

– void Mouse(int button, int state, int x,

int y);

• Motion possível identificar a posição do mouse no plano xy

• Mouse verifica qual botão do dispositivofoi pressionado e em que posição do plano xy

13/05/2010 8

Page 9: Interação (OpenGL)

Interação com Mouse

• void Motion(int x, int y)

– int x, int y Posição do mouse no plano xy

• void Mouse(int button, int state, int x,

int y)

– int button GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON e GLUT_RIGHT_BUTTON

– int state GLUT_UP ou GLUT_DOWN

– int x, int y posição do mouse no momento que ocorreu o evento;

13/05/2010 9

Page 10: Interação (OpenGL)

Exercício

1. Construa um programa em OpenGL+glut quefaça interação com o mouse usando a funçãode callback do mouse. Crie interações paraZoom-in e Zoom-out com o botão esquerdodo mouse e botão direito.

13/05/2010 10

Page 11: Interação (OpenGL)

Z-buffer

• Utilizado para calcular a distância do observador e remover superfícies ou partes ocultas de objetos sobrepostos;

• Manter para cada pixel um valor de profundidade;

• Não esquecer de alocar o z-buffer– glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

• Ao gerar um novo quadro, limpar também o z-buffer:– glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

13/05/2010 11

Page 12: Interação (OpenGL)

Z-buffer

• Habilitar o Z-buffer:– glEnable(GL_DEPTH_TEST);

• Antes da composição da cena, desenhar no buffer de segundo plano;– glDrawBuffer(GL_BACK);

• Após a completa composição da cena, descarrega-se o conteúdo do buffer de segundo plano no primeiro com a função;– glutSwapBuffers();

13/05/2010 12

Page 13: Interação (OpenGL)

Exercício

1. Construa um programa em OpenGL+glut queative o z-buffer na visualização de dois cubos.

– Utilizar os exercícios anteriores com interação do mouse e teclado.

2. Entregar todo o exercício na próxima aula;

– Código

• Interação Teclado e Mouse

• Z-Buffer

– Printscreens

13/05/2010 13