900 likes | 1.04k Views
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.
E N D
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 • Bibliotecas Gráficas • Sistemas baseados em janelas • Allegro • OpenGL
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
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
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
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
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)
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/
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)
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
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)
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
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
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
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
Selecionar devpaks.org Community Devpaks e, em seguida, acionar o botão Check for updates AllegroXI • Instalação de Allegro no Dev-C++ II
Selecionar Allegro e, em seguida, acionar o botão Download selected AllegroXII • Instalação de Allegro no Dev-C++ III
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)
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
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
… para adicionar o arquivo liballeg.a ao contexto do processo de compilação AllegroXVI • Instalação de Allegro no Dev-C++ VII
AllegroXVII • Instalação de Allegro no Dev-C++ VIII • Compilação e execução do projeto de teste (F9) • Resultado satisfatório
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_hLargura e altura virtual, respectivamente
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)
AllegroXX • Bitmaps II • Tamanho do bitmap em memória void set_color_depth(int depth); • Default8 • Chamada antes de set_gfx_mode
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 b0 a 255
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);
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);
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
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();
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
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
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 */
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)
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)
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 */
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()
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
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
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
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
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)
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
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);
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.
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
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/
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
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
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