Introdução ao OpenGL

Post date: 16/02/2015 13:28:43

O OpenGL é uma ferramenta gráfica utilizada para geração de gráficos 2D e 3D, capaz de gerar gráficos de alta qualidade através de primitivas vetoriais e matriciais.

O OpenGL funciona como uma máquina de estados em que registra-se as ações decorrentes ao acontecimento de eventos como:

–Mouse foi apertado

–Janela foi redimensionada

–Teclado foi pressionado

Esses eventos são escutados por um monitor do próprio OpenGL que inicia as ações programadas.

Cada evento dispara ações programadas pelo usuário ou seja, os eventos são tratados por rotinas callback da aplicação.

O OpenGL é composto por três partes:

  • —GLUT ( OpenGL Utility Toolkit)

    • —API portátil de acesso aos sistemas de janelas

    • —Encapsula e esconde as camadas proprietárias

    • —Não é parte oficial do OpenGL

  • GLU ( OpenGL Utility Library )

    • Parte do padrão OpenGL

    • NURBS, trianguladores , quádricas , etc.

  • AGL, GLX, WGL

    • Camadas entre o OpenGL os diversos sistemas de janelas

1. Configurando o Glut em Seu Computador

Nos links disponíveis a seguir é apresentado um guia passo a passo que ilustra o processo de configuração da biblioteca glut em Windows e Linux

  • https://sites.google.com/site/rodccosta/tutoriais/computacao-grafica/glut-linux

  • https://sites.google.com/site/rodccosta/tutoriais/computacao-grafica/glut-windows

Bem como utilizar o assistente disponível no CodeBlocks

  • https://sites.google.com/site/rodccosta/tutoriais/computacao-grafica/primeiroprojetoglutnocodeblocks

Estrutura de um Código C que utiliza a biblioteca Glut

#include <windows.h>

#ifdef __APPLE__

#include <GLUT/glut.h>

#else

#include <GL/glut.h>

#endif

#include <stdio.h>

#include <stdlib.h>

/* Declaração de Callbacks */

static void display(void)

{

glColor3d(1,0,0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glutSwapBuffers();

}

int main(int argc, char *argv[])

{

// inicialização

glutInit(&argc, argv);

glutInitWindowSize(640,480);

glutInitWindowPosition(10,10);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("GLUT Shapes");

// registro de callbacks

glutDisplayFunc(display);

glClearColor(1,1,1,1);

glutMainLoop();

return EXIT_SUCCESS;

}

CARREGAMENTO DE BIBLIOTECAS

OBS: O include <windows.h> é necessário apenas na plataforma windows

Nesta fase são implementadas as ações decorrentes de eventos. Neste exempo é configurada a ação de limpar a tela após cada evento de solicitação de atualização de tela.

Função principal para inicialização do sistema e registro das calbacks para os eventos desejados.

Neste exemplo só foi configurada a calback para o evento de atualização de tela.

Comentário sobre cada função de inicialização

3. Registrando Callbacks

Os callbacks são rotinas que serão chamadas para tratar eventos. Para uma rotina callback ser efetivamente chamada ela precisa ser registrada através de funções que tem sintaxe similar a mostrada abaixo:

Exemplos:

  • GlutDisplayFunc ( callback )

  • GluMouseFunc ( callback )

Na tabela a seguir é apresentada a função de registro de calback e um template para cada função de calback e a descrição de seus parametros de entrada.

4. Desenhando primitivas

Dentro da função display ou qualquer momento do código você pode fazer solicitações de desenho.

  • glClearColor(R,G,B,A); escolhe a cor do fundo;

  • glClear( GL_COLOR_BUFFER_BIT ); limpa a tela

  • glColor3f(R,G,B) : especifica a cor de desenho atual;

Para desenhar algo, deve-se utilizar a estrutura a seguir :

glBegin(PRIMITIVA);

glVertex2f(x,y);

.....

glEnd();

Importante: por padrão o opengl só permite visualizar objetos que possuem -1 < x < 1 e -1 < y < 1.

As primitivas são configuráveis e você escolhe-as dentre os tipos a seguir:

Exemplo:

glBegin(GL_LINE_LOOP);

glVertex2f(0.114,-0.048);

glVertex2f(0.160,-0.122);

glVertex2f(0.176,-0.205);

glVertex2f(0.092,-0.205);

glVertex2f(0.043, -0.130);

Resultado