A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Felipe Cavalcanti Ferreira Fernando Valente Kakimoto

Apresentações semelhantes


Apresentação em tema: "Felipe Cavalcanti Ferreira Fernando Valente Kakimoto"— Transcrição da apresentação:

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 Primitivas Geométricas
Todas primitivas geométricas são especificadas por vértices GL_LINE_STRIP GL_LINE_LOOP GL_POLYGON GL_LINES GL_POINTS GL_TRIANGLE_STRIP GL_QUAD_STRIP GL_TRIANGLES GL_QUADS GL_TRIANGLE_FAN

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 Programa Aplicativo Gerenciador de Dispositivos FILA DE EVENTOS
Tecla Q Click botão direito mouse Tecla X Movimento 30 pixels p/ direita do mouse 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 Gerenciamento de janelas
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 ); /* 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çã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(); }

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


Carregar ppt "Felipe Cavalcanti Ferreira Fernando Valente Kakimoto"

Apresentações semelhantes


Anúncios Google