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
1. Introdução à Computação Gráfica
Aula – Interação com OpenGL
Herbet Ferreira
herbet@di.ufpb.br
13/05/2010 1
2. 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
3. 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
4. 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
6. 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
7. Exercício
1. Construa um programa em OpenGL+glut que
faça interação com o teclado usando a
função de callback do teclado. Crie
interações para rotação com as teclas z, c, x e
s e translação com teclas especiais do tipo
GLUT_KEY_LEFT, GLUT_KEY_RIGHT,
GLUT_KEY_UP e GLUT_KEY_DOWN.
13/05/2010 7
8. 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 dispositivo
foi pressionado e em que posição do plano xy
13/05/2010 8
9. 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
10. Exercício
1. Construa um programa em OpenGL+glut que
faça interação com o mouse usando a função
de callback do mouse. Crie interações para
Zoom-in e Zoom-out com o botão esquerdo
do mouse e botão direito.
13/05/2010 10
11. 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
12. 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
13. Exercício
1. Construa um programa em OpenGL+glut que
ative 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