28
Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Embed Size (px)

Citation preview

Page 1: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Grupo:

Antônio InocêncioFrancisco ÍcaroFilipe AraújoGuilherme BarretoLeonardo Vilaça Márcio DiasThiago Gomes

Page 2: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

O que é OpenGL?O que é OpenGL?Open Graphics Library

Uma interface do software com o hardware gráficoCamada de abstração entre o programa de aplicação e o hardwareOpenGL não é uma linguagem de programação, é uma poderosa e sofisticada API (Application Programming Interface) para criação de aplicações gráficas 2D e 3D.

Page 3: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Projetada para aplicações gráficas interativas 2D e 3D

Independente do sistema operacional

Permite criar programas interativos que produzem imagens coloridas de objetos em movimento

Opção independente de plataforma de hardware

CaracterísticasCaracterísticas

Page 4: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

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

ImportânciaImportância

Page 5: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Primitivas geométricaspontos, linhas e polígonos

Primitivas de ImagensNão gerencia eventos de controle (mouse, exibição, teclado, etc)

FuncionamentoFuncionamento

Page 6: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Primitivas GeométricasPrimitivas Geométricas

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

GL_POLYGONGL_POLYGON

GL_TRIANGLE_STRIPGL_TRIANGLE_STRIPGL_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: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

glVertex3fv( v )

Numero de Numero de ComponentesComponentes

Tipo de DadosTipo de Dados

VectorVector

2 - (x,y) 3 - (x,y,z)4 - (x,y,z,w)

b - byteub - unsigned bytes - shortus - unsigned shorti - intui - unsigned intf - floatd - double

omit “v” forscalar form

glVertex2f( x, y )

Formato dos Comandos em Formato dos Comandos em OpenGLOpenGL

Page 8: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

AGL, GLX, WGL“cola” entre OpenGL e o sistema de janelas

GLU (OpenGL Utility Library)parte de OpenGLNURBS, tessellators, quadrics, etc

GLUT (Graphics Library Utility Toolkit)API para gereciamento de janelas portávelnão é parte oficial de OpenGL

APIs RelacionadasAPIs Relacionadas

Page 9: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

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.

GLUTGLUT

Page 10: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

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*

Filisofia de Projeto de GLUTFilisofia de Projeto de GLUT

Page 11: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Iniciam com prefixo glut(0,0) canto superior esquerdo da janelaIncluir diretiva #include <GL/glut.h>Inicialização

glutInit( int *argc, char **argc)glutInitWindowPositionglutInitWindowSize

RotinasRotinas

Page 12: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Processamento de Eventosvoid glutMainLoop( void )

Gerenciamento de janelasint glutCreateWindow( char *name )void glutPostRedisplay( void )

Registro de rotinas de callbackglutDisplayFuncglutReshapeFuncglutKeyboardFuncglutMouseFunc

Objetos Pré-definidosglutSolidSphere, glutWireCube, glutSolidTeapot

RotinasRotinas

Page 13: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Configura e cria a janelaInitializa estado de OpenGLRegistra as callback functions de GLUT

renderizaçãoredimensionamentoentrada: teclado, mouse, etc.

Chama laço principal de processamento

Estrutura de um ProgramaEstrutura de um Programa

Page 14: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Windows já possui uma implementação do OpenGLNecessário utilizar um sistema de janelas no desenvolvimento das aplicações

GLUT Baixar o GLUT em:

http://www.cin.ufpe.br/~mdc/GLUT.rar

Descompactar o GLUT.rar em algum diretório• C:\Temp\

Após descompactar, definir os diretórios de include e library no Visual StudioPara definir tais diretórios, deve-se seguir:• Menu Tools -> Options• Selecionar Projects -> VC++ Directories

Configurando o GLUTConfigurando o GLUT

Page 15: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 16: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Configurando o GLUTConfigurando o GLUTPara o diretório de include:

Selecionar a opção Include filesClicar no ícone do diretório e indicar o diretório include que se encontra abaixo do

diretório GLUT, previamente descompactadoPara o diretório de libraries:

Selecionar a opção Library filesClicar no ícone do diretório e indicar o diretório lib que se encontra abaixo do

diretório GLUT, previamente descompactadoApós definir os diretórios de include e library, clicar em OKGLUT já está devidamente configurado para o desenvolvimento de aplicações OpenGL com sistema de janelas

Page 17: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 18: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 19: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 20: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Criando um projeto

No menu File -> New -> Project...Escolher Visual C++ Projects -> Win32 -> Win32 -> Console ProjectSelecionar o nome do projeto, por exemplo,OpenGL CubeSelecionar o nome da solução, por exemplo, OpenGL AppsSelecionar o caminho do projeto, por exemplo, C:\Clicar em OKClicar em Application Setings -> Empty, para criar um projeto vazioClicar em Finish

Criando uma AplicaçãoCriando uma Aplicação

Page 21: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 22: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 23: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 24: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Após a criação do projeto, é necessário copiar o arquivo glut32.dll e o freeglut.dll para a pasta do projeto

baixar em http://www.cin.ufpe.br/~rsm2/glut2.rar

Adicionar um arquivo que conterá a função main e o código da aplicação OpenGL

Clicar na pasta de fontes do projeto com o botão direito e seleciona Add -> Add New Item...

Selecionar a opção C++ File (.cpp) e fornecer o nome do arquivo

Clicar em Open e o arquivo criado será aberto no editor

Configurando o GLUTConfigurando o GLUT

Page 25: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 26: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes
Page 27: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Resolva as questões abaixo baseadas neste código: http://www.cin.ufpe.br/~mdc/questao1.txt

1 - Caso você tente redimensionar a janela, observará que o fundo da tela não será "limpo" e que a posição do quadrado é variável dentro da janela. Porque ocorrem estas duas situações? Como corrigi-las? 2 - Tente desenhar outros objetos, ao invés de um quadrado um triângulo por exemplo. 3 - Vamos supor que você queira mudar interativamente a posição onde o quadrado é desenhado via teclado, ou seja, suponha que pressionando-se determinada tecla o quadrado deva mover-se 20 pixels acima e à direita da posição corrente. Como você faria isto? 4 - O clique do mouse na verdade causa 2 mudanças de cor em seguida, muito rápidas. Porque isto acontece? Como você mudaria o código acima para a cor do quadrado mudar somente uma vez quando o mouse é pressionado?

Page 28: Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes

Resolva as questões abaixo baseadas neste código: http://www.cin.ufpe.br/~mdc/segundaquestao

1 - Faca com que os cubos girem em sentido contrários

2 – Mude a posicao dos cubos para que eles girem de cabeca para baixo e que estejam bem mais distante que no inicio.