introdução prática à programação em opengl
TRANSCRIPT
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 1
Marcelo Walter - UFPE
Introdução Prática à Programaçãoem OpenGL
Marcelo Walter
2Marcelo Walter - UFPE
Objetivos
Demonstrar o suficiente de OpenGL, a fim deque você possa escrever um programa decomputação gráfica interativo com objetos3D
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 2
3Marcelo Walter - UFPE
OpenGL…
Permite criar programas interativos queproduzem imagens coloridas de objetos emmovimento
4Marcelo Walter - UFPE
Exemplos Simples
Worms• Bidimensional (2D)
Gears• Tridimensional (3D)
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 3
5Marcelo Walter - UFPE
Características Principais
Início em 1992• Projetada para aplicações gráficas interativas 2D e 3D
Descendente de GL (Graphics Library - SGI)Controlada pelo
• Consórcio de indústrias
• 3DLabs, ATI, Discreet, Evans&Sutherland, Intel, Nvidia,SGI, Sun
• … creation of open standard APIs to enable theauthoring and playback of dynamic media on a widevariety of platforms and devices
6Marcelo Walter - UFPE
Versão atual 3.0 (agosto 2008)A partir da versão 1.4 incluiu OpenGL
Shading Language• Programação em Hardware
Linux: MESA (www.mesa3d.org) FREE
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 4
7Marcelo Walter - UFPE
Família
Embedded systems
8Marcelo Walter - UFPE
Mais informação www.opengl.org
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 5
9Marcelo Walter - UFPE
Livros
OpenGL ProgrammingGuide (Woo, Neider,Davis - Addison-Wesley )
Interactive ComputerGraphics: A Top-DownApproach with OpenGL(E. Angel - Addison-Wesley)
http://www.opengl.org/resources/code/samples/redbook/
10Marcelo Walter - UFPE
Livros
OpenGL ExtensionsGuide (Eric Lengyel)
Opengl ShadingLanguage (Randi J.Rost)
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 6
11Marcelo Walter - UFPE
Livros
OpenGL Programming forthe X Window System
OpenGL GameProgramming (Astle,Hawkins, LaMothe)
12Marcelo Walter - UFPE
Porque aprender OpenGL?
Padrão gráfico para aplicações industriais,entretenimento, visualização, etc.
Opção independente de plataforma dehardware
Compete com DirectX (Direct3D)Aprender conceitos de CG
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 7
13Marcelo Walter - UFPE
OpenGL como Sintetizador deImagens (Renderizador)
Primitivas geométricas• pontos, linhas e polígonos
Primitivas de ImagensRenderizaçã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)
14Marcelo Walter - UFPE
Formato dos Comandos emOpenGL
glVertex3fv( v )
Número decomponentes
2 - (x,y) 3 - (x,y,z)4 - (x,y,z,w)
Tipo de Dadob - byteub - unsigned bytes - shortus - unsigned shorti - intui - unsigned intf - floatd - double
Vector
omit “v” forscalar form
glVertex2f( x, y )
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 8
15Marcelo Walter - UFPE
Primitivas Geométricas de OpenGL
Todas primitivas geométricas são especificadas porvértices
GL_QUAD_STRIP
GL_POLYGON
GL_TRIANGLE_STRIPGL_TRIANGLE_FAN
GL_POINTSGL_LINES
GL_LINE_LOOPGL_LINE_STRIP
GL_TRIANGLES
GL_QUADS
16Marcelo Walter - UFPE
Exemplo Simples
void desenhaRhombus( GLfloat color[] ){
glBegin( GL_QUADS ); glColor3fv( color ); glVertex2f( 0.0, 0.0 ); glVertex2f( 1.0, 0.0 ); glVertex2f( 1.5, 1.118 ); glVertex2f( 0.5, 1.118 ); glEnd();
}
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 9
17Marcelo Walter - UFPE
Pipeline deVisualização Modeling
Transformation
ViewingTransformation
ProjectionTransformation
Lighting
3D Geometric Primitives
Image
Clipping
ScanConversion
1
2
3
18Marcelo Walter - UFPE
Transformações em OpenGL
ModelagemVisualização
• Orientação da câmera
• Projeção
AnimaçãoMapeamento para a tela
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 10
19Marcelo Walter - UFPE
Analogia com Câmera
3D é como tirar fotografias (muitas!)
câmera
tripé modelo
volumede visualização
20Marcelo Walter - UFPE
Analogia com Câmera eTransformaçõ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
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 11
21Marcelo Walter - UFPE
APIs Relacionadas com OpenGL
AGL, GLX, WGL• “cola” entre OpenGL e o sistema de janelas
GLU (OpenGL Utility Library)GLUT (Graphics Library Utility Toolkit)
22Marcelo Walter - UFPE
GLU (Graphics Utility Library)
Conjunto de rotinas utilizadas freqüentemente• Construídas a partir de comandos OpenGL
Rotinas para:• Manipulação de projeções
• Desenho de superfícies quádricas
• NURBS
• Manipulação de superfícies poligonais
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 12
23Marcelo Walter - UFPE
GLUT
Biblioteca de software que se integra comOpenGL (autor: Mark J. Kilgard - SGI)
Habilita acesso aos eventos do sistemaoperacional necessários em programasinterativos• mouse, teclado, display, etc.
Utilizada nos livros que ensinam OpenGL eCG com OpenGL
24Marcelo Walter - UFPE
Filosofia de Projeto de GLUT
Fácil de ProgramarIndependente do sistema de janelas nativoProgramas de tamanho pequeno e médioNão apresenta muitos recursos de interface
(apenas menus)Programação orientada a eventos
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 13
25Marcelo Walter - UFPE
Programação Interativa
Programas gráficos são na maioria dos casosinterativos• Usuário controla a execução do programa
Controle é executado via dispositivos deentrada (mouse, teclado, etc.)
2 maneiras básicas para implementação• Amostragem
• Eventos
26Marcelo Walter - UFPE
Eventos
Um gerenciador monitora embackground a ocorrência de eventos eos coloca numa fila de eventos
Evento: mudança no estado dodispositivo causada pela ação dousuário
Programa principal, à sua conveniência,verifica a fila de eventos
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 14
27Marcelo Walter - UFPE
Primeiro evento da fila é removidoControle da execução é transferido para
execução de uma rotina associada aoevento
Se a fila estiver vazia, programaprincipal segue execução (rotina idle)
Exemplos de eventos: click do mouse,tecla pressionada, janelaredimensionada, etc.
28Marcelo Walter - UFPE
Gerenciadorde
Dispositivos
Programa
Aplicativo
Tecla Q Click botão direito mouse Tecla X Movimento 30 pixels p/ direita do mouse
FILA DE EVENTOS
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 15
29Marcelo Walter - UFPE
Rotinas
Iniciam com prefixo glut(0,0) canto superior esquerdo da janelaIncluir diretiva #include <GL/glut.h>Inicialização
•glutInit( int *argc, char **argc)•glutInitWindowPosition•glutInitWindowSize
30Marcelo Walter - UFPE
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
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 16
31Marcelo Walter - UFPE
Estrutura de um Programa
Configura e cria a janelaInitializa estado de OpenGLRegistra as callback functions de GLUT
•renderização•redimensionamento•entrada: teclado, mouse, etc.
Chama laço principal de processamento
32Marcelo Walter - UFPE
Programa Exemplo
int main( int argc, char** argv ){ glutInit( &argc, argv);glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
initOpenGL();
initGLUT();
glutMainLoop();return 1;
}
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 17
33Marcelo Walter - UFPE
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 );}
34Marcelo Walter - UFPE
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 );}
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 18
35Marcelo Walter - UFPE
Callback para RenderizaçãoTodos 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();
}
36Marcelo Walter - UFPE
Callback de Teclado
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");}
}
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 19
37Marcelo Walter - UFPE
Callback de Mouse
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();
}
38Marcelo Walter - UFPE
Callback de Redimensionamento
glutReshapeFunc( redesenhaCB );void redesenhaCB( int w, int h ){
glViewport( 0, 0, w, h );
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho( 0, (GLfloat) w, 0, (GLfloat) h , -1.0, 1.0
);
}
An Interactive Introduction to OpenGLProgramming
SIGGRAPH 2001 - Los Angeles 20
Marcelo Walter - UFPE
Compilar e executar primeiroexemplo
http://www.cin.ufpe.br/~marcelow
Ensino -> Processamento Gráfico -> GLUT
Marcelo Walter - UFPE
Fazer os exercícios do final dapágina