1 / 26

Felipe Cavalcanti Ferreira Fernando Valente Kakimoto Francisco Paulo Magalhães Simões

Felipe Cavalcanti Ferreira Fernando Valente Kakimoto Francisco Paulo Magalhães Simões Thiago de Barros Lacerda. O que é ?. Open G raphics L ibrary “ Uma interface de software com o hardware gráfico ”

marty
Download Presentation

Felipe Cavalcanti Ferreira Fernando Valente Kakimoto Francisco Paulo Magalhães Simões

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. Felipe Cavalcanti Ferreira Fernando Valente Kakimoto Francisco Paulo Magalhães Simões Thiago de Barros Lacerda

  2. 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

  3. 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

  4. 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

  5. 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.)

  6. GL_LINES GL_POLYGON GL_LINE_STRIP GL_LINE_LOOP GL_POINTS GL_TRIANGLES GL_QUADS GL_TRIANGLE_FAN GL_TRIANGLE_STRIP GL_QUAD_STRIP Primitivas Geométricas • Todas primitivas geométricas são especificadas por vértices

  7. 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

  8. 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

  9. 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

  10. Tecla Q Click botão direito mouse Tecla X Movimento 30 pixels p/ direita do mouse Programa Aplicativo Gerenciadorde Dispositivos FILA DE EVENTOS

  11. 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

  12. 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

  13. 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

  14. Programa Exemplo int main( int argc, char** argv ) { glutInit( &argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE); initOpenGL(); initGLUT(); glutMainLoop(); return 1; }

  15. 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 ); }

  16. 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 ); }

  17. 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(); }

  18. 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"); } }

  19. Callback de Mouse • Todas os eventos de mouse ficam nessa funçãoglutMouseFunc( 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(); }

  20. 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

  21. Transformações em OpenGL • Modelagem • Visualização • Orientação da câmera • Projeção • Animação • Mapeamento para a tela

  22. Tutorial de Transformações

  23. 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

  24. 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

  25. 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

  26. 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

More Related