Todos os programas deste curso foram criados e testados no Linux (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:
O Linux (clone do Unix) é, de longe, o melhor sistema operacional do mundo, do sistema solar (já está presente até em Marte) e, brevemente, da galáxia, nas futuras viagens interplanetárias. 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 (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.
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 dezenas de comandos no prompt do Unix.
O Makefile da Figura 1-1 foi utilizado para compilar os exemplos desse curso. Para obter uma cópia deste arquivo clique aqui.
# Compila programas do curso de OpenGL # digite: make programa.c # CC = gcc CFLAGS = -O2 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -I/usr/X11R6/include XLIBS = -L/usr/X11/lib -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE ##### MACROS ##### INCDIR = /usr/include LIBDIR = /usr/lib GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL -lm $(XLIBS) LIB_DEP = $(LIBDIR)/$(GL_LIB) ##### RULES ##### .SUFFIXES: .SUFFIXES: .c .c: $(LIB_DEP) $(CC) -I$(INCDIR) $(CFLAGS) $< $(GL_LIBS) -o $@ ##### TARGETS ###### clean: -rm *.o *~ |
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 fácilmente compilados.
Para testar se esse arquivo funciona no seu sistema, copie-o com o nome "Makefile" para um diretório, juntamente com o programa teste-make.c, mostrado na Figura 1-2. Dentro deste diretório, execute a seguinte seqüência de comandos:
$ make teste-make
$ teste-make |
Caso apareça um quadrado branco dentro de uma janela com fundo preto, é sinal de que ocorreu tudo bem.
Figura 1-2. programa teste-make.c
/* programa teste-make.c */
#include <GL/glut.h>
#include <stdlib.h>
void display(void);
void keyboard(unsigned char key, int x, int y);
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();
} |