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