Im new in opengl. Im using keyboardfunc, when press “+” make my polygons bigger, i want to press “Home” to undo all my changes and get back to original position and size.
// Quadrado.c - Isabel H. Manssour
// Um programa OpenGL simples que desenha um
// quadrado em uma janela GLUT.
// Este código está baseado no GLRect.c, exemplo
// disponível no livro "OpenGL SuperBible",
// 2nd Edition, de Richard S. e Wright Jr.
#include <windows.h>
#include <gl/glut.h>
GLfloat escala = 1;
GLfloat movx, movy = 0;
GLfloat win;
// Função callback chamada para fazer o desenho
void Desenha(void)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Limpa a janela de visualização com a cor de fundo especificada
glClear(GL_COLOR_BUFFER_BIT);
// Especifica que a cor corrente é vermelha
// R G B
glColor3f(1.0f, 0.0f, 0.0f);
glPushMatrix();
glTranslatef(movx,movy,0);
glScalef(escala, escala, 0);
// Desenha um quadrado preenchido com a cor corrente
glBegin(GL_TRIANGLES);
glColor3f(1,1,0);
glVertex2f(40,60);
glVertex2f(20,20);
glVertex2f(60,20);
glEnd();
glBegin(GL_TRIANGLES);
glVertex2f(20,20);
glVertex2f(0,-20);
glVertex2f(40,-20);
glEnd();
glBegin(GL_TRIANGLES);
glVertex2f(60,20);
glVertex2f(40,-20);
glVertex2f(80,-20);
glEnd();
glPopMatrix();
// Executa os comandos OpenGL
glFlush();
}
// Inicializa parâmetros de rendering
void Inicializa (void)
{
// Define a cor de fundo da janela de visualização como preta
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
// Função callback chamada quando o tamanho da janela é alterado
void AlteraTamanhoJanela(GLsizei w, GLsizei h)
{
// Evita a divisao por zero
if(h == 0) h = 1;
// Especifica as dimensões da Viewport
glViewport(0, 0, w, h);
// Inicializa o sistema de coordenadas
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Estabelece a janela de seleção (left, right, bottom, top)
if (w <= h)
gluOrtho2D (0.0f, 250.0f, 0.0f, 250.0f*h/w);
else
gluOrtho2D (0.0f, 250.0f*w/h, 0.0f, 250.0f);
}
// Função callback chamada para gerenciar eventos do teclado
// para teclas especiais, tais como F1, PgDn e Home
void tecla_especial(GLint tecla, GLint x, GLint y)
{
switch(tecla)
{
case GLUT_KEY_RIGHT: movx++;
break;
case GLUT_KEY_LEFT: movx--;
break;
case GLUT_KEY_HOME:glLoadIdentity();
break;
case GLUT_KEY_UP:
win -= 20;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (-win, win, -win, win);
break;
case GLUT_KEY_DOWN:
win += 20;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (-win, win, -win, win);
break;
}
glutPostRedisplay();
}
void teclas(unsigned char tecla, int x, int y)
{
switch(tecla)
{
case 27: // Escape key
case 'q':
exit(0);
break;
case '+':escala=escala*1.5;
break;
case '-':escala=escala*0.5;
break;
}
glutPostRedisplay();
}
// Programa Principal
int main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,350);
glutInitWindowPosition(10,10);
glutCreateWindow("Triforce");
glutDisplayFunc(Desenha);
glutSpecialFunc (tecla_especial);
glutReshapeFunc(AlteraTamanhoJanela);
glutKeyboardFunc(teclas);
Inicializa();
glutMainLoop();
}