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

  • 相关阅读:
    js正则表达式基本语法
    类似于QQ的右滑删除效果的实现方法
    JS设置cookie、读取cookie、删除cookie
    JavaScript随机生成颜色的方法
    mysql数据库备份及恢复
    Javascript 实现简单计算器实例代码
    JavaScript 实现的checkbox经典实例分享
    网页瀑布流布局jQuery实现代码
    Django Web在Apache上的部署
    VIM使用系列之一——配置VIM下C/C++编程环境
  • 原文地址:https://www.cnblogs.com/lzhitian/p/2818502.html
Copyright © 2011-2022 走看看