Baixe o app para aproveitar ainda mais
Prévia do material em texto
Computação Gráfica Programando em OpenGL Universidade Federal Rural do Semi-Árido - UFERSA Leandro C. Souza leandro.souza@ufersa.edu.br Roteiro • Callbacks de teclado e mouse; • Criação de menus; • Janelas: redimensionamento e criação de múltiplas janelas; • Divisão de uma janela de visualização em múltiplas viewports; • Exibição de textos. Criação de Menus Menus no GLUT • Criando um menu: int glutCreateMenu(void *(func)(int value)); onde: func é a callback para gerenciar as entradas do menu. value corresponde ao valor que identifica a entrada do menu que foi selecionada. Menus no GLUT • Criando uma entrada no menu: void glutAddMenuEntry(char *name, int value); onde: name é um string para nomear a entrada. value é o valor que será passado para a callback, caso a entrada correspondente seja selecionada. Menus no GLUT • Atribuindo o menu a um botão do mouse: void glutAttachMenu(int button); • Adicionando submenus ao menu corrente: void glutAddSubMenu(char *name, int menu); onde name é a string exibida para a entrada que abrirá o submenu e menu é o identificador do submenu Menus no GLUT //Criação de entradas no menu: void criaMenu(void) { int menuID = glutCreateMenu(menu); glutAddMenuEntry(“Opção 1", 1); glutAddMenuEntry(“Opção 2", 2); glutAddMenuEntry(“Sair", 0); glutAttachMenu(GLUT_RIGHT_BUTTON); } void menu(int value) { ... } Menus no GLUT //Criação de submenus void criaMenu(void) { int submenuFig, submenuCor, menuID; submenuFig = glutCreateMenu(menuFig); glutAddMenuEntry("Quadrado", 0); glutAddMenuEntry("Triangulo", 1); submenuCor = glutCreateMenu(menuCor); glutAddMenuEntry("Branco", 0); glutAddMenuEntry("Azul", 1); menuID = glutCreateMenu(MenuPrincipal); glutAddSubMenu("Figura", submenuFig); glutAddSubMenu("Cor", submenuCor); glutAddMenuEntry("Sair", 0); glutAttachMenu(GLUT_RIGHT_BUTTON); } Redimensionamento de Janela • Registro da callback: glutReshapeFunc(void (*f) (int width, int height)) • Chamada sempre que o usuário modificar o tamanho da janela usando o mouse. • A callback de desenho é chamada automaticamente ao se executar f(). Redimensionamento de Janela • Exemplo: Viewport • Podemos restringir a região onde o OpenGL desenhará dentro de uma janela. – Default: usar a janela inicial inteira para exibir seus gráficos. • Uma viewport é uma área retangular da janela. Viewport • Setando a viewport: void glViewport(GLint x, GLint y, GLsizei w, GLsizei h); • w e h definem o tamanho da viewport em relação à janela do aplicativo. – Os valores de w e h são tipicamente obtidos na callback de redimensionamento da janela. • Os valores x e y definem a posição do canto inferior esquerdo da viewport. Usando múltiplas viewports • A especificação de viewports permite a divisão da janela de modo que diferentes tipos de informação sejam exibidos em diferentes partes da janela. • Exemplo: – CAD (múltiplas vistas de um mesmo objeto). Definindo múltiplas viewports • Para cada viewport em uma janela, faça uma chamada a glViewport e defina os parâmetros apropriados. • Exemplo: definindo duas viewports: Definindo múltiplas janelas Definindo múltiplas janelas • Faça uma chamada a glutCreateWindow para cada janela a ser criada. • Parâmetros gerais (como cor de fundo) e callbacks para cada janela podem ser compartilhadas ou não. • Propriedades não compartilhadas deverão ser definidas separadamente para cada janela. Definindo múltiplas janelas • Exemplo: Exibição de Texto • Não suportado diretamente pela OpenGL, porém suportado pelo GLUT. • Suporta dois tipos de fontes de caracteres: – strokes (segmentos de reta) • mais flexíveis (podem ser escaladas e rotacionadas). – bitmap (formado por imagens que representam caracteres) • mais rápidas para serem exibidas. Caracteres – bitmap • void glutBitmapCharacter(void *font, int character); onde: – font: define a fonte a ser usada. – character: define o caractere. Constantes para tipos de fontes • GLUT_BITMAP_8_BY_13 • GLUT_BITMAP_9_BY_15 • GLUT_BITMAP_TIMES_ROMAN_10 • GLUT_BITMAP_TIMES_ROMAN_24 • GLUT_BITMAP_HELVETICA_10 • GLUT_BITMAP_HELVETICA_12 • GLUT_BITMAP_HELVETICA_18 Posicionamento • Cada caractere é um bitmap gerado por glBitmap. – Esta função posiciona cada caractere de uma string de acordo com a largura desses caracteres. • Uma string é posicionada com: void glRasterPos2f(x,y); Um Exemplo:
Compartilhar