grupo: antônio inocêncio francisco Ícaro filipe araújo guilherme barreto leonardo vilaça...
TRANSCRIPT
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.