Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça...

Post on 07-Apr-2016

213 views 1 download

Transcript of Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça...

Grupo:

Antônio InocêncioFrancisco ÍcaroFilipe AraújoGuilherme BarretoLeonardo Vilaça Márcio DiasThiago 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.

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

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

Primitivas geométricaspontos, linhas e polígonos

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

FuncionamentoFuncionamento

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

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

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

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

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

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

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

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

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

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

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

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

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?

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.