Click here to load reader

aula sobre c++

  • View
    217

  • Download
    3

Embed Size (px)

DESCRIPTION

aulas sobre c++

Text of aula sobre c++

12.3. Deteminao da projeoA projecao usada pelo programa e determinada pela funcao OnResize:void OnResize (int width, int height){glViewport (0, 0, width, height);glMatrixMode (GL_PROJECTION);glLoadIdentity ();glOrtho (-12.0f, 12.0f, -12.0f, 12.0f, -12.0f, 12.0f);glMatrixMode (GL_MODELVIEW);glLoadIdentity ();}A primeira linha determina que a viewport usada pelo programa corresponde a janela inteira. Aprojecao usada pelo programa e uma projecao ortografica com as mesmas medidas em todos oseixos.Durante o ciclo de vida da aplicacao, esse evento e executado pelo menos uma vez (depois queo laco principal de execucao e iniciado).50UFF - Mestrado em Computacao Luis Valente12.4. AtualizaoA funcao OnUpdate atualiza a posicao do quadrado e verifica se existiu alguma colisao contraas bordas da janela (viewport, na verdade). Caso exista, a posicao do quadrado e corrigida e a suavelocidade e invertida (no eixo onde ocorreu a colisao). O quadrado possui aresta de tamanho iguala 4 unidades.void OnUpdate (){quad_x += vx; quad_y += vy; quad_z += vz;if (quad_x > 10.0f || quad_x < -10.0f)vx = - vx;if (quad_y > 10.0f || quad_y < -10.0f)vy = - vy;if (quad_z > 10.0f || quad_z < -10.0f)vz = - vz;glutPostRedisplay ();}A funcao glutPostRedisplay informa ao freeglut que e necessario redesenhar o conteudoda janela. Se essa funcao nao for usada, nao sera possivel visualizar as alteracoes.12.5. TecladoA funcao OnKeyPress recebe como parametros a tecla que foi pressionada e a posicao domouse no momento em que a tecla foi pressionada.void OnKeyPress (unsigned char key, int x, int y){switch (key){case 'q': case 'Q' :exit (0); break;}}Existem outras funcoes para se tratar eventos do teclado, que podem ser consultadas nadocumentacao do freeglut ou do GLUT.53

12.6. RenderizaoA funcao responsavel pela renderizacao inicia com a requisicao para que a tela e o z-buffersejam limpos.51UFF - Mestrado em Computacao Luis ValenteA seguir, a matriz identidade e carregada, para que o sistema de coordenadas seja reiniciadopara a origem.void OnRender (){glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity ();glTranslatef (quad_x, quad_y, quad_z);glColor3f (1.0f, 0.0f, 0.0f);glBegin (GL_QUADS);glVertex3f (2.0f, 2.0f, 0.0f);glVertex3f (-2.0f, 2.0f, 0.0f);glVertex3f (-2.0f, -2.0f, 0.0f);glVertex3f (2.0f, -2.0f, 0.0f);glEnd ();glutSwapBuffers ();}A seguir, e necessario posicionar o quadrado, o que e feito com o comando glTranslatef.O quadrado e, entao, especificado.A funcao glutSwapBuffers requisita que o buffer usado para as operacoes de renderizacaoseja exibido na tela.13. ConclusesOpenGL e uma API muito rica e cheia de recursos. Este trabalho aborda apenas uma parte doque poderia ser usado.Existem tutoriais e outros recursos para se aprender mais sobre OpenGL em varios lugares nainternet. Aqui estao alguns deles: Site oficial do OpenGL: http://www.opengl.org Nate Robins Programas interativos com demonstracao de varios conceitos sobreOpenGL: http://www.xmission.com/~nate/tutors NeHe Tutoriais variados sobre OpenGL: http://nehe.gamedev.net GameTutorials Varios tutoriais sobre OpenGL, com enfoque para programacao de jogos:http://www.gametutorials.com JOGL Biblioteca para uso OpenGL em Java: https://jogl.dev.java.net Dephi3D OpenGL e programacao 3D com Delphi: http://www.delphi3d.net52UFF - Mestrado em Computacao Luis Valente14. Referncias BibliogrficasOGL04 OpenGL, site oficial: http://www.opengl.org, 2004WrSw99 Wright, Richard S.; Sweet, Michael OpenGL SuperBible Second Edition, WaiteGroup Press, 1999NeDa97 Neider, Jackie; Davis, Tom OpenGL Programming Guide, 2nd Edition,Addison-Wesley, 1997FGLUT04 freeglut, site oficial: http://freeglut.sourceforge.net, 2004DEVIL04 DevIL, site oficial: http://www.imagelib.org, 2004

