/* GLUT callback Handlers */ void objeto(){ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(redObjeto,greenObjeto,blueObjeto); switch(primitiva){ case QUADRADO: DesenhaQuadrado(); break; case TRIANGULO: DesenhaTriangulo(); break; case POLIGONO: DesenhaPoligono(); break; } DesenhaBotoes(); }
// Função que desenha // Executada sempre que ocorre qualquer evento de janela void Display(void) { // Limpa a janela com a cor especificada como cor de fundo glClear(GL_COLOR_BUFFER_BIT); // Chamadas de funções OpenGL para desenho // Os pontos correspondem a geometria do objeto relativa a (0,0) // Indica que a matriz de transformação a ser alterada é a MODEL_VIEW glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Desenha eixos glColor3f(1.0f, 0.0f, 0.0f); // eixos vermelhos glBegin(GL_LINES); glVertex2f (0.0, -1.0); glVertex2f (0.0, 1.0); glVertex2f (-1.0, 0.0); glVertex2f (1.0, 0.0); glEnd(); // a sequencia a seguir é composta de modo que a ordem de aplicacao das // transformacoes é escala - rotacao - translacao glColor3f(1.0, 0.0, 0.0); DesenhaTriangulo(); // triangulo original glTranslatef (xDesloc, 0.0,0.0); // translacao em X glColor3f(1.0, 1.0, 0.0); DesenhaTriangulo(); glTranslatef(0.0,yDesloc, 0.0); // translacao em Y glColor3f(0.0, 1.0, 1.0); DesenhaTriangulo(); glRotatef (vRot,0.0, 0.0, 1.0); // rotacao de 30 graus antihorario glColor3f(0.0, 1.0, 0.0); DesenhaTriangulo(); glScalef (xScale, yScale, 1.0); // escalamento de 0.5 em X e Y glColor3f(0.0, 0.0, 0.0); DesenhaTriangulo(); // todas as transformacoes acumuladas // Alterna o buffer de geracao da imagem; contem um "flush" implicito glutSwapBuffers(); }