Funções para serem usadas no exercício de Lab 04/03/11 Visualização 3D Incluir no FrameWork Básico (já feito em Lab), as funções: // Função responsável por inicializar parâmetros e variáveis void WorkSpace(void) { // Notem que mudou sensivelmente o Menu, agora F1 também rotaciona (para incluir rotação a esquerda e direita) printf("\nAo Pressionar ‘m’ essas Instrucoes sempre serao Reapresentadas\n"); printf("\n\n"); printf("Instrucoes\n\n"); printf("Pressione o Botao Esquerdo, Arraste e Solte para Transladar\n\n"); printf("Tecle F1, F2 e F3 para rotacionar a direita, esquerda e em y \n\n"); printf("Tecle F4 e F5 para escalonar\n\n"); printf("Use o Botao Direito para Acessar o Menu\n\n"); glutInitWindowPosition(0,0); glutInitWindowSize(LarWindow, AltWindow); glutCreateWindow("Exercicio Lab CG "); glClearColor(1, 1, 1, 0); Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) Continua …… // Especifica as dimensões da Viewport glViewport(0, 0, LarWindow, AltWindow); GLfloat xMin = (GLfloat) -LarWindow/2.0; // largura minima GLfloat xMax = (GLfloat) LarWindow/2.0; // largura maxima GLfloat yMin = (GLfloat) -AltWindow/2.0; // largura minima GLfloat yMax = (GLfloat) AltWindow/2.0; // largura maxima gluOrtho2D (xMin, xMax, yMin, yMax); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) // Wireframe predefinido no OpenGL para incluir um TeaPot // Substitui o desenho de primitivas – Apenas para dar aulas void DesenhaTeaPot() { glColor3f(R,G,B); glutWireTeapot(0.5); } Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) // Função callback de redesenho da janela de visualização void Desenha(void) { // Limpa a janela de visualização com a cor branca glClear(GL_COLOR_BUFFER_BIT); if (triangulo) DesenhaTriangulo(); if (quadrado) DesenhaQuadrado(); if (poligono) DesenhaPoligono(); if (teapot) /// Novidade!!! Agora desenha um TeaPot DesenhaTeaPot(); //Executa os comandos OpenGL glFlush(); //glutPostRedisplay(); } Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) // Teclado para Teclas Especiais void TecladoEspecial(int tecla, int x, int y) { switch(tecla) { case 'm': printf("\nAo Pressionar 'm', essas Instrucoes sempre serao Reapresentadas\n"); printf("\n\n"); printf("Instrucoes\n\n"); printf("Pressione o Botao Esquerdo, Arraste e Solte para Transladar\n\n"); printf("Tecle F1, F2 e F3 para rotacionar\n\n"); printf("Tecle F4 e F5 para escalonar\n\n"); printf("Use o Botão Direito para Acessar o Menu\n\n"); break; case GLUT_KEY_F1: // Rotaciona em X rotX = 1; glRotatef(2.0,rotX,0.0,0.0); /// Novidade!! Agora as variaveis de transformação são feitas aqui rotX = 0; /// Foram incluidas rotX, rotY e rotZ Globais (Retirar as variaveis de transformacao) glutPostRedisplay(); /// das funções de Desenho, como antes break; Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) Continua ,…… case GLUT_KEY_F2: // Rotaciona em Y rotY = 1; glRotatef(2.0,0.0,rotY,0.0); rotY = 0; glutPostRedisplay(); break; case GLUT_KEY_F3: // Rotaciona em Z rotZ = -1; glRotatef(2.0,0.0,0.0,rotZ); rotZ = 0; glutPostRedisplay(); break; case GLUT_KEY_F4: // Amplia glScalef(1.1,1.1,1.1); glutPostRedisplay(); break; case GLUT_KEY_F5: // Reduz glScalef(0.9,0.9,0.9); glutPostRedisplay(); break; case GLUT_KEY_INSERT: printf("\nPressionada a Tecla INSERT\n"); break; case GLUT_KEY_HOME: printf("\nPressionada a Tecla HOME\n"); break; } } Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) void MouseMotion(int botton, int state, int x, int y) { switch(botton) { case GLUT_LEFT_BUTTON: switch(state) { case GLUT_DOWN: //printf("botao esquerdo foi pressionado em (x,y) = (%d,%d)\n\n",x,y); xini = x; yini = y; break; case GLUT_UP: GLfloat dx = (GLfloat)x - (GLfloat)xini; // Novidade!!! as variaveis de translação agora são atualizadas aqui GLfloat dy = (GLfloat)yini - (GLfloat)y; GLfloat dz = 0; //if (teapot) dx = dx/1000; dy = dy/1000; glTranslatef(dx/100.0,dy/100.0,0); dx = 0.0; dy = 0.0; xini = x; yini = y; glutPostRedisplay(); break; }; break; case GLUT_RIGHT_BUTTON: break; } } Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) // Controle de Primitivas int quadrado = 0, triangulo = 0, poligono = 0, teapot = 1; // Variáveis para controles de navegação GLfloat angle, fAspect; GLfloat rotX, rotY, rotZ; // Inlcuir opção para Teapot no menu agora é com vocês!!! Exercícios com Pontuação 1- [Nível Básico]: Faça um programa básico em OpenGL para desenhar um TeaPot em 3D. 2- [Nível Médio]: Usando como FrameWork básico o programa de transformações de primitivas básicas do exercício da aula passada, inclua o Teapot3D no sistema. Observe o Demo na página da disciplina.