1. IntroduoOpenGL (Open Graphics Library) e uma biblioteca (API1) para Computacao Grafica 3D e 2Dque foi desenvolvida inicialmente por Silicon Graphics Inc. (SGI). Atualmente, e adminstrada pelaARB (Architecture Review Board)2. A ARB e uma entidade que congrega varios representantes daindustria, como SGI, Intel, NVIDIA e Sun Microsystems.A API do OpenGL oferece algumas primitivas basicas (como pontos, linhas, triangulos,quadrilateros e poligonos), operacoes para manipulacao do sistema de coordenadas e operacoes commatrizes (translacao, rotacao e escala) e efeitos como mapeamento de textura, entre outroscomandos.OpenGL foi projetado para ser utilizado em varias plataformas e sistemas operacionais, comoMac OS, OS/2, Unix, Windows, Linux, OPENStep e BeOS. Pode ser utilizado em diversosambientes de desenvolvimento de linguagens de programacao como Delphi, Visual Basic, C/C++,Java, Fortran e Python, entre outros. Devido a esse proposito, existem varias funcionalidades quenao estao disponiveis em OpenGL, porque sao dependentes da plataforma nativa. Entre essasfuncionalidades, encontram-se janelas (e interface grafica), fontes para texto e comandos parainteracao com o usuario (como processamento de eventos do teclado e mouse).A versao atual do OpenGL e 1.53. A biblioteca possui dois componentes principais: GL: Representa o nucleo do OpenGL, que agrega as funcoes principais. GLU: E uma biblioteca utilitaria, que possui funcoes diversas para quadrics, NURBS ematrizes, entre outras.Uma caracteristica importante de OpenGL e que o OpenGL e uma API de modo imediato(immediate mode). Em APIs de modo imediato, os comandos submetidos alteram o estado dohardware grafico assim que sao recebidos. O estado do hardware grafico representa um tipo deconfiguracao que esta em uso no momento, e como essa configuracao e aplicada internamente pelohardware. Por exemplo, uma aplicacao pode utilizar iluminacao em uma cena. Desta forma, diz-seque o estado de iluminacao esta ligado. Quando esse estado e ligado, o hardware e configuradointernamente para realizar uma serie de operacoes que tem a ver com essa funcionalidade.2. Usando OpenGLNo sistema operacional Windows, o OpenGL ja esta pronto para uso (em modo simulado, porsoftware, pelo menos). A implementacao da biblioteca esta contida em arquivos DLL (opengl32.dlle glu32.dll) no Windows e em arquivos .so (libGL.so, libGLU.so) no Linux.Para utilizar plenamente os recursos oferecidos pelo hardware com o OpenGL, e precisoinstalar o driver especifico da placa grafica. Esses drivers podem ser encontrados nos sites dosfabricantes dos chipsets da placa grafica (como NVIDIA4 ou ATI5). No Linux, uma das solucoes einstalar a Mesa3D6, que e uma implementacao nao-oficial da API do OpenGL. Alguns fabricantes(como a NVIDIA) oferecem drivers nativos para Linux, que podem ser obtidos no site da empresa.1 Application Programming Interface2 http://www.opengl.org/about/arb/3 A versao 2.0 ja esta sendo desenvolvida.4 http://www.nvidia.com5 http://www.ati.com6 http://www.mesa3d.org2UFF - Mestrado em Computacao Luis Valente2.1. Configurao inicialEsta secao contem instrucoes de configuracao do ambiente de desenvolvimento para criaraplicacoes com OpenGL.Grande parte dos compiladores C e C++ disponiveis ja possuem os arquivos necessarios para sedesenvolver programas com OpenGL. Entretanto, a versao do OpenGL que pode ser usada atravesdesses arquivos pode variar bastante. A versao que vem com o Visual C++ e 1.1, enquanto oMinGW (GCC para Windows) possui a versao 1.3.2.2. Visual C++Para usar o OpenGL com o Visual C++, e preciso incluir os seguintes arquivos nos programas:#include #include #include O arquivo gl.h possui as funcoes principais do OpenGL, enquanto o glu.h possui as funcoes dabiblioteca utilitaria.Os arquivos de ligacao com as DLLs sao dois: opengl32.lib e glu32.lib (caso se use a GLU).Esses arquivos podem ser incluidos nos projetos da seguinte forma: Visual C++ 6: Acesse o menu Projects e depois Settings. A seguir, acesse a abaLinker. No campo Object/library modules acrescente opengl32.lib glu32.lib (semaspas). Visual C++ 7 (.NET): Acesse o menu Project e depois Properties. No painel daesquerda, escolha a pasta Linker e depois Input. No campo Additional dependencies,acrescente opengl32.lib glu32.lib (sem aspas).E necessario incluir o arquivo principal do Windows (windows.h), antes dos arquivos doOpenGL ou erros de compilacao serao gerados.2.3. GCCPara usar o OpenGL com o GCC, e preciso incluir os seguintes arquivos nos programas:#include #include O arquivo gl.h possui as funcoes principais do OpenGL, enquanto o glu.h possui as funcoes dabiblioteca utilitaria.Os arquivos de ligacao com as DLLs podem ser especificados atraves dos parametros-lopengl32 e -lglu32 (caso se use a GLU), tanto em Windows quanto em Linux.2.4. ConvenesTodos os comandos do OpenGL seguem uma convencao, que pode ser observada na Figura 2.1.3UFF - Mestrado em Computacao Luis ValenteO comando retratado na figura possui as seguintes caracteristicas: Um prefixo que indica de qual parte da API o comando pertence. Alguns valores possiveissao gl (funcoes principais), glu (biblioteca utilitaria), wgl (funcoes especificas para Windows),glx (funcoes especificas para Unix/X11) e agl (funcoes especificas para Mac OS). O nome principal do comando. O exemplo da figura representa um comando para sealterar a cor atual. O numero de argumentos aceitos pela funcao. A funcao do exemplo aceita 3 argumentos. O tipo dos argumentos. No exemplo, o tipo dos argumentos e ponto flutuante. Dessaforma, a funcao aceita 3 numeros de ponto flutuante.Como um dos objetivos do OpenGL e ser independente de plataforma, sao definidos variostipos de dados, que sao descritos na tabela 1.Sufixo Tipo de dado Tipo definido no OpenGL Tipo correspondentena linguagem Cb inteiro 8 bits GLbyte signed chars inteiro 16 bits GLshort shorti inteiro 32 bits GLint, GLsizei int, longf ponto flutuante 32 bits GLfloat, GLclampf floatd ponto flutuante 64 bits GLdouble, GLclampd doubleub inteiro 8 bits sem sinal GLubyte, GLboolean unsigned charus inteiro 16 bits sem sinal GLushort unsigned shortui inteiro 32 bits sem sinal GLuint, GLenum, GLbitfield unsigned int, unsignedlong