Introdução à Computação Gráfica Aula – Interação com OpenGL Herbet Ferreira [email protected] 13/05/2010 1
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
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
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
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
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
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
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
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
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
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
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
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