//***************************************************** // // PrimeiroPrograma.cpp // Um programa OpenGL simples que abre uma janela GLUT // e desenha um triângulo no centro // // Isabel H. Manssour e Marcelo Cohen // Este código acompanha o livro // "OpenGL - Uma Abordagem Prática e Objetiva" // //***************************************************** #include #include // Variáveis que controlam o deslocamento da casinha GLfloat tx, ty; // Função callback de redesenho da janela de visualização void Desenha(void) { // Limpa a janela de visualização com a cor branca glClearColor(1,1,1,0); glClear(GL_COLOR_BUFFER_BIT); // Carrega a matriz identidade glLoadIdentity(); // Define a cor de desenho: preto glColor3f(0,0,0); glLineWidth(1); // Desenha os eixos coordenados glBegin(GL_LINES); glVertex2f(-1,0); glVertex2f(1,0); glVertex2f(0,-1); glVertex2f(0,1); glEnd(); // Define a cor de desenho: vermelho glColor3f(1,0,0); // Desenha uma casinha no centro da janela glLineWidth(3); glTranslatef(tx, ty, 0); glBegin(GL_TRIANGLES); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.2,0.1); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0,0.22); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(0.2,0.1); glEnd(); glBegin(GL_LINE_LOOP); glVertex2f(-0.2,-0.2); glVertex2f(-0.2,0.1); glVertex2f(0.2,0.1); glVertex2f(0.2,-0.2); glEnd(); //Executa os comandos OpenGL glFlush(); } // Função callback chamada para gerenciar eventos de teclas void Teclado (unsigned char key, int x, int y) { if (key == 27) exit(0); } void TeclasEspeciais(int key, int x, int y) { switch (key) { case GLUT_KEY_UP: ty += 0.1; break; case GLUT_KEY_DOWN: ty -= 0.1; break; case GLUT_KEY_LEFT: tx -= 0.1; break; case GLUT_KEY_RIGHT:tx += 0.1; break; } glutPostRedisplay(); } // Função responsável por inicializar parâmetros e variáveis void Inicializa(void) { // Define a janela de visualização 2D glMatrixMode(GL_PROJECTION); gluOrtho2D(-1.0,1.0,-1.0,1.0); glMatrixMode(GL_MODELVIEW); tx = ty = 0; } // Programa Principal int main(void) { // Define do modo de operação da GLUT glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // Especifica o tamanho inicial em pixels da janela GLUT glutInitWindowSize(400,400); // Cria a janela passando como argumento o título da mesma glutCreateWindow("Casinha"); // Registra a função callback de redesenho da janela de visualização glutDisplayFunc(Desenha); // Registra a função callback para tratamento das teclas ASCII glutKeyboardFunc (Teclado); // Registra a função callback para tratamento das teclas especiais glutSpecialFunc(TeclasEspeciais); // Chama a função responsável por fazer as inicializações Inicializa(); // Inicia o processamento e aguarda interações do usuário glutMainLoop(); return 0; }