当前位置:  开发笔记 > 后端 > 正文

你如何确保OpenGL动画的速度在不同的机器上是一致的?

如何解决《你如何确保OpenGL动画的速度在不同的机器上是一致的?》经验,为你挑选了1个好方法。



1> Kornel Kisie..:

这是穷人的解决方案:

FPS = 60.0;
while (game_loop) {
    int t = getticks();
    if ((t - t_prev) > 1000/FPS)
        process_animation_tick();
    t_prev = t;
}

这是更好的解决方案:

GAME_SPEED = ...
while (game_loop) {
    int t = getticks();
    process_animation((t - t_prev)*GAME_SPEED/1000.0);
    t_prev = t;
}

在第一个中,getframe将您的对象移动一个固定的数量,但如果帧速率下降,则容易出错.

在后者中,您可以根据传递的时间移动对象.例如,如果20ms通过,则将对象旋转12度,如果经过10ms,则将其旋转6度.通常,动画如果时间函数通过.

实施getticks()取决于您.首先你可以使用glutGet(GLUT_ELAPSED_TIME).


在你的情况下,它看起来像:

int old_t;

void idle(void) {
  int t = glutGet(GLUT_ELAPSED_TIME);
  int passed = t - old_t;
  old_t = t;
  animate( passed );
  glutPostRedisplay();
}

void animate( int ms )
{  
  if (!wantPause){    
    circleSpin = circleSpin + ms*0.01;      //spin circles
    if(circleSpin > 360.0)
    {
      circleSpin = circleSpin - 360.0;
    }
    diamondSpin = diamondSpin - ms*0.02;    //spin diamonds
    if(diamondSpin > 360.0)
    {
        diamondSpin = diamondSpin - 360.0;
    }
    ellipseScale = ellipseScale + ms*0.001;  //scale ellipse
    if(ellipseScale > 30)
    {
        ellipseScale = 15;
    }
  }
}

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有