Comput Graf OpenGl04

Fazer download em pdf ou txt
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

Você também pode gostar