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.
Download

Slide 1