felipe cavalcanti ferreira fernando valente kakimoto francisco paulo magalhães simões

26
Felipe Cavalcanti Ferreira Fernando Valente Kakimoto Francisco Paulo Magalhães Simões Thiago de Barros Lacerda

Upload: marty

Post on 06-Jan-2016

13 views

Category:

Documents


0 download

DESCRIPTION

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 ” - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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

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

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

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

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

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

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

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

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

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

Primitivas Geométricas

Todas primitivas geométricas são especificadas por vértices

GL_POLYGONGL_POLYGON

GL_TRIANGLE_STRIPGL_TRIANGLE_STRIP

GL_TRIANGLE_FANGL_TRIANGLE_FAN

GL_POINTSGL_POINTSGL_LINESGL_LINES

GL_LINE_LOOPGL_LINE_LOOPGL_LINE_STRIPGL_LINE_STRIP

GL_TRIANGLESGL_TRIANGLES

GL_QUADSGL_QUADS GL_QUAD_STRIPGL_QUAD_STRIP

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

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

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

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

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

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

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

Gerenciadorde

Dispositivos

Programa

Aplicativo

Tecla Q Click botão direito mouse Tecla X Movimento 30 pixels p/ direita do mouse

FILA DE EVENTOS

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

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)glutInitWindowPositionglutInitWindowSize

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

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

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

Estrutura de um Programa

Configura e cria a janela Initializa estado de OpenGL Registra as callback functions de GLUT

renderização redimensionamentoentrada: teclado, mouse, etc.

Chama laço principal de processamento

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

Programa Exemplo

int main( int argc, char** argv ){ glutInit( &argc, argv);glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);

initOpenGL();

initGLUT();glutMainLoop();return 1;

}

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

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

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

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

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

Callback para Renderização

Todos desenhos para a tela ficam nesta rotinaglutDisplayFunc( 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();

}

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

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

}

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

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();

}

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

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

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

Transformações em OpenGL

Modelagem Visualização

Orientação da câmera Projeção

Animação Mapeamento para a tela

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

Tutorial de Transformações

Page 23: Felipe Cavalcanti Ferreira Fernando Valente Kakimoto Francisco Paulo Magalhães Simõ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

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

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

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

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

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

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