Transformações Geométricas em OpenGL
Disciplina: Computação Gráfica
Esta página foi criada a partir do material da profa. Isabel Harb
Manssour
O objetivo desta aula é exercitar a aplicação das transformações geométricas, a criação de instâncias e a manipulação da window, ou janela de seleção, para realizar operações de zoom e pan. Para elaboração dos exercícios desta aula é fundamental que a primeira aula prática tenha sido finalizada.
Altere o programa elaborado na primeira aula prática de maneira que as chamadas para as funções que desenham o triângulo fiquem em uma função, conforme o exemplo abaixo:
void DesenhaTriangulo(void)
{
// Desenha um triângulo no centro da janela
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0);
glVertex3f( 0.0, 0.5,0);
glVertex3f( 0.5,-0.5,0);
glEnd();
}
void Desenha(void)
{
....
DesenhaTriangulo();
....
}
Agora implemente as operações de zoom
e
Primeiro, registre a
função callback para gerenciar eventos do teclado acrestando a
seguinte linha de código na função main, antes da chamada para a
função Inicializa():
glutMouseFunc(GerenciaMouse);
A função GerenciaMouse deve ter o seguinte formato:
void GerenciaMouse(int button, int state, int x, int y)Em seguida, declare a variável global win (logo após os includes) e a inicialize-a com 5.0, como mostram os trechos de código abaixo:
#include
GLfloat win = 5.0;
Agora, na função Inicializa, altere a chamada da função glutOrtho2D para que use a variável win da seguinte maneira:
// Define a janela de visualização 2D
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // o uso deste comando garante que o zoom
// seja feito de forma absoluta e não relativa
gluOrtho2D(-win, win, -win, win);
glMatrixMode(GL_MODELVIEW);
Atenção: Note que a colocação de um glLoadIdentity() antes do glOrtho2D é obrigatória !!
Em seguida, complete a função GerenciaMouse. Esta função deve alterar a variável win de maneira a implementar o zoom-in e o zoom-out. Uma sugestão: some ou subtrair 0.1 da varíável win a cada clique de um dos botões.
Um exemplo completo da implementação do zoom está disponível em http://www.inf.pucrs.br/~manssour/OpenGL/Eventos.html. A única diferença é que no exemplo é feito o zoom-in e o zoom-out quando o usuário pressiona as teclas GLUT_KEY_UP e GLUT_KEY_DOWN, ao invés de clicar com o botão do mouse.
Para implementar o pan, que consiste, basicamente, no deslocamento da window no sistema de referência do universo, o procedimento é semelhante ao zoom, porém as coordenadas da função gluOrtho2D devem ser alteradas de maneira que a window seja deslocada para cima, para baixo, para esquerda e para direita. Para implementar esta operação, vamos precisar de duas variáveis globais que armazenem este deslocamento. Estas variáveis devem ser declaradas e inicializadas conforme ilustram os trechos de código a seguir.
#includeGLfloat
GLfloat win=5.0;panX, panY;
Depois, altere a chamada da função gluOrtho2D da seguinte maneira:
gluOrtho2D (-win+panX, win+panX, -win+panY, win+panY);
Agora basta definir que as teclas que irão deslocar a window, ou seja, que irão alterar os valores das variáveis panX e panY.
FIM.