Você está na página 1de 14

Operao de Zoom e Pan

Conceito
Altera o tamanho da window. Para fazer Zoom in deve-se diminuir o tamanho da window, enquanto para fazer o Zoom out preciso aument-la

Varivel global:
GLfloat win; GLsizei largura, altura;

void TeclasEspeciais(int key, int x, int y) { if (key == GLUT_KEY_UP) { if (win > 0) win -= 5.0f; // diminui o tamanho da window (zoom in) } else if (key == GLUT_KEY_DOWN) { if (win < 900) win += 5.0f; // aumenta o tamanho da window (zoom out) }

if (key == GLUT_KEY_UP || key == GLUT_KEY_DOWN) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (largura <= altura) gluOrtho2D (-win, win, -win*altura/largura, win*altura/largura); else gluOrtho2D (-win*largura/altura, win*largura/altura, -win, win); glutPostRedisplay(); } }

PAN
A Operao de Pan, muito comum nas aplicaes grficas, consiste em deslocar a janela de visualizao de tal maneira que o usurio consiga visualizar diferentes partes do universo cada vez que ele interage com o sistema com esta finalidade.

Quando se est trabalhando com visualizao 2D, a implementao de pan consiste em permitir que o usurio altere os parmetros passados para a funo gluOrtho2D. Essa alterao deve ser sempre uniforme para os eixos x e y. Portanto, definimos variveis para controlar o deslocamento da window nos eixos x e y.

Variveis para controlar o deslocamento da window nos eixos x e y

GLfloat win, deslocamentoX, deslocamentoY; GLsizei largura, altura;


As variveis de deslocamento so usadas na chamada funo gluOrtho2D para fazer com com que a window mude de lugar no universo.

void EspecificaParametrosDeVisualizacao(void) { // Inicializa o sistema de coordenadas glMatrixMode(GL_PROJECTION); glLoadIdentity();


// Estabelece a janela de seleo (esquerda, direita, inferior, // superior) mantendo a proporo com a janela de visualizao if (largura <= altura) gluOrtho2D (-win+deslocamentoX, win+deslocamentoX, -win*altura/largura+deslocamentoY, win*altura/largura+deslocamentoY); else gluOrtho2D (win*largura/altura+deslocamentoX,win*largura/altura+deslocamentoX, -win+deslocamentoY, win+deslocamentoY); glMatrixMode(GL_MODELVIEW); }

Neste Programa, a operao de pan no eixo x realizada sempre que o usurio pressiona as teclas de setas para a esquerda e direita. Neste caso, a varivel deslocamentoX , respectivamente, decrementada ou incrementada. O pan no eixo y realizado de maneira anloga, ou seja, ao serem pressionadas as teclas de setas para baixo e para cima a varivel deslocamentoY decrementada ou incrementada. As telcas PageUp e PageDown so usadas para aplicar zoom in e zoom out.

void TeclasEspeciais(int key, int x, int y) { switch(key) { case GLUT_KEY_UP: // desloca a window para cima deslocamentoY += 2; break; case GLUT_KEY_DOWN: // desloca a window para baixo deslocamentoY -= 2; break; case GLUT_KEY_LEFT: // desloca a window para o lado esquerdo deslocamentoX -= 2; break; case GLUT_KEY_RIGHT: // desloca a window para o lado direito deslocamentoX += 2; break;

case GLUT_KEY_PAGE_UP: if (win > 0) win -= 5.0f; // diminui o tamanho da window (zoom in) break; case GLUT_KEY_PAGE_DOWN: if (win < 900) win += 5.0f; // aumenta o tamanho da window (zoom out) break; } EspecificaParametrosDeVisualizacao(); glutPostRedisplay(); }

// Funo responsvel por inicializar parmetros e variveis void Inicializa (void) win = 50.0f; deslocamentoX = 0.0f; deslocamentoY = 0.0f; }

// Programa Principal void main(void) {

// Registra a funo callback para tratamento das teclas especiais


glutSpecialFunc(TeclasEspeciais);