SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Introdução à Computação Gráfica

             Aula – Introdução à OpenGL

                    Herbet Ferreira
                    herbet@di.ufpb.br


08/04/2010                                1
Introdução à OpenGL
• Open Graphic Library (http://www.opengl.org)

• Biblioteca de rotinas gráficas de modelagens 2D e 3D, extremamente
  portável e rápida;

• Introduzida em 1992 pela Silicon Graphics;
      – Conceber API gráfica independente do dispositivo de exibição


• Gerenciado por um consórcio formado pelas principais empresas da área:
      – 3Dlabs, Apple, Nvidia, SGI e SUN;
      – Frequentes revisões proporcionam a incorporação das mais recentes técnicas
        e da evoluação do hardware;


• Todas as rotinas são implementadas em C/C++
08/04/2010                                                                           2
Características
• Recursos gráficos:
      – Desenhos de primitivas:
              • Pontos, Linhas e Polígonos;
      –      Iluminação;
      –      Sombreamento;
      –      Mapeamento de Texturas;
      –      Transparência;

• Implementações de OpenGL:
      – opengl32.dll (Microsoft)
      – opengl.dll (SGI)
      – mesa3d (GNU)

08/04/2010                                    3
Restrições
• As funcionalidades fornecidas pela OpenGL são de baixo nível;

• Não fornecem funcionalidades e gerenciamento de janelas e
  tratamento de eventos.

• Solução:
      – Extensão da OpenGL através de novas bibliotecas
      – GLU (OpenGL Utility Library)
             • Manipulação de matrizes;
             • Orientação da visualização;
             • Geração de superfícies quadráticas;
      – GLUT (OpenGL Utility Toolkit)
             • Criação de janelas e menus
             • Gerenciamento de janelas e interações do usuário



08/04/2010                                                        4
Programa Básico em OpenGL
#include <GL/glut.h>                           // headers


void Desenha (void) {                          // rotinas
 ...
}


int main(int argc, char **argv)
{
    glutInit(&argc,argv);                          // inicia a GLUT
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   // define o modo de exibição
    glutInitWindowSize(400,350);                   // tamanho da janela gráfica
    glutInitWindowPosition(10,10);                 // define posição da janela
    glutCreateWindow (“Quadrado");                 // cria a janela gráfica
    glutDisplayFunc(Desenha);                      // apresentação da cena
    Inicializa();                                  // definir estado inicial da opengl
    glutMainLoop();                                // inicia o laço gráfico
}

08/04/2010                                                                               5
Cabeçalhos
#include <GL/glut.h>


• Já inclui automaticamente os headers da
  OpenGL:
      – #include <GL/gl.h>
      – #include <GL/glu.h>


• Se a GLUT não for usada, os cabeçalhos da
  OpenGL tem que ser incluídos explicitamente.

08/04/2010                                       6
Estrutura do Main
• Inicialização da glut:
      glutInit(&argc, argv);


• Informar o modo do display a ser utilizado:
      glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);


      – GLUT_SINGLE
             • janela com buffer simples (todos os desenhos serão feitos
               nessa janela)
      – GLUT_RGB
             • sistema de cor utilizado será o RGB

08/04/2010                                                                 7
Estrutura do Main
• Definir tamanho, posição inicial e nome da
  janela criada:
      glutInitWindowSize (400, 350);
      glutInitWindowPosition (10, 10);
      glutCreateWindow (“Nome da Janela");

• Definir estado inicial do OpenGL:
      Inicializa();

      void Inicializa(void)
      {
           glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // cor de fundo da tela
           glMatrixMode(GL_PROJECTION);    // seleciona matriz de projeção
           glLoadIdentity();               // lê a matriz de identidade
           gluOrtho2D(0.0, 250.0, 0.0, 250.0); // projeção paralela
      }
08/04/2010                                                                   8
Registrando Callbacks
• Callbacks são rotinas que serão chamadas
  para tratar eventos;

• Para uma rotina callback ser efetivamente
  chamada, ela precisar ser registrada através
  da função:
      glutXXFunc (callback);
      – Onde XX designa uma classe de eventos;
      – callback é o nome da rotina;

08/04/2010                                       9
Callback de desenho
• É a rotina chamada sempre que a janela
  precisa ser redesenhada;
    glutDisplayFunc(Desenha);
             void Desenha (void)
             {
                glClear(GL_COLOR_BUFFER_BIT);   // limpa buffers
                glColor3f(1.0f, 0.0f, 0.0f);    // cor vermelha

                 glBegin(GL_QUADS);             // inicio do desenho
                   glVertex2i(100,150);
                   glVertex2i(100,100);
                   glVertex2i(150,100);
                   glVertex2i(150,150);
                   glEnd();                     // fim do desenho

                 glFlush();   // exibe o desenho na tela
             }
08/04/2010                                                             10
Resultado do Exemplo




08/04/2010                          11
Primitivas de Desenho
• Parâmetros de glBegin():
      – GL_POINTS: cada vértice como simples ponto
      – GL_LINES: cada par de vértices forma uma reta
      – GL_LINE_STRIP: traça um grupo de segmentos do
             primeiro ao último vértice
      –      GL_LINE_LOOP: traça um grupo de segmentos do primeiro
             ao último vértice, e retorna ao primeiro
      –      GL_TRIANGLES: cada trio de vértices como sendo os
             vértices de um triângulo
      –      GL_QUADS: cada grupo de 04 vértices como sendo os
             vértices de um quadrilátero
      –      GL_POLYGON: grupo de vértices como sendo os vértices de
             um polígono

08/04/2010                                                         12
Primitivas de desenho




08/04/2010                           13
Outros Callbacks
glutKeyboardFunc(keyborad);
      – Eventos do teclado

glutSpecialFunc(special);
      – Teclas especiais  Home, End, PageDown, PageUp

glutMouseFunc(mouse);
      – Interação com o muse

glutMotionFunc(motion);
      – Movimentos do mouse

08/04/2010                                               14
Convenções de Nomes
             glVertex3f(x, y);



                        Tipo   de dado
Número de componentes   b –    byte
2 – (x, y)              ub –   unsigned byte
3 – (x, y, z)           s –    short
4 – (x, y, z, w)        us –   unsigned short
                        i –    int
                        ui –   unsigned int
                        f –    float
                        d -    double
08/04/2010                                      15
Exercícios
1. A partir do programa básico, implemente
   outras primitivas de desenho da OpenGL.
2. Implemente os algoritmos de traçado de
   linhas DDA e Bresenham, fazendo a
   comparação do tempo de execução de cada
   um para uma mesma reta.



08/04/2010                                   16

Mais conteúdo relacionado

Mais procurados

Interação humano computador (introdução )
Interação humano computador (introdução )Interação humano computador (introdução )
Interação humano computador (introdução )
Jesse Teixeira
 

Mais procurados (20)

1ª aula forense computacional
1ª aula  forense computacional1ª aula  forense computacional
1ª aula forense computacional
 
Aula 01- web designer
Aula 01- web designerAula 01- web designer
Aula 01- web designer
 
Engenharia de Software para Jogos
Engenharia de  Software para JogosEngenharia de  Software para Jogos
Engenharia de Software para Jogos
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front end
 
Curso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSSCurso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSS
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
Informática e suas tecnologias
Informática e suas tecnologiasInformática e suas tecnologias
Informática e suas tecnologias
 
Interação humano computador (introdução )
Interação humano computador (introdução )Interação humano computador (introdução )
Interação humano computador (introdução )
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
07 html formulários
07 html   formulários07 html   formulários
07 html formulários
 
Palestra Sobre Engenharia Social
Palestra Sobre Engenharia SocialPalestra Sobre Engenharia Social
Palestra Sobre Engenharia Social
 
Informática Básica - Aula 04 - Software
Informática Básica - Aula 04 - SoftwareInformática Básica - Aula 04 - Software
Informática Básica - Aula 04 - Software
 
Introdução ao Web Design: Aula 1 - Imersão ao Web Design
Introdução ao Web Design: Aula 1 - Imersão ao Web DesignIntrodução ao Web Design: Aula 1 - Imersão ao Web Design
Introdução ao Web Design: Aula 1 - Imersão ao Web Design
 
Capítulo 08 - Conquistando excelência operacional e intimidade com o cliente:...
Capítulo 08 - Conquistando excelência operacional e intimidade com o cliente:...Capítulo 08 - Conquistando excelência operacional e intimidade com o cliente:...
Capítulo 08 - Conquistando excelência operacional e intimidade com o cliente:...
 
Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento Android
 
Licenças Creative Commons
Licenças Creative CommonsLicenças Creative Commons
Licenças Creative Commons
 
Introdução a internet
Introdução a internet Introdução a internet
Introdução a internet
 
Princípios básicos e clássicos de animação
Princípios básicos e clássicos de animaçãoPrincípios básicos e clássicos de animação
Princípios básicos e clássicos de animação
 
Introdução ao HTML e CSS
Introdução ao HTML e CSSIntrodução ao HTML e CSS
Introdução ao HTML e CSS
 

Semelhante a Introdução à OpenGL

Computação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLComputação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGL
Tony Alexander Hild
 
Defesa TC V1.2.1
Defesa TC V1.2.1Defesa TC V1.2.1
Defesa TC V1.2.1
B Bellaver
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
Diego Santos
 
Lógica de programação com visu alg
Lógica de programação com visu algLógica de programação com visu alg
Lógica de programação com visu alg
Leandro Santos
 
Apresentação tcd
Apresentação tcdApresentação tcd
Apresentação tcd
Thata2012
 

Semelhante a Introdução à OpenGL (20)

Palestra
PalestraPalestra
Palestra
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Server
 
Computação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLComputação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGL
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010
 
Defesa TC V1.2.1
Defesa TC V1.2.1Defesa TC V1.2.1
Defesa TC V1.2.1
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Java ME - Game API
Java ME - Game APIJava ME - Game API
Java ME - Game API
 
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
 
Lógica de programação com visu alg
Lógica de programação com visu algLógica de programação com visu alg
Lógica de programação com visu alg
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividade
 
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas EmbarcadosWebinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
 
Apresentação tcd
Apresentação tcdApresentação tcd
Apresentação tcd
 
Visualg2_manual.pdf
Visualg2_manual.pdfVisualg2_manual.pdf
Visualg2_manual.pdf
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Guia xna
Guia xnaGuia xna
Guia xna
 
JS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfJS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdf
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
C# básica
C#   básicaC#   básica
C# básica
 

Último

Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
andrenespoli3
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 

Último (20)

PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 

Introdução à OpenGL

  • 1. Introdução à Computação Gráfica Aula – Introdução à OpenGL Herbet Ferreira herbet@di.ufpb.br 08/04/2010 1
  • 2. Introdução à OpenGL • Open Graphic Library (http://www.opengl.org) • Biblioteca de rotinas gráficas de modelagens 2D e 3D, extremamente portável e rápida; • Introduzida em 1992 pela Silicon Graphics; – Conceber API gráfica independente do dispositivo de exibição • Gerenciado por um consórcio formado pelas principais empresas da área: – 3Dlabs, Apple, Nvidia, SGI e SUN; – Frequentes revisões proporcionam a incorporação das mais recentes técnicas e da evoluação do hardware; • Todas as rotinas são implementadas em C/C++ 08/04/2010 2
  • 3. Características • Recursos gráficos: – Desenhos de primitivas: • Pontos, Linhas e Polígonos; – Iluminação; – Sombreamento; – Mapeamento de Texturas; – Transparência; • Implementações de OpenGL: – opengl32.dll (Microsoft) – opengl.dll (SGI) – mesa3d (GNU) 08/04/2010 3
  • 4. Restrições • As funcionalidades fornecidas pela OpenGL são de baixo nível; • Não fornecem funcionalidades e gerenciamento de janelas e tratamento de eventos. • Solução: – Extensão da OpenGL através de novas bibliotecas – GLU (OpenGL Utility Library) • Manipulação de matrizes; • Orientação da visualização; • Geração de superfícies quadráticas; – GLUT (OpenGL Utility Toolkit) • Criação de janelas e menus • Gerenciamento de janelas e interações do usuário 08/04/2010 4
  • 5. Programa Básico em OpenGL #include <GL/glut.h> // headers void Desenha (void) { // rotinas ... } int main(int argc, char **argv) { glutInit(&argc,argv); // inicia a GLUT glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // define o modo de exibição glutInitWindowSize(400,350); // tamanho da janela gráfica glutInitWindowPosition(10,10); // define posição da janela glutCreateWindow (“Quadrado"); // cria a janela gráfica glutDisplayFunc(Desenha); // apresentação da cena Inicializa(); // definir estado inicial da opengl glutMainLoop(); // inicia o laço gráfico } 08/04/2010 5
  • 6. Cabeçalhos #include <GL/glut.h> • Já inclui automaticamente os headers da OpenGL: – #include <GL/gl.h> – #include <GL/glu.h> • Se a GLUT não for usada, os cabeçalhos da OpenGL tem que ser incluídos explicitamente. 08/04/2010 6
  • 7. Estrutura do Main • Inicialização da glut: glutInit(&argc, argv); • Informar o modo do display a ser utilizado: glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); – GLUT_SINGLE • janela com buffer simples (todos os desenhos serão feitos nessa janela) – GLUT_RGB • sistema de cor utilizado será o RGB 08/04/2010 7
  • 8. Estrutura do Main • Definir tamanho, posição inicial e nome da janela criada: glutInitWindowSize (400, 350); glutInitWindowPosition (10, 10); glutCreateWindow (“Nome da Janela"); • Definir estado inicial do OpenGL: Inicializa(); void Inicializa(void) { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // cor de fundo da tela glMatrixMode(GL_PROJECTION); // seleciona matriz de projeção glLoadIdentity(); // lê a matriz de identidade gluOrtho2D(0.0, 250.0, 0.0, 250.0); // projeção paralela } 08/04/2010 8
  • 9. Registrando Callbacks • Callbacks são rotinas que serão chamadas para tratar eventos; • Para uma rotina callback ser efetivamente chamada, ela precisar ser registrada através da função: glutXXFunc (callback); – Onde XX designa uma classe de eventos; – callback é o nome da rotina; 08/04/2010 9
  • 10. Callback de desenho • É a rotina chamada sempre que a janela precisa ser redesenhada; glutDisplayFunc(Desenha); void Desenha (void) { glClear(GL_COLOR_BUFFER_BIT); // limpa buffers glColor3f(1.0f, 0.0f, 0.0f); // cor vermelha glBegin(GL_QUADS); // inicio do desenho glVertex2i(100,150); glVertex2i(100,100); glVertex2i(150,100); glVertex2i(150,150); glEnd(); // fim do desenho glFlush(); // exibe o desenho na tela } 08/04/2010 10
  • 12. Primitivas de Desenho • Parâmetros de glBegin(): – GL_POINTS: cada vértice como simples ponto – GL_LINES: cada par de vértices forma uma reta – GL_LINE_STRIP: traça um grupo de segmentos do primeiro ao último vértice – GL_LINE_LOOP: traça um grupo de segmentos do primeiro ao último vértice, e retorna ao primeiro – GL_TRIANGLES: cada trio de vértices como sendo os vértices de um triângulo – GL_QUADS: cada grupo de 04 vértices como sendo os vértices de um quadrilátero – GL_POLYGON: grupo de vértices como sendo os vértices de um polígono 08/04/2010 12
  • 14. Outros Callbacks glutKeyboardFunc(keyborad); – Eventos do teclado glutSpecialFunc(special); – Teclas especiais  Home, End, PageDown, PageUp glutMouseFunc(mouse); – Interação com o muse glutMotionFunc(motion); – Movimentos do mouse 08/04/2010 14
  • 15. Convenções de Nomes glVertex3f(x, y); Tipo de dado Número de componentes b – byte 2 – (x, y) ub – unsigned byte 3 – (x, y, z) s – short 4 – (x, y, z, w) us – unsigned short i – int ui – unsigned int f – float d - double 08/04/2010 15
  • 16. Exercícios 1. A partir do programa básico, implemente outras primitivas de desenho da OpenGL. 2. Implemente os algoritmos de traçado de linhas DDA e Bresenham, fazendo a comparação do tempo de execução de cada um para uma mesma reta. 08/04/2010 16