我注意到,当我渲染一个简单的图元时,就像旋转的立方体一样,每次通过传统的while(!done)循环时,我将角度增加0.1,这是我在垂直同步开启时获得的结果。 off(在我的nVidia控制面板中已更改)在速度方面有很大差异。
例如,我使用以下代码:
while (!done)
{
PeekMessage(&msg, hWnd, NULL, NULL, PM_REMOVE);
if (msg.message == WM_QUIT)
{
done = true;
}
else
{
angle += 0.1;
if (angle >= 360.0)
{
angle = 0.0;
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
glPushMatrix();
glRotatef(angle, 1.0f, 0.0f, 0.0f);
glRotatef(angle, 0.0f, 1.0f, 0.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidCube(2.0f);
glPopMatrix();
glFlush();
SwapBuffers(hDC);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
当强制关闭垂直同步时,此立方体的旋转速度比强制垂直同步时快得多。现在,在游戏中,当启用垂直同步时,FPS锁定为60 fps,并且当禁用时,可以自由跳转到显示器允许的最高值。这可能与它有关。
我可以通过每次传递增加或减少我的角度来轻松解决这个问题,有没有办法让我的立方体以相同的方式旋转,尽管vsync开启或关闭?
答案 0 :(得分:5)
是的,使用时间增量。而不是每帧旋转0.1,你想要每20毫秒或其他东西旋转0.1。这样,无论fps如何,它都将以相同的速度旋转。
angle += 0.1 * time_elapsed_since_last_tick * some_factor;