gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:07:17 25 4
gpt4 key购买 nike

你如何控制动画的速度?我的对象在另一个机器上的动画速度更快。

void idle(void){

if (!wantPause){
circleSpin = circleSpin + 2.0; //spin circles
if(circleSpin > 360.0)
{
circleSpin = circleSpin - 360.0;
}

diamondSpin = diamondSpin - 4.0; //spin diamonds
if(diamondSpin > 360.0)
{
diamondSpin = diamondSpin + 360.0;
}
ellipseScale = ellipseScale + 0.1; //scale ellipse
if(ellipseScale > 30)
{
ellipseScale = 15;
}
glutPostRedisplay();
}
}

void drawScene()
{
...
glColor3f(1,0,0);
glPushMatrix();
glRotatef(circleSpin,0,0,1);
drawOuterCircles();
glPopMatrix();
}


int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(400,400);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Lesson 6");
init();
glutDisplayFunc(drawScene);
glutKeyboardFunc(keyboard);
glutReshapeFunc(handleResize);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}

最佳答案

这是穷人的解决方案:

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 按固定量移动对象,但如果帧率下降,则很容易出错。

在后者中,您根据耗时移动对象。例如。如果过了 20 毫秒,则将对象旋转 12 度,如果过了 10 毫秒,则将其旋转 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;
}
}
}

关于opengl - 你如何确保OpenGL动画在不同机器上的速度是一致的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com