zoukankan      html  css  js  c++  java
  • 【转】使用glut定时器控制帧率

    写了个程序,运行很慢,帧率很低,不知道什么原因,以为程序代码太多,执行太慢,经过不断的调试和验证,才弄明白。现在记录一下:

    在glut函数中:

          通过函数glutDisplayFunc(Draw);来设置需要显示的画面函数,虽然函数中有glutSwapBuffers();和glFlush();函数来刷新输出,但不会不断进行刷新。

         如果需要不断刷新,则需要进行如下设置:

         glutDisplayFunc(Draw);

         glutIdleFunc(Draw);  //增加idle时候的函数

    但是这样的话,如果函数内容不多,则会刷新过快。于是要通过glut的定时器函数来控制帧率,定时进行glutPostRedisplay();

    例程如下:

    使用glutTimerFunc是因為我想要讓他固定每16ms更新畫面一次(FPS大約60) void main() {    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );    glutInitWindowSize( 640,480 );    WinNumber=glutCreateWindow( "Test" );    glutDisplayFunc(display);    。。。。。。    glutTimerFunc(16, OnTimer, 1);    glutMainLoop(); } void OnTimer(int value) {    alpha++;    alpha=(alpha%256);    glutPostRedisplay();    glutTimerFunc(16, OnTimer, 1); } void display() {       ..........上略...............
         glutSwapBuffers(); }

    (1)如果用定时器的话,初始的时候注册一个定时器的回调函数,原型是
    glutTimerFunc(unsigned int
    millis, void (*func)(int value), int value);
    参数对应关系为:glutTimerFunc(毫秒数,
    回调函数指针, 区别值);
    (2)写自己的回调函数 void OnTimer(int
    value);
    用value区分是哪个定时器
    (3)在函数里改变和位置有关的变量,然后调用glutPostRedisplay();用来重绘
    (4)最后再次调用glutTimerFunc,因为glut的定时器是调用一次才产生一次定时,所以如果要持续产生定时的话,在定时函数末尾再次调用glutTimerFunc

  • 相关阅读:
    今天的雪糕格外好吃!
    定了!对于本周四(7.16日)抽奖活动取消简要说明,新抽奖活动暂定下周三(7.22日)...
    你喜欢什么样的课堂?
    无题
    属于你们的“礼仪小课堂”
    红歌合唱之团结就是力量
    《此生未完成》痛句摘录(一)
    端午前夕的班级小游戏
    排序>插入排序 小强斋
    排序>交换排序 小强斋
  • 原文地址:https://www.cnblogs.com/lzhitian/p/2818502.html
Copyright © 2011-2022 走看看