1 / 90

Técnicas de Programação

Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com. Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com. Carga Horária: 60 horas. Carga Horária: 60 horas. Técnicas de Programação. Programação Gráfica. Roteiro.

judith
Download Presentation

Técnicas de Programação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prof.:José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com Prof.:José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com Carga Horária:60 horas Carga Horária:60 horas Técnicas de Programação Programação Gráfica

  2. Roteiro • Bibliotecas Gráficas • Sistemas baseados em janelas • Allegro • OpenGL

  3. Bibliotecas Gráficas • Interfaceamento de software para dispositivos de hardware • Rapidez e portabilidade para diferentes sistemas operacionais • Criação de objetos gráficos com qualidade • Inclusão de recursos avançados para animação, processamento de imagens e geração de texturas

  4. Sistemas baseados em Janelas I • Janela  Principal meio de interação homem-máquina em ambientes de computação modernos • Divisão da tela em contêineres de informação eventualmente superpostos • Unidades controladas por aplicações que as mantêm constantemente atualizadas

  5. Sistemas baseados em Janelas II • Evento  Meio de comunicação do processo interativo usuário-sistema de janelas à aplicação • Exemplos de eventos • Ativação do mouse • Redimensionamento de uma janela • Tratamento  Via rotinas callback da aplicação • Exemplos de eventos • Atualização do conteúdo de uma janela • Deslocamento de um objeto no espaço da janela

  6. Sistemas baseados em Janelas III • Existência de uma API distinta para cada Sistema de Janelas • MS Windows, X Windows, Mac OS/2 • Portabilidade • Camada de interfaceamento com diversos sistemas de janelas  API única • Exemplo • GLUT

  7. AllegroI • Biblioteca para a programação de jogos (em especial jogos 2D) e multimídia, destinada a desenvolvedores em C/C++ e distribuída livremente • Vantagens • Facilidade de uso e desenvolvimento de aplicações • Portabilidade • Não restrita apenas a plataforma PC/Windows (ao contrário do DirectX, pode ser executada em DOS, Windows, Unix - Linux, FreeBSD, Irix, Solaris, Darwin, QNX, BeOS e MacOS X)

  8. AllegroII • Concorrentes diretos • DirectX, OpenGL, Java3D/JMF • Links • Site Oficial www.talula.demon.uk/allegro • Allegro Vivace www.canvaslink.com/gfoot/vivace • WinAllegro www.casema.net/~berryfra/winallg.htm www.canvaslink.com/gfoot/winallegro/

  9. AllegroIII • Conjunto de funções para acesso a diferentes periféricos • Processamento gráfico (bitmap/ 2D/ 3D/ animação, drivers), entrada (via teclado, mouse e joystick) e temporizadores • Processamento de áudio (sons, músicas) • Aritmética de vírgula fixa e flutuante • Gerência de arquivos • Interfaceamento gráfico com o usuário (GUI - Graphical User Interface)

  10. AllegroV • Principais Características I • Primitivas Gráficas • Pontos, retas, círculos, elipses • Sprites • Polígonos (sólidos, texturizados, transparentes) • Texto em modo gráfico • Animação

  11. AllegroVI • Principais Características II • Som I • Midi • Suporte a MIDI nativo (com até 64 sons simultâneos) • Controle e resposta dinâmica a eventos MIDI • music note on, note off, main volume, pan, pitch bend, and program change • Suporte a patches GM (general MIDI) • Suporte a patches wavetable • SF2 (Sound Font 2) e GUS (Gravis UltraSound)

  12. AllegroVII • Principais Características III • Som II • Wave • Suporte nativo a formatos WAV e VOC • Streaming • Recursos para alteração de volume, pan, pitch, etc., enquanto reproduzindo áudio

  13. AllegroVIII • Principais Características IV • Interface gráfica simples para diálogos e seletor de arquivos • Aritmética de vírgula fixa e rotinas trigonométricas, tabelas trigonométricas pré-calculadas, manipulação 3D de vetores, matrizes e quaternions (translação, rotação, escalamento, projeção) • Gerência de eventos de teclado, mouse, joystick

  14. AllegroIX • Principais Características IV • Suporte a arquivos de configuração e arquivos de dados comprimidos • Temporizadores de alta resolução • Disponibilidade de diversos add-ons

  15. AllegroX • Instalação de Allegro no Dev-C++ I • Download e Instalação da versão mais recente do Dev-C++ • Execução do Dev-C++, acesso ao menu Tools  Check for Updates/Packages, seleção do servidor devpaks.org Community Devpaks(no campo Select devpak server) e acionamento do botão Check for Updates • Na lista de pacotes apresentada, seleção e download do pacote Allegro DOWNLOAD

  16. Selecionar devpaks.org Community Devpaks e, em seguida, acionar o botão Check for updates AllegroXI • Instalação de Allegro no Dev-C++ II

  17. Selecionar Allegro e, em seguida, acionar o botão Download selected AllegroXII • Instalação de Allegro no Dev-C++ III

  18. AllegroXIII • Instalação de Allegro no Dev-C++ IV • Após a instalação (automática) do pacote, criação de um novo projeto (Menu File  New  Project) do tipo Windows application • Geração de um arquivo com comandos básicos para um aplicativo deste tipo pelo Dev-C++, o qual deverá ser ignorado e excluído (Allegro tem seu próprio modo de abrir janelas)

  19. AllegroXIV • Instalação de Allegro no Dev-C++ V • Criação de um novo fonte dentro do projeto recém-aberto (Ctrl+N) e cópia de um código de teste (vide slide 30) • No menu Project  Project options, acesso à aba Parameters e ativação do botão Add Library or Object, para a inclusão do arquivo liballeg.a (C:\Dev-Cpp\lib\) • Surgimento do arquivo adicionado no campo Linker da referida aba

  20. Selecionar Project Options e, em seguida, na aba Parameters, acionar o botão Add Library or Object Código de teste inserido no projeto previamente criado AllegroXV • Instalação de Allegro no Dev-C++ VI

  21. … para adicionar o arquivo liballeg.a ao contexto do processo de compilação AllegroXVI • Instalação de Allegro no Dev-C++ VII

  22. AllegroXVII • Instalação de Allegro no Dev-C++ VIII • Compilação e execução do projeto de teste (F9) • Resultado satisfatório

  23. AllegroXVIII • Modo Gráfico • Especificação antes do início do desenho int set_gfx_mode (int card, int w, int h, int v_w, int v_h); na qual: card Usualmente GFX_AUTODETECT, GFX_AUTODETECT_FULLSCREENouGFX_AUTODETECT_WINDOWED w e h Largura e altura, respectivamente v_w e v_hLargura e altura virtual, respectivamente

  24. AllegroXIX • Bitmaps I • Desenho sobre estruturas denominadas BITMAPS • Tela é um BITMAP especial denominado screen • Possibilidade de criação de BITMAPS adicionais BITMAP *bmp = create_bitmap(320, 200); • Tamanho do bitmap em memória  Dependência do modelo de cor utilizado (em bits/pixel)

  25. AllegroXX • Bitmaps II • Tamanho do bitmap em memória void set_color_depth(int depth); • Default8 • Chamada antes de set_gfx_mode

  26. AllegroXXI • Cores • Modelo dependente do modo gráfico • Representação da cor a partir de um parâmetro inteiro • Uso da rotina int makecol(int r, int g, int b); • Faixa de valores das componentes r, g e b0 a 255

  27. AllegroXXII • Protótipos de algumas primitivas gráficas I void putpixel(BITMAP *bmp, int x, int y, int color); void vline(BITMAP *bmp, int x, int y1, int y2, int color); void hline(BITMAP *bmp, int x1, int y, int x2, int color); void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);

  28. AllegroXXIII • Protótipos de algumas primitivas gráficas void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color); void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); void circle(BITMAP *bmp, int x, int y, int radius, int color); void circlefill(BITMAP *bmp, int x, int y, int radius, int color);

  29. AllegroXXIV • Periféricos de Entrada • Chamada da rotina de configuração apropriada • Teclado  install_keyboard() • Mouse install_mouse() • Joystick  install_joystick() • Teclado • Leitura com ou sem espera • Possibilidade de instalação de rotinas callback

  30. AllegroXXV • Exemplo #include <stdio.h> #include <allegro.h> int main(void) { int i; allegro_init(); install_keyboard(); set_color_depth (16); if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n", allegro_error); return 1; } for (i = 0; i < 64000; i++) { putpixel(screen, rand() % SCREEN_W, rand() % SCREEN_H, makecol (rand () % 256,rand () % 256,rand () % 256)); } readkey(); return 0; } END_OF_MAIN();

  31. AllegroXXVI • Animação I • Necessidade de movimentação de objetos em jogos • Recursos • Temporizadores(timers) • Bufferização dupla (double-buffering) • vsync() • Sincronização da renderização das imagens com o refresh rate do monitor • Útil em situações de falta de sincronismo

  32. AllegroXXVII • Animação II • Recursos • Sprites • Em computação gráfica, sprite é uma imagem ou animação 2D integrável a uma cena • Blitting • Método para desenho de sprites no qual apenas as cores não transparentes são mostradas • Pré-compilação de um bmp em um código que contém um conjunto de operações de escrita na memória da tela que incluem apenas cores não transparentes

  33. AllegroXXVIII • Configuração do Som • Início  Uso da função install_sound() if(install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0) { /* Mensagem de Erro */ } • Ajuste do volume  Uso da função set_volume set_volume(255,255); /* som digital e música - faixa 0 a 255 */

  34. AllegroXXIX • Configuração do Modo Gráfico • Início  Uso da função set_gfx_mode() #define MAX_X 640 #define MAX_Y 480 (...) if(set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0) { /* Mensagem de Erro */ } MAX_X e MAX_Y Resolução a ser usada (neste exemplo, 640 x 480)

  35. AllegroXXX • Configuração do Modo Gráfico II • Definição do número de cores  Uso da função set_color_depth(numero) set_color_depth(8); /* 256 cores */ set_color_depth(16); /* 65536 cores */ set_color_depth(24); /* 32milhõesdecores */ set_color_depth(32); /* 4 bilhões de cores */ • Chamada a ser feita antes da chamada à função set_gfx_mode() • numero indica a quantidade de bits • Default 8 (i.e., 256 cores)

  36. AllegroXXXI • Uso de Áudio I • Som digital WAV ou VOC • Música MID • Carregamento de som digital ou música antes de tocá-lo SAMPLE *som1,*som2; /* SAMPLE = arquivos de som digital */ MIDI *musica;/* MIDI=arquivosdemúsica */ som1 = load_wav(“arquivo.wav”); /* arquivos wav */ som2 = load_voc(“arquivo.voc”); /* arquivos voc */ musica = load_midi(“arquivo.mid”); /* para arquivos mid */

  37. AllegroXXXII • Uso de Áudio II • Reprodução de música  Uso da função play_midi() /* Exemplo */ MIDI *mus; musica = load_midi(“mus.mid”); play_midi(mus,TRUE);/*reproduçãoem loop */ • musica Arquivo MIDI a ser carregado • Segundo argumento  Indicação de reprodução em loop ou não • Encerramento de reprodução de música  Uso da função stop_mid()

  38. OpenGLI • Desenvolvimento de software para hardware gráfico nos anos 80 • Tarefa desafiadora • Customização das interfaces e drivers para cada parte do hardware • Estratégia despendiosa • Duplicação de esforço

  39. OpenGLII • Liderança em gráficos 3D para estações de trabalho no início dos anos 90 • Silicon Graphics Indy (SGI) • IRIS GL Estado da arte e padrão industrial de facto • PHIGS (Programmer's Hierarchical Interactive Graphics System) API padrão para renderização de gráficos computacionais 3D • Candidato a padrão para gráficos 3D no início dos anos 90

  40. OpenGLIII • Liderança em gráficos 3D para estações de trabalho no início dos anos 90 • Silicon Graphics Indy (SGI) • IRIS GL vs PHIGS • Facilidade de uso • PHIGS considerado difícil de usar • Suporte à renderização em modo imediato • PHIGS considerado obsoleto em termos de funcionalidade

  41. OpenGLIV • Competidores da SGI Sun Microsystems, Hewlett-Packard e IBM • Comercialização de hardware 3D com suporte de extensões feitas ao padrão PHIGS • Enfraquecimento da SGI com o aumento do número de desenvolvedores de hardware para processamento gráfico 3D no mercado de consumo

  42. OpenGLV • Transformação do padrão IrisGL em um padrão aberto • Estratégia de competição • Influência nas tendências de mercado • Origem do OpenGL • Padrão controlado por um consórcio de empresas Architecture Review Board (ARB)

  43. OpenGLVI • Architecture Review Board (ARB) • Membros votantes 3DLabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI e Sun Microsystems • Colaboradores Evans & Sutherland, Imagination Technologies, Matrox, Quantum 3D, S3 Graphics, Spinor GmbH, Tungsten Graphics, Xi Graphics

  44. OpenGLVII • Interface de software para hardware gráfico, i.e. API (Application Programming Interface) • Recursos gráficos disponíveis I • Modos de desenho de pontos; • Ajuste de largura de linhas; • Aplicação de transparência; • Ativação/desativação de serrilhamento (aliasing);

  45. OpenGLVIII • Recursos gráficos disponíveis II • Mapeamento de superfícies com texturas; • Seleção de janela de desenho; • Manipulação de fontes/tipos de iluminação e sombreamento; • Transformação de sistemas de coordenadas; • Transformações em perspectiva; e • Combinação de imagens (blending), dentre outras características.

  46. OpenGLIX • Reconhecimento e aceitação como API padrão para o desenvolvimento de aplicações gráficas 3D em tempo real • Suporte da maioria dos sistemas operacionais • Uso com diversas linguagens de programação, e.g., Ada, C/C++, Fortran, Python, Perl, Java

  47. OpenGLX • Aspectos vantajosos para desenvolvedores I • Estabilidade • Escalabilidade  De equipamentos portáteis a supercomputadores • Confiabilidade e portabilidade  Consistência entre plataformas (cross-platforms) • Disponibilidade de documentação http://www.opengl.org/documentation/

  48. OpenGLXI • Aspectos vantajosos para desenvolvedores II • Facilidade de uso • Constante evolução (sob o controle do ARB) • Uso de extensões por fabricantes de hardware gráfico a fim de prover meios de utilização das características do hardware pelo programa

  49. OpenGLXII • OpenGL Biblioteca de funções gráficas e de modelagem 2D e 3D I • Estabelecimento de uma interface com o hardware gráfico, independente da plataforma, para o programador • Aproximadamente 250 comandos e funções • Cerca de 200 do CoreOpenGLe 50 da OpenGL Utility Library (GLU) • Especificação dos objetos e operações necessárias à produção de programas interativos com imagens coloridas e animação 3D 

  50. OpenGLXIII • OpenGL Biblioteca de funções gráficas e de modelagem 2D e 3D II • NÃO é uma linguagem de programação • API (Application Programming Interface) sofisticada e poderosa  Criação de aplicações gráficas 2D/ 3D • NÃO é dotada de funções para gerenciamento de janelas, interação com o usuário ou arquivos de E/S

More Related