2. Interação e controle da
câmera virtual
Objetivo: aprender como usar a GLUT para
entrada com mouse e teclado para interagir com objetos 3D e
câmeras.
1. Entrada pelo teclado com a GLUT
Vocês provavelmente notaram que nos exemplos
dados até agora existe uma função "void
key(unsigned char k, int x, int y)
". Esta
é a callback da GLUT que é chamada toda vez que uma tecla
é pressionada. Na verdade, vocês podem usar qualquer nome
no lugar de "key". Se olharem de novo nos exemplos, encontrarão
uma chamada para "glutKeyboardFunc(key)
" na função main(). É ela quem atribui
a "key" o papel de ser a sua função callback de teclado.
Se quiserem usar teclas não-ASCII, como:
|
2. Interceptando eventos do mouse com a GLUT
Da mesma forma que com o teclado, deve-se definir uma função callback para ler informação do mouse. Chamem "glutMouseFunc(myMouseFunction)" na inicialização para definir sua função callback de mouse. Consultem o exemplo abaixo e para mais possibilidades olhem de novo o capítulo 7 da referência da GLUT: http://www.opengl.org/resources/libraries/glut/spec3/spec3.html.
|
3. Gerenciamento de menus com a GLUT
Para criar menus com a GLUT, existem 3 funções principais usadas respectivamente para inicializar um menu, adicionar itens a ele e adicionar submenus a ele. Então, uma vez que o menu esteja registrado, o sistema de callback irá chamá-lo com as informações que dizem respeito à entrada selecionada.
Chamem glutAttachMenu para inicializar o sistema de menu.:
|
Outras funções que devem ser usadas:
|
Vejam o exemplo (menu.c)
Fig. 1 - Exemplo de um menu da GLUT
Fazer:
1. Olhar o exemplo pra descobrir onde e como as
funções do menu devem ser chamadas.
2. Implementar um sistema de menu para o seu prórpio programa (o
das casas por exemplo) para escolher entre visualização
em wireframe ("fios de arame") ou preenchida ("sólido") e cores.
4. Controle de câmera
Uma maneira de implementar o controle de
câmera em OpenGL e GLUT é usando a função
gluLookAt. Esta função permite especificar a
posição da câmera no espaço 3D e o ponto
para onde a câmera está olhando. O vetor vertical da
câmera também deve ser dado. Chamem gluLookAt na sua
função display, logo antes de desenhar objetos.
void gluLookAt(GLdouble eyex, |
Há uma aplicação disponível aqui (ver figura 2), que vocês podem usar para testar interativamente o efeito dos parâmetros dados à gluLookAt e à gluPerspective; esta última é chamada na função "reshape" em exercícios anteriores. A aplicação é um tutorial que deve ajudá-los a entender o papel de cada parâmetro.
Fig. 2 - Programa tutorial
sobre projeção.
(c) Nate Robins (fonte: http://www.xmission.com/~nate/tutors.html)
Sua vez de jogar: Agora, usem as funções de teclado e mouse para mudar os parâmetros da sua câmera.