Callback de Teclado registro void glut Keyboard FucTeclado
Callback de Teclado // registro void glut. Keyboard. Fuc(Teclado); // interface void Teclado(unsigned char tecla, int x, int y) { // algumas teclas if (tecla == 27) exit(0); // sai do programa if (tecla == ‘a’) glut. Full. Screen(); // tela cheia if (tecla == ‘A’) // muda posicao da janela { glut. Reshape. Window(500, 400); glut. Position. Window(100, 100); } }
Callback de Teclas Especiais // registro void glut. Special. Fuc(Teclado); // interface void Teclado(int tecla, int x, int y) { switch(tecla) { case GLUT_KEY_F 1: printf(“F 1 pressionadan”); case GLUT_KEY_HOME: printf(“home pressionadan”); case GLUT_KEY_INSERT: printf(“insert pressionadan”); }; } Um quadro completo de Funções especiais de teclado pode ser encontrado no Manual da Glut
Callback de Teclas com Modificadores Para verificar se asa teclas SHIFT, CTRL e ALT estão pressionadasa, pode-se usar a função De verificação de modificadores: void Teclado(int tecla, int x, int y) { int modificador = glut. Get. Modifiers(); if (modificador & GLUT_ACTIVE_SHIFT) printf(“SHIFT pressionadonn”); if (modificador & GLUT_ACTIVE_CTRL) printf(“CTRL pressionadonn”); if (modificador & GLUT_ACTIVE_ALT) printf(“ALT pressionadonn”); }
Criação e Uso de Menus A biblioteca Glut possui algumas ferramentas para criação e gerenciamento de menus pop-up. A idéia geral é que cada menu possua a sua callback separada. Para criar menus, estão disponíveis as seguintes bibliotecas: • Int glut. Create. Menu(void (*func) (int value)) // quando a opção value for selecionada, a função (*func) será chamada; • void glut. Addmenu. Entry(char *name, int value) // adiciona uma opção ao “menu corrente”. O primeiro parâmetro define o texto da opção, enquanto o segundo define o número a ser gerado quando a opção for selecionada; • void glut. Add. Sub. Menu(char *nome, int menu) // Adiciona uma opção ao “menu corrente” e coloca nessa opção o submenu, cujo número está sendo informado no segundo parâmetro. O primeiro parãmetro define o texto da opçãop. O submenu informado deve ter sido previamente criado com o uso da função glut. Create. Menu()
Criação e Uso de Menus (cont…) • void glut. Attach. Menu(int button) // faz a ligação do menu corrente com um dos botões do mouse. Os valores válidos para o parãmetro button são as constantes GLUT_RIGHT_BUTTON, GLUT_LEFT_BUTTON e GLUT_MIDDLE_BUTTON, • void glut. Detacj. Menu. Entry(int button) // Interrompe na “janela corrente” a ligação do “menu corrente” com um dos botôes do mouse, identificado pelo parâmetro passado, que deve ter a mesma constante passada para a função glut. Attach. Menu;
Criação e Uso de Menus (Exemplo) // Função responsável por criar os menus, chamada da main. cpp void Cria. Menu() { int menu, submenu 1, submenu 2; // Cria submenu para seleção de cor submenu 1 = glut. Create. Menu(Menu. Cor); glut. Add. Menu. Entry("Vermelho", 0); glut. Add. Menu. Entry("Verde", 1); glut. Add. Menu. Entry("Azul", 2); // Cria submenu para seleção de primitiva submenu 2 = glut. Create. Menu(Menu. Primitiva); glut. Add. Menu. Entry("Quadrado", 0); glut. Add. Menu. Entry("Triângulo", 1); glut. Add. Menu. Entry("Losango", 2); // Cria menu principal. . . menu = glut. Create. Menu(Menu. Principal); //. . . e adiciona ambos submenus a ele glut. Add. Sub. Menu("Cor", submenu 1); glut. Add. Sub. Menu("Primitivas", submenu 2); } // Associa o menu ao botão direito do mouse glut. Attach. Menu(GLUT_RIGHT_BUTTON);
Funções de Espaço de Trabalho Para realizar o mapeamento do SRU para o SRT em Open. GL é necessário apenas especificar a viewport e a window, utilizando as funções descritas a seguir:
Funções de Espaço de Trabalho (cont. . ) void gl. Viewport(GLint x, GLint y, GLsizei width, GLsizei height) Essa função é utilizada para definir a viewport. Os dois primeiros parâmetros servem para espeficicar o canto esquerdo superior da janela, enquanto os dois últimos definem, respectivamente, a largura e a altura da janela. Apesar da possibilidade de passar diferentes valores para esta função, principalmente quando se está trabalhando com duas viewports, em geral é atribuído o valor 0 para x e para y, e diferentes valores de largura e altura para a janela. void glu. Ortho 2 D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) Essa função é utilizada para definir a window quando se está trabalhando com desenhos 2 D. Seus parâmetros correspondem, respectivamente, às coordenadas de cada borda da window, isto é, x mínimo (borda esquerda - left), x máximo (borda direita - right), y mínimo (borda inferior bottom) e y máximo (borda superior - top).
Funções de Espaço de Trabalho (cont. . ) A gl. Viewport é chamada de dentro da função callback (ex: Altera. Aspectojanela) registrada com a função glut. Reshape. Func. Assim, sempre que o usuário altera o tamanho da janela GLUT, a viewport é redefinida. As variáveis largura e altura recebem, respectivamente, os valores de largura e altura da GLUT toda vez que o usuário altera o seu tamanho. Abaixo é dado um exemplo: // Função callback chamada quando o tamanho da janela é alterado void Altera. Tamanho. Janela(GLsizei w, GLsizei h) { GLsizei largura, altura; // Evita a divisao por zero if(h == 0) h = 1; // Atualiza as variáveis largura = w; altura = h; // Especifica as dimensões da Viewport gl. Viewport(0, 0, largura, altura); // Inicializa o sistema de coordenadas gl. Matrix. Mode(GL_PROJECTION); gl. Load. Identity(); // Estabelece a janela de seleção (esquerda, direita, inferior, superior) mantendo a proporção com a janela de visualização } if (largura <= altura) else glu. Ortho 2 D (-40. 0 f, -40. 0 f*altura/largura, 40. 0 f*altura/largura); glu. Ortho 2 D (-40. 0 f*largura/altura, -40. 0 f, 40. 0 f);
Exercícios com Pontuação 1 - [Nível Básico]: Construa um programa em Open. GL que faça interação com o teclado usando a função de callback do teclado. Crie interações com teclas especiais do tipo SHIFT, CTRL e ALT 2 - [Nível Básico]: Construa um programa em Open. GL que faça interação com o mouse usando a função de callback do mouse. 3 - [Nível Básico]: Construa um programa em Open. GL que faça interação de menu e submenus; 4 - [Nível Básico]: Construa uma função para interações de reshape da View. Port da GLUT que mantenha o aspecto da janela usando as funções glu. Ortho 2 D e uma glu. Viewport. 5 - [Nível Médio]: Construa um programa em Open. GL que, através do menu, construa diferentes primitivas como quadrado e vários tipos de triãngulos, permita a alteração da cor da primitiva e possa pintá-las com um spectro de cores, de acordo com o Exemplo Exerciciolab 2. exe. O programa deve parar de executar quando for acionada a tecla ESC. 6 - [Nível Médio]: Use a interação com o mouse para arrastar, ampliar e transladar a figura geométrica que aparece na Viewport.
- Slides: 10