glutTimerFunc详解

用途:登记一个回调函数,经过设定的时间值后由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();
}

 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值