open gl
Trabalho prático de laboratório de Computação Gráfica.
A ideia geral de animação em OpenGL está intimamente relacionada à
CallBack time. Esta função serve para não somente alterar o estado do objeto a ser animado, mas também ajustar o tempo e forçar a chamada à função de CallBack de Desenho. Um esquema geral pode ser o seguinte:
Declaração, dentro da função main, da call-back time. Por exemplo: glutCreateWindow("Anima"); Definição (em qualquer lugar antes da main()) da função Anima:
Void Timer(int value)
Chama, através da glutPostRedisplay() a call-back de Desenho, agora com as novas modificações do objeto a ser desenhado. Exemplo do Uso da Timer void Timer(int value)
{
// Muda a direção quando chega na borda esquerda ou direita if(x1 > windowWidth-rsize || x1 < 0) xstep = -xstep;
// Muda a direção quando chega na borda superior ou inferior if(y1 > windowHeight-rsize || y1 < 0) ystep = -ystep;
// Verifica as bordas. Se a window for menor e o
// quadrado sair do volume de visualização if(x1 > windowWidth-rsize) x1 = windowWidth-rsize-1; if(y1 > windowHeight-rsize) y1 = windowHeight-rsize-1;
// Move o quadrado x1 += xstep; y1 += ystep;
// Redesenha o quadrado com as novas coordenadas glutPostRedisplay(); glutTimerFunc(33,Timer, 1);
}
// Programa Principal int main(void)
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(400,350); glutInitWindowPosition(10,10); glutCreateWindow("Anima"); glutDisplayFunc(Desenha); glutReshapeFunc(AlteraTamanhoJanela); glutTimerFunc(33, Timer, 1);
Inicializa();
glutMainLoop();
}
Exercício: Cada aluno deverá animar um objeto diferente, a sua escolha.
O objeto deverá conter iluminação a sua escolha também. Sugiro que as transformações geométricas animadas nos objetos não se restrinjam à rotação em torno do seu próprio eixo, como mostra o DEMO.
Sugestão: faça um objeto que se mova aleatoriamente nas dimensões da viewport e implemente