用途:登记一个回调函数,经过设定的时间值后由GLUT调用该函数
头文件:<glut.h>
句法:glutTimerFunc(unsigned int msecs, void (*func)(int value), int value);
描述:登记一个回调函数,经过msecs毫秒后调用该函数,而且可以将用户指定的值value传递给 回调函数。
参数:
msece ----- 调用指定函数前应等待的毫秒数
func ----------- 经过设定的时间msece后调用该函数
value----------- 将用户指定的值传给该函数
调用函数原型:
void TimerFunction(int value)
注:在调用函数里面为了实现动画的连续性,必须再次重新设置定时器,并调用glutPostRedisplay()重新绘画
ex:跳动的小球
#include <windows.h>
#include <glut.h>
GLfloat x1 = 100.0f;
GLfloat y1 = 150.0f;
GLsizei rsize = 50;
GLfloat xstep = 1.0f;
GLfloat ystep = 1.0f;
GLfloat windowWidth;
GLfloat windowHeight;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glRectf(x1,y1,x1+rsize,y1+rsize);
glutSwapBuffers();
}
void reshape(GLsizei w,GLsizei h)
{
if (h == 0)
h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
{
windowHeight = 250.0f*h / w;
windowWidth = 250.0f;
}
else
{
windowHeight = 250.0f;
windowWidth = 250.0f*w / h;
}
glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0, -1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void init()
{
glClearColor(0, 0, 1, 1);
}
void timer(int value)
{
if (x1 > windowWidth - rsize || x1 < 0)
xstep = -xstep;
if (y1 > windowHeight - rsize || y1 < 0)
ystep = -ystep;
if (x1 > windowWidth - rsize)
x1 = windowWidth - rsize - 1;
if (y1 > windowHeight - rsize)
y1 = windowHeight - rsize - 1;
x1 += xstep;
y1 += ystep;
glutPostRedisplay();
glutTimerFunc(33, timer, 1);
}
void main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutCreateWindow("TEST");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(33,timer,1);
glutMainLoop();
}