1 / 10

Callback de Teclado

Callback de Teclado. // registro void glutKeyboardFuc ( Teclado ); // interface void Teclado (unsigned char tecla , int x, int y) { // algumas teclas if ( tecla == 27) exit(0); // sai do programa if ( tecla == ‘a’) glutFullScreen (); // tela cheia

mabyn
Download Presentation

Callback de Teclado

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Callback de Teclado // registro void glutKeyboardFuc(Teclado); // interface void Teclado(unsigned char tecla, int x, int y) { // algumasteclas if (tecla == 27) exit(0); // sai do programa if (tecla == ‘a’) glutFullScreen(); // telacheia if (tecla == ‘A’) // mudaposicao da janela { glutReshapeWindow(500,400); glutPositionWindow(100,100); } }

  2. Callback de TeclasEspeciais // registro void glutSpecialFuc(Teclado); // interface void Teclado(inttecla, int x, int y) { switch(tecla) { case GLUT_KEY_F1: printf(“F1 pressionada\n”); case GLUT_KEY_HOME: printf(“home pressionada\n”); case GLUT_KEY_INSERT: printf(“insert pressionada\n”); }; } Um quadro completo de Funções especiais de teclado pode ser encontrado no Manual da Glut

  3. Para verificar se asa teclas SHIFT, CTRL e ALT estão pressionadasa, pode-se usar a função De verificação de modificadores: Callback de Teclas com Modificadores void Teclado(inttecla, int x, int y) { intmodificador = glutGetModifiers(); if (modificador & GLUT_ACTIVE_SHIFT) printf(“SHIFT pressionado\n\n”); if (modificador & GLUT_ACTIVE_CTRL) printf(“CTRL pressionado\n\n”); if (modificador & GLUT_ACTIVE_ALT) printf(“ALT pressionado\n\n”); }

  4. 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: Criação e Uso de Menus IntglutCreateMenu(void (*func) (int value)) // quando a opção value for selecionada, a função (*func) seráchamada; void glutAddmenuEntry(char *name, int value) // adicionaumaopçãoao “menu corrente”. O primeiroparâmetro define o texto da opção, enquanto o segundo define o número a ser geradoquando a opção for selecionada; void glutAddSubMenu(char *nome, int menu) // Adicionaumaopçãoao “menu corrente” e colocanessaopção o submenu, cujonúmeroestásendoinformado no segundoparâmetro. O primeiroparãmetro define o texto da opçãop. O submenu informadodevetersidopreviamentecriado com o uso da funçãoglutCreateMenu()

  5. Criação e Uso de Menus (cont…) void glutAttachMenu(int button) // faz a ligação do menu corrente com um dos botões do mouse. Os valoresválidospara o parãmetro button são as constantes GLUT_RIGHT_BUTTON, GLUT_LEFT_BUTTON e GLUT_MIDDLE_BUTTON, void glutDetacjMenuEntry(int button) // Interrompena “janelacorrente” a ligação do “menu corrente” com um dos botôes do mouse, identificadopeloparâmetropassado, quedeveter a mesmaconstantepassadapara a funçãoglutAttachMenu;

  6. Criação e Uso de Menus (Exemplo) // Funçãoresponsávelporcriaros menus, chamada da main.cpp void CriaMenu() { int menu,submenu1,submenu2; // Cria submenu paraseleção de cor submenu1 = glutCreateMenu(MenuCor); glutAddMenuEntry("Vermelho",0); glutAddMenuEntry("Verde",1); glutAddMenuEntry("Azul",2); // Cria submenu paraseleção de primitiva submenu2 = glutCreateMenu(MenuPrimitiva); glutAddMenuEntry("Quadrado",0); glutAddMenuEntry("Triângulo",1); glutAddMenuEntry("Losango",2); // Cria menu principal... menu = glutCreateMenu(MenuPrincipal); // ... e adiciona ambos submenus a ele glutAddSubMenu("Cor",submenu1); glutAddSubMenu("Primitivas",submenu2); // Associa o menu aobotãodireito do mouse glutAttachMenu(GLUT_RIGHT_BUTTON); }

  7. Funções de Espaço de Trabalho Para realizar o mapeamento do SRU para o SRT em OpenGL é necessário apenas especificar a viewport e a window, utilizando as funções descritas a seguir:

  8. Funções de Espaço de Trabalho (cont ..) void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) Essafunção é utilizadaparadefinir a viewport. Os doisprimeirosparâmetrosservemparaespeficicar o canto esquerdo superior da janela, enquantoosdoisúltimosdefinem, respectivamente, a largura e a altura da janela. Apesar da possibilidade de passardiferentesvaloresparaestafunção, principalmentequando se estátrabalhando com duas viewports, emgeral é atribuído o valor 0 para x e para y, e diferentesvalores de largura e alturapara a janela. void gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) Essafunção é utilizadaparadefinir a windowquando se estátrabalhando com desenhos 2D. Seusparâmetroscorrespondem, respectivamente, àscoordenadas de cadaborda da window, isto é, x mínimo (bordaesquerda - left), x máximo (bordadireita - right), y mínimo (borda inferior bottom) e y máximo (borda superior - top).

  9. // Função callback chamada quando o tamanho da janela é alterado voidAlteraTamanhoJanela(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 glViewport(0, 0, largura, altura); // Inicializa o sistema de coordenadas glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Estabelece a janela de seleção (esquerda, direita, inferior, superior) mantendo a proporção com a janela de visualização if (largura <= altura) gluOrtho2D (-40.0f, 40.0f, -40.0f*altura/largura, 40.0f*altura/largura); else gluOrtho2D (-40.0f*largura/altura, 40.0f*largura/altura, -40.0f, 40.0f); } Funções de Espaço de Trabalho (cont ..) A glViewport é chamada de dentro da função callback (ex: AlteraAspectojanela) registrada com a funçãoglutReshapeFunc. Assim, sempreque o usuárioaltera o tamanho da janela GLUT, a viewport é redefinida. As variáveislargura e alturarecebem, respectivamente, osvalores de largura e altura da GLUT todavezque o usuárioaltera o seutamanho. Abaixo é dado um exemplo:

  10. Exercícios com Pontuação 1- [NívelBásico]: Construa um programaem OpenGL quefaçainteração com o tecladousando a função de callback do teclado. Crieinterações com teclasespeciais do tipo SHIFT, CTRL e ALT 2- [NívelBásico]: Construa um programaem OpenGL quefaçainteração com o mouse usando a função de callback do mouse. 3- [NívelBásico]: Construa um programaem OpenGL quefaçainteração de menu e submenus; 4- [NívelBásico]: Construaumafunçãoparainterações de reshape da ViewPort da GLUT quemantenha o aspecto da janelausando as funçõesgluOrtho2D e umagluViewport. 5- [NívelMédio]: Construa um programaem OpenGL que, através do menu, construadiferentesprimitivascomoquadrado e váriostipos de triãngulos, permita a alteração da cor da primitiva e possapintá-las com um spectro de cores, de acordo com o Exemplo Exerciciolab2.exe. O programadeveparar de executarquando for acionada a tecla ESC. 6- [NívelMédio]: Use a interação com o mouse paraarrastar, ampliar e transladar a figurageométricaqueaparecena Viewport.

More Related