Felipe Cavalcanti Ferreira
Fernando Valente Kakimoto
Francisco Paulo Magalhães Simões
Thiago de Barros Lacerda
O que é
?
 Open Graphics Library



“Uma interface de software com o hardware gráfico”
Uma camada de abstração entre o programa de aplicação
e o hardware gráfico
Construída na forma de API em C (Application
Programmer’s Interface )
 Permite criar programas interativos que produzem
imagens coloridas de objetos em movimento
Características Principais
 Independente do sistema operacional
 Projetada para aplicações gráficas interativas
2D e 3D
 Controlada pelo ARB (Architecture Review
Board)

3DLabs, Compaq/Digital, Evans&Sutherland,
HP, IBM, Intel, InterGraph, Microsoft, Nvidia,
Silicon Graphics
Porque aprender OpenGL?
 Padrão gráfico para aplicações industriais,
entretenimento, visualização, etc.
 Opção independente de plataforma de
hardware
 Compete com DirectX (Direct3D)
 Utilizado para implementar conceitos como
Realidade Virtual e Aumentada
OpenGL como Sintetizador de
Imagens (Renderizador)
 Primitivas geométricas

pontos, linhas e polígonos
 Primitivas de Imagens
 Funciona como uma Máquina de Estados
 Renderização depende do ESTADO atual


cor, tipo de linha, escala, etc
As variáveis de controle têm valores default
 Não gerencia eventos de controle (mouse, exibição,
teclado, etc.)
Primitivas Geométricas
 Todas primitivas geométricas são especificadas por
vértices
GL_POINTS
GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
GL_POLYGON
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_QUADS GL_QUAD_STRIP
GL_TRIANGLE_FAN
APIs Relacionadas com
OpenGL
 AGL, GLX, WGL

“cola” entre OpenGL e o sistema de janelas
 GLU (OpenGL Utility Library)


parte de OpenGL
NURBS, tessellators, quadrics, etc
 GLUT (Graphics Library Utility Toolkit)


API para gereciamento de janelas portável
não é parte oficial de OpenGL
GLUT
 Biblioteca de software que se integra com
OpenGL (autor: Mark J. Kilgard - SGI)
 Habilita acesso aos eventos do sistema
operacional necessários em programas
interativos

mouse, teclado, display, etc.
 Utilizada nos livros que ensinam OpenGL e
CG com OpenGL
Filosofia de Projeto de GLUT
 Fácil de Programar
 Independente do sistema de janelas nativo
 Programas de tamanho pequeno e médio
 Não apresenta muitos recursos de interface
(apenas menus)
 Programação orientada a eventos
Programa
Aplicativo
Tecla Q
Gerenciador
de
Dispositivos
Click botão direito mouse
Tecla X
Movimento 30 pixels p/ direita do mouse
FILA DE EVENTOS
Rotinas
 Iniciam com prefixo glut
 (0,0) canto superior esquerdo da janela
 Incluir diretiva #include <GL/glut.h>
 Inicialização
glutInit( int *argc, char **argc)
 glutInitWindowPosition
 glutInitWindowSize

Rotinas
 Processamento de Eventos

void glutMainLoop( void )
 Gerenciamento de janelas


int glutCreateWindow( char *name )
void glutPostRedisplay( void )
 Registro de rotinas de callback




glutDisplayFunc
glutReshapeFunc
glutKeyboardFunc
glutMouseFunc
 Objetos Pré-definidos

glutSolidSphere, glutWireCube, glutSolidTeapot
Estrutura de um Programa
 Configura e cria a janela
 Initializa estado de OpenGL
 Registra as callback functions de GLUT
renderização
 redimensionamento
 entrada: teclado, mouse, etc.

 Chama laço principal de processamento
Programa Exemplo
int main( int argc, char** argv )
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_RGB |
GLUT_SINGLE);
initOpenGL();
initGLUT();
glutMainLoop();
return 1;
}
Inicialização OpenGL
void initOpenGL( void )
{
/* Cor default fundo preta */
glClearColor( 0, 0, 0, 0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
/* Cor default para objetos */
glColor3f( 1.0, 0.0, 0.0 );
}
Inicialização GLUT
void initGLUT( void )
{
glutInitWindowPosition( 200, 100 );
glutCreateWindow( "Exemplo Simples 1"
);
/* Registra as rotinas de CallBack */
glutDisplayFunc( desenhaCB );
glutKeyboardFunc( tecladoCB );
glutReshapeFunc( redesenhaCB );
glutMouseFunc( mouseCB );
}
Callback para Renderização
 Todos desenhos para a tela ficam nesta rotina
glutDisplayFunc( desenhaCB );
void desenhaCB( void )
{
}
/* Limpa buffer de cor */
glClear ( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_MODELVIEW );
glBegin(GL_POLYGON);
glVertex2i( 200, 200 );
glVertex2i( 200, 150 );
glVertex2i( 150, 150 );
glVertex2i( 150, 200 );
glEnd();
glFlush();
Callback de Teclado
 Todas os eventos de Teclado ficam nessa
função glutKeyboardFunc( tecladoCB );
void tecladoCB( unsigned char tecla, int x, int y )
{
switch( tecla ) {
case 'q': /* Encerra o programa */
case 'Q':
exit( 0 );
default:
printf("Opcao nao definida!\n");
}
}
Callback de Mouse
 Todas os eventos de mouse ficam nessa
função glutMouseFunc( mouseCB );
void mouseCB( int botao, int estado, int x, int y )
{
if ( botao == GLUT_LEFT_BUTTON )
glColor3ub(
(char) (rand()%256),
(char) (rand()%256),
(char) (rand()%256) );
glutPostRedisplay();
}
Analogia com Câmera e
Transformações
 Transformações de Projeção

ajusta a lente da câmera
 Transformações de Visualização

definem posição e orientação do volume de visualização
no universo
 Transformações de Modelagem

movem o modelo
 Transformações de Viewport

aumentam ou diminuem o tamanho da fotografia
Transformações em OpenGL
 Modelagem
 Visualização


Orientação da câmera
Projeção
 Animação
 Mapeamento para a tela
Tutorial de Transformações
Configurações
 Configurando o Dev C++



Copie a pasta que contém o Dev, no apps (p:),
para o Temp
Abra a pasta Dev-Cpp++_5.0\include\gl e copie
para dentro dela o arquivo glut.h disponível em
www/~fpms/multimidia
Rode o Dev
Configurações
 Copie o Projeto de
www/~fpms/multimidia/projeto.zip
 Descompacte o arquivo para o Temp
 Selecione a opção Open Project e a abra
Exercicio.dev
 Compile e rode
Exercício
 Para todas as questões

Envie as modificações necessárias no código exemplo para adquirir
o efeito desejado(apenas as funções que você alterou) e uma figura
do resultado
 A. Desenhe um quadrado centrado no (0,0,0) na cor azul

Observe este quadrado de cima(ver quadrado) e de lado(ver linha)
 B. Desenhe um cubo com centro no ponto (0,0,0) de lado
tamanho 10 sem estar preenchido(malha).
 C. Altere os parâmetros da câmera para ver o cubo de um
ângulo de 45 graus
Exercício
 D. Desenhe o mesmo cubo da letra anterior
preenchido
 E. Rotacione a câmera da letra C de 30 graus em
torno do eixo Z
 F. Translade o cubo da letra D de 50 em tono do
eixo X
 G. faça seu programa realizar a rotação da letra E
quando a tecla “x” for pressionada
Download

OPENGL - Centro de Informática da UFPE