Compilando programas que utilizam OpenGL

1.3. Compilando programas que
utilizam OpenGL – Linux

Todos os programas deste curso foram criados e testados no Linux (http://www.linux.org), e
utilizam GLUT como biblioteca auxiliar para manipular janelas e tratar eventos.
Esta escolha pode ser justificada por duas razões principais:

  1. O Linux (clone do Unix) é um ótimo sistema operacional (o melhor, segundo a opinião
    do meu amigo Prof. Agostinho). Um programa escrito em C padrão,
    compilado e testado no Linux, também funcionará a contento em outros sistemas,
    principalmente se for compilado com a mesma ferramenta utilizada para compilar
    os exemplos deste curso, o gcc, da GNU (http://www.gnu.org). Além
    de ser gratuito, este compilador é bastante otimizado e possui versões
    disponíveis para a maioria dos sistemas operacionais existentes.

  2. O GLUT está implementado em diversos sistemas operacionais, facilitando a
    portabilidade de programas.

As tarefas de compilação foram automatizadas com o utilitário make. O make determina automaticamente
que partes de um grande programa necessitam ser recompiladas e os comandos
necessários para recompilá-las, a partir da leitura das regras definidas em um
arquivo Makefile. Assim, para efetuar a compilação do
programa, basta executar o comando make, ao invés de
digitar vários comandos no prompt do Unix.

O Makefile da Figura
1-2
foi utilizado para compilar os exemplos desse curso. Para obter uma
cópia deste arquivo para uso no CESET clique aqui. Já para obter uma
cópia do Makefile para uso no Unisal, clique aqui. Grave-os em seu diretório de trabalho simplesmente com o nome Makefile.

Figura 1-2. arquivo Makefile

# Compila programas do curso de OpenGL no ambiente Linux
# Substitua nome_do_programa pelo nome do programa ...
# ...que se está trabalhando
#
# Antes das linhas que contém "gcc...", não pode haver espaço em
# branco e sim uma marca de tabulação
#
# Prof. Marco Antonio
#

# Variables
MESA = /usr/bin/Mesa-5.0 
INCPATH = -I$(MESA)/include
LIBPATH = -L$(MESA)/lib
LIBS        = -lglut -lGLU -lGL -lm
CFLAGS  = $(INCPATH) -g
LFLAGS  = $(LIBPATH) $(LIBS)

# Main targets
nome_do_programa: nome_do_programa.o
        gcc -o nome_do_programa nome_do_programa.o $(LFLAGS)

# Source targets
nome_do_programa.o: nome_do_programa.c
        gcc -c nome_do_programa.c $(CFLAGS)


As regras contidas neste arquivo Makefile incluem opções de compilação tais
como -lglut, referente à biblioteca auxiliar GLUT, e -lMesaGLU -lMesaGL, referentes às bibliotecas padrão do OpenGL
para o Mesa3d, possibilitando que programas simples possam ser facilmente
compilados.

Atenção: Os espaços em branco antes das linhas 10, 14 e 18 no Makefile
são feitos com a tecla TAB (somente uma marca de tabulação).

Para testar se esse arquivo funciona no seu sistema, copie-o com o nome “Makefile” (o arquivo Makefile não tem extensão) para um diretório qualquer, juntamente
com o programa teste-make.c, mostrado na Figura
1-3
. Altere o Makefile de forma que a palavra nome_do_programa seja substituída por
teste-make. Dentro deste diretório, execute a seguinte seqüência de comandos:

$ make teste-make
$ ./teste-make

Caso apareça um quadrado preto dentro de uma janela com fundo branco, é sinal
de que ocorreu tudo bem.

Figura 1-3. programa teste-make.c

/* programa teste-make.c */
/* Desenha um quadrado preto em uma janela com fundo branco */

#include <GL/glut.h>
#include <stdlib.h>

void display(void);

int main(int argc, char** argv){
  glutInit(&argc, argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize (256, 256); 
  glutInitWindowPosition (100, 100); 
  glutCreateWindow (argv[0]);
  glClearColor(1.0, 1.0, 1.0, 0.0);
  glShadeModel (GL_FLAT);
  glOrtho (0, 1, 0, 1, -1 ,1);
  glutDisplayFunc(display);
  glutMainLoop();
  return 0;
}


void display(void){
  int i;
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f (0.0, 0.0, 0.0);
  glBegin(GL_POLYGON);
  glVertex2f(0.25,0.25);
  glVertex2f(0.75,0.25);
  glVertex2f(0.75,0.75);
  glVertex2f(0.25,0.75);
  glEnd();
  glFlush();
}