Buscar

Aula Prática de OpenGL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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:

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes