07. Primeiro Programa
A biblioteca GLUT, descrita no capítulo 5, é utilizada nos exemplos deste tutorial que começam a ser
apresentados a partir deste capítulo. Portanto, estes exemplos podem ser compilados em várias plataformas sem a necessidade,
por exemplo, de saber elaborar programas com interface para ambiente Windows.
Para entender o funcionamento da GLUT, logo abaixo
é apresentado o menor programa OpenGL possível, implementado por [Wright 2000], que simplesmente abre
uma janela OpenGL.
// PrimeiroPrograma.c - Isabel H. Manssour
// Um programa OpenGL simples que abre uma janela GLUT
// Este código está baseado no Simple.c, exemplo
// disponível no livro "OpenGL SuperBible",
// 2nd Edition, de Richard S. e Wright Jr.
#include <gl/glut.h>
// Função callback chamada para fazer o desenho
void Desenha(void)
{
//Limpa a janela de visualização com a cor de fundo especificada
glClear(GL_COLOR_BUFFER_BIT);
//Executa os comandos OpenGL
glFlush();
}
// Inicializa parâmetros de rendering
void Inicializa (void)
{
// Define a cor de fundo da janela de visualização como preta
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
// Programa Principal
int main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutCreateWindow("Primeiro Programa");
glutDisplayFunc(Desenha);
Inicializa();
glutMainLoop();
}
Obs.: Clique nos links a seguir para fazer o download
deste programa, incluindo o projeto e o executável, para os ambientes de programação Visual C++ e Dev-C++,
respectivamente: Exemplo Visual C++, Exemplo Dev-C++.
Este programa simples contém quatro funções
da biblioteca GLUT (prefixo glut), e três funções OpenGL (prefixo gl).
O conteúdo deste programa é descrito detalhadamente a seguir.
-
O arquivo glut.h contém os protótipos das
funções utilizadas pelo programa. Ele também inclui os headers gl.h e glu.h
que definem, respectivamente, as bibliotecas de funções OpenGL e GLU. O header #include
é requerido por todas as aplicações windows, mas a sua inclusão é opcional porque a versão
WIN32 da GLUT já inclui o windows.h na glut.h. Entretanto, se o objetivo
é criar um código portável, é um bom hábito incluir este arquivo.
-
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); avisa
a GLUT que tipo de modo de exibição deve ser usado quando a janela é criada. Neste caso os argumentos
indicam a criação de uma janela single-buffered (GLUT_SINGLE) com o modo de cores
RGBA (GLUT_RGB). O primeiro significa que todos os comandos de desenho são feitos na janela de
exibição. Uma alternativa é uma janela double-buffered, onde os comandos de desenho são
executados para criar uma cena fora da tela para depois rapidamente colocá-la na view
(ou janela de visualização).
Este método é geralmente utilizado para produzir efeitos de animação. O modo de cores RGBA
significa que as cores são especificadas através do fornecimento de intensidades dos
componentes red, green e blue separadas.
-
glutCreateWindow("Primeiro Programa"); é o comando da biblioteca
GLUT que cria a janela. Neste caso, é criada uma janela com o nome "Primeiro Programa". Este argumento
corresponde a legenda para a barra de título da janela.
-
glutDisplayFunc(Desenha); estabelece a
função "Desenha" previamente definida como a função callback de exibição.
Isto significa que a GLUT chama a função sempre que a janela precisar ser
redesenhada. Esta chamada ocorre, por exemplo, quando a janela é redimensionada ou encoberta.
É nesta função que se deve colocar as chamadas de funções OpenGL, por exemplo, para modelar e
exibir um objeto.
-
Inicializa(); não é uma função OpenGL nem GLUT,
é apenas uma convenção utilizada exemplos apresentados por [Wright 2000], nos quais este tutorial está baseado. Nesta
função são feitas as inicializações OpenGL que devem ser executadas antes do
rendering. Muitos estados OpenGL devem ser determinados somente uma vez e não
a cada vez que a função “Desenha” é chamada.
-
glutMainLoop(); é a função que faz com que
comece a execução da “máquina de estados” e processa todas as mensagens específicas do sistema operacional, tais como teclas e
botões do mouse pressionados, até que o programa termine.
-
glClearColor(0.0f, 0.0f, 1.0f, 1.0f); é a
função que determina a cor utilizada para limpar a janela. Seu protótipo é:
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alfa);.
GLclampf é definido como um float na maioria das implementações de OpenGL.
O intervalo para cada componente red, green, blue é de 0 a 1. O
componente alfa é usado para efeitos especiais, tal como transparência.
-
glClear(GL_COLOR_BUFFER_BIT); "limpa"
um buffer particular ou combinações de buffers, onde buffer é uma
área de armazenamento para informações da imagem. Os componentes RGB são geralmente
referenciados como color buffer ou pixel buffer. Existem vários tipos de
buffer, mas por enquanto só é necessário entender que o color buffer é
onde a imagem é armazenada internamente e limpar o buffer com glClear
remove o desenho da janela.
-
glFlush(); faz com que qualquer
comando OpenGL não executado seja executado. Neste primeiro exemplo tem apenas a
função glClear [Wright 2000].
Comentários, dúvidas, sugestões, envie um mail para [email protected]
|