1) O documento apresenta os conceitos de gerenciamento de eventos de entrada como teclado e mouse na biblioteca GLUT.
2) Inclui exemplos de código para animação simples utilizando a função glutTimerFunc para definir uma função de callback de animação.
3) Discutem double buffering para animações, onde cada frame é renderizado em um buffer offscreen antes de ser exibido.
1) O documento apresenta os conceitos de gerenciamento de eventos de entrada como teclado e mouse na biblioteca GLUT.
2) Inclui exemplos de código para animação simples utilizando a função glutTimerFunc para definir uma função de callback de animação.
3) Discutem double buffering para animações, onde cada frame é renderizado em um buffer offscreen antes de ser exibido.
1) O documento apresenta os conceitos de gerenciamento de eventos de entrada como teclado e mouse na biblioteca GLUT.
2) Inclui exemplos de código para animação simples utilizando a função glutTimerFunc para definir uma função de callback de animação.
3) Discutem double buffering para animações, onde cada frame é renderizado em um buffer offscreen antes de ser exibido.
1) O documento apresenta os conceitos de gerenciamento de eventos de entrada como teclado e mouse na biblioteca GLUT.
2) Inclui exemplos de código para animação simples utilizando a função glutTimerFunc para definir uma função de callback de animação.
3) Discutem double buffering para animações, onde cada frame é renderizado em um buffer offscreen antes de ser exibido.
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
Você está na página 1de 10
Universidade Federal do Vale do São Francisco
Curso de Engenharia da Computação
Computação Gráfica - 04
Prof. Jorge Cavalcanti
[email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav Gerenciamento de eventos: mouse e teclado • A biblioteca GLUT também contém funções para gerenciar eventos de entrada de teclado e mouse.
• glutKeyboardFunc - Estabelece a função que é
chamada pela GLUT cada vez que uma tecla que gera código ASCII é pressionada (por exemplo: a, b, A, b, 1, 2). • Além do valor ASCII da tecla, a posição (x,y) do mouse quando a tecla foi pressionada também é retornada. Parâmetros de entrada da função callback: (unsigned char key, int x, int y) . • Ao invés de usar o código ASCII, podemos usar o próprio caracter entre apóstrofos: ‘q’ ou ‘Q’.
Página 2 Computação Gráfica – Parte 04 27/11/2019
Gerenciamento de eventos: mouse e teclado • glutSpecialFunc - Estabelece a função que é chamada pela GLUT cada vez que uma tecla que gera código não-ASCII é pressionada, tais como Home, End, PgUp, PgDn, F1 e F2. (unsigned char key, int x, int y). • Os valores válidos para o primeiro parâmetro são: GLUT_KEY_F1, GLUT_KEY_F2, GLUT_KEY_F3, GLUT_KEY_F4, GLUT_KEY_F5, GLUT_KEY_F6, GLUT_KEY_F7, GLUT_KEY_F8, GLUT_KEY_F9, GLUT_KEY_F10, GLUT_KEY_F11, GLUT_KEY_F12, GLUT_KEY_LEFT, GLUT_KEY_UP, GLUT_KEY_RIGHT, GLUT_KEY_DOWN, GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN, GLUT_KEY_HOME, GLUT_KEY_END, GLUT_KEY_INSERT.
Página 3 Computação Gráfica – Parte 04 27/11/2019
Gerenciamento de eventos: mouse e teclado • glutMouseFunc- Estabelece a função que é chamada pela GLUT cada vez que ocorre um evento de mouse. Parâmetros de entrada da função callback: (int button, int state, int x, int y). • Três valores são válidos para o parâmetro button: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON e GLUT_RIGHT_BUTTON. • O parâmetro state pode ser GLUT_UP ou GLUT_DOWN. Os parâmetros x e y indicam a localização do mouse no momento que o evento ocorreu.
• Código Exemplo do uso do mouse e teclado.
http://migre.me/1mEUG - interação
Página 4 Computação Gráfica – Parte 04 27/11/2019
Gerenciamento de janelas Redimensionamento proporcional da janela • Podemos alterar os parâmetros da janela da aplicação para controlarmos o zoom da imagem. • Altera-se somente o tamanho da janela. Não usa a escala para alterar o tamanho dos objetos. • Código exemplo: http://migre.me/1mY1z - (Casa com zoom) • Usar as setas para cima/para baixo para aplicar o zoom.
Página 5 Computação Gráfica – Parte 04 27/11/2019
Animação • É possível criar um laço que continuamente altera as coordenadas do objeto antes de chamar a função "Desenha". • Isto daria a impressão de que o quadrado se move na janela. Porém, a biblioteca GLUT fornece a possibilidade de registrar uma função que torna mais fácil o processo de fazer uma simples animação. • A função glutTimerFunc pega o nome da função que deve ser chamada e o tempo que ela deve esperar antes de chamar a função.
Página 6 Computação Gráfica – Parte 04 27/11/2019
Animação • glutTimerFunc(unsigned int msecs, void (*func)(int value), int value)- estabelece a função Timer previamente definida como a função de animação. • Esta função faz a GLUT esperar msecs milisegundos antes de chamar a função func. • Como esta função é "disparada" apenas uma vez, para se ter uma animação contínua é necessário reinicializar o timer novamente na função Timer. • void Timer(int value)- é a função chamada pela glutTimerFunc. • Código Exemplo: http://migre.me/1mYLK
Página 7 Computação Gráfica – Parte 04 27/11/2019
Animação • Observar que no código-fonte exemplo da animação, foi trocado o modo de exibição da janela para double. • O double-buffering é uma das características mais importantes em qualquer pacote gráfico que está disponível na GLUT. Ele permite que um desenho seja exibido na tela enquanto está sendo realizado o rendering em um offscreen buffer. • Então, um comando de swap coloca a imagem na tela assim que a imagem seguinte é formada. • Isto é útil, principalmente, por dois motivos: -Alguns desenhos complexos podem levar um certo tempo para serem feitos, e não é desejado que cada passo da composição da imagem seja visível; - É possível compor uma imagem e exibi-la somente depois de completa, de maneira que o usuário nunca vê uma imagem parcial, pois ela é exibida somente quando está pronta.
Página 8 Computação Gráfica – Parte 04 27/11/2019
Animação • No caso de uma animação, cada quadro (ou frame) é desenhado no offscreen buffer e é exibido (swapped) rapidamente depois de pronto. • glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB), foi usada para trocar o modo de exibição de GLUT_SINGLE para GLUT_DOUBLE. • Isto faz com que todo o rendering seja feito em um offscreen buffer. • glutSwapBuffers()- é usada no lugar da glFlush porque quando é feita a troca (ou swap) de buffers, é realizada implicitamente uma operação de flush.
Página 9 Computação Gráfica – Parte 04 27/11/2019
Atividade – Prazo dia 12/12/2019
Atividade Prática – Valendo 4 pontos
Página 10 Computação Gráfica – Parte 04 27/11/2019