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(); } |