glutPostRedisplay重新刷新页面绘图

opengl重新绘制窗口:
void timerProc(int id)
{
//display();
glutPostRedisplay();

glutTimerFunc(10,timerProc,1);//需要在函数中再调用一次,才能保证循环

}
int main(int argc, char** argv)
{

//int k=0;
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (800, 800);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(100,timerProc,1); //glutTimerFunc(毫秒数, 回调函数指针, 区别值);

//主函数中 注册回调函数:
// glutKeyboardFunc(KeyFunc); 键盘按键
glutMouseFunc(MouseFunc); //鼠标按键
glutMotionFunc(MouseMotion); //鼠标移动并在 渲染函数 开始处调用:
glMatrixMode(GL_MODELVIEW);
LookAt();
glutMainLoop();

exit(0);
}
glutPostRedisplay 标记当前窗口需要重新绘制。通过glutMainLoop下一次循环时,窗口显示将被回调以重新显示窗口的正常面板。多次调用glutPostRedisplay,在下一个显示回调只产生单一的重新显示回调。
有了glutPostRedisplay函数,和mainloop,则会反复调用glutDisplayFunc(display);
代码也可以改为如下形式,将display()放在 timerProc函数里面:
void timerProc(int id)
{
display();
glutTimerFunc(10,timerProc,1);//需要在函数中再调用一次,才能保证循环
}
int main(int argc, char** argv)
{

//int k=0;
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (800, 800);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(100,timerProc,1); //glutTimerFunc(毫秒数, 回调函数指针, 区别值);

//主函数中 注册回调函数:
// glutKeyboardFunc(KeyFunc); 键盘按键
glutMouseFunc(MouseFunc); //鼠标按键
glutMotionFunc(MouseMotion); //鼠标移动并在 渲染函数 开始处调用:
glMatrixMode(GL_MODELVIEW);
LookAt();
glutMainLoop();
exit(0);
}
这样不需要main函数里面带有glutPostRedisplay();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